Ang Kailangan Mong Malaman Tungkol sa Eval sa Python



Magbibigay sa iyo ang artikulong ito ng isang detalyado at komprehensibong kaalaman tungkol sa Eval sa Python, Ito ay mga drawbacks at ginagamit sa mga halimbawa.

Kahit saan ka lumingon sa paligid mo, makakahanap ka ng isang application na partikular na naitayo upang matupad ang iyong mga pangangailangan. Bagaman maraming mga wika sa programa na maaaring magamit upang mapaunlad ang mga application na ito, karamihan sa mga ito ay binuo gamit ang . Ang Python kasama ang mga magagaling na tampok at nadagdagang kakayahang magamit sa mesa ay nagdudulot ng mga natatanging alok sa talahanayan na kapwa malakas at higit na kapaki-pakinabang sa lahat ng oras. Sa artikulong ito ng Eval sa Python tatalakayin namin ang mga sumusunod na puntos:

php lumikha ng array mula sa string

Ano ang Eval sa Python?

Ang eval function sa Python ay isa sa mga pinaka-kagiliw-giliw na pagpipilian doon. Ang ilan ay tinawag itong isang pag-hack at ang ilan ay tinawag itong isang shortcut, ngunit sa alinmang paraan maaari mo itong magamit, upang magpatakbo ng isang programa ng Python sa loob ng isang Python code. Medyo cool di ba?





Kapag ginamit mo ang eval function, karaniwang hinihimok mo ang interpreter na tumakbo na nakapaloob sa loob ng bracket ng eval function.

PythonLogo- Eval sa PythonAng syntax para sa paggamit ng eval function sa Python ay:



eval (expression, globals = Wala, mga lokal = Wala)

Sa syntax sa itaas,

  1. Pagpapahayag: Ito ang string o piraso ng code na na-parse at sinuri bilang isang expression ng Python sa loob ng mismong programa ng Python.



  2. Pandaigdigan: Ito ay ang diksyunaryo na ginagamit upang tukuyin ang lahat ng mga pandaigdigang pamamaraan na magagamit upang maisagawa ang expression na nabanggit sa itaas. Ito ay isang opsyonal na entity at ang mga paggamit nito ay nakasalalay sa iyong pangangailangan.

  3. Mga lokal: Katulad ng mga globo, ito ay isa pang diksyunaryo na ginagamit upang tukuyin ang magagamit na mga lokal na pamamaraan pati na rin ang mga variable.

Upang mas maunawaan ang paggamit ng pagpapaandar na ito nang mas mabuti, tingnan ang halimbawa sa ibaba.

mula sa math import * def secret_unction (): ibalik ang 'Secret key ay 1234' def function_creator (): # expression na susuriin expr = raw_input ('Ipasok ang pagpapaandar (sa mga tuntunin ng x):') # variable na ginamit sa expression x = int (raw_input ('Ipasok ang halaga ng x:')) # sinusuri ang expression y = eval (expr) # pag-print na sinuri ang resulta ng pag-print ('y = {}'. format (y)) kung __name__ == '__main__': function_creator ()

Sa halimbawa sa itaas, ang function_creator ay isang pagpapaandar na susuriin ang mga expression ng matematika na nilikha ng gumagamit kapag ang programa ay naisakatuparan.

Output:

Ipasok ang pagpapaandar (sa mga tuntunin ng x): x * (x + 1) * (x + 2)

Ipasok ang halaga ng x: 3

y = 60

Pagsusuri

Ngayon na tiningnan mo ang code na ibinahagi sa itaas, ipaalam sa amin itong pag-aralan nang kaunti pa.

  1. Ang pag-andar sa itaas ay kukuha ng anumang variable sa expression x bilang input nito.

  2. Kapag naipatupad, ang gumagamit ay sasabihan na mag-input ng isang halaga para sa x, pagkatapos lamang nito ay magreresulta para sa programa ay nabuo.

  3. Sa wakas, ang programa ng Python ay papatupad ng eval function sa pamamagitan ng pag-parse ngexprbilang isang pagtatalo.

Mga drawbacks ng Eval

Katulad ng iba pang mga built-in na pag-andar ng Python, ang eval ay mayroon ding ilang mga drawbacks na maaaring lumikha ng isang problema kung hindi accounted.

Kung titingnan mo ang halimbawa sa itaas, ang isa sa mga pangunahing kahinaan ng pagpapaandar, ang function_creator ay maaari nitong mailantad ang anumang mga nakatagong halaga sa loob ng programa at tumawag din sa isang mapanganib na pag-andar tulad ng eval bilang default ay naisasagawa ang anumang nakapaloob sa panaklong nito.

Upang maunawaan ito nang higit pa, tingnan ang halimbawa sa ibaba.

Input mula sa Gumagamit

Ipasok ang pagpapaandar (sa mga tuntunin ng x): secret_unction ()

nahati ang string ng maraming mga delimiter ng java

Ipasok ang halaga ng x: 0

Output:

y = Ang sikretong susi ay 1234

Ang isa pang mapanganib na sitwasyon na kasama ng paggamit ng eval function ay ang pag-import ng os module. Kapag na-import mo ang os module, pinapayagan itong basahin at isulat ng anumang mga file na naroroon sa iyong katutubong system nang walang pagpapatotoo mula sa gumagamit. Sa ganitong kaso, kung nagkamali ka ng pag-type ng isang solonglinya ng code, maaaring matanggal ang lahat ng iyong mga katutubong file.

Ang solusyon sa lahat ng mga drawback na ito ay nakasalalay sa paghihigpit sa mga kakayahan ng eval function.

Ginagawang ligtas ang Eval sa Python

Ang Eval bilang default ay may kasamang pagpipilian ng pag-parse ng anumang pagpapaandar na may access ito o anumang natukoy na. Ang pagpapanatili nito sa isip habang sinusulat ang iyong code, ay maglilimita sa mga kakayahan ng eval sa isang malawak na lawak kaya tinitiyak na ikaw na walang mali.

Upang higit na maunawaan ang konseptong ito, tingnan ang halimbawa sa ibaba.

mula sa math import * def secret_unction (): ibalik ang 'Secret key ay 1234' def function_creator (): # expression na susuriin expr = raw_input ('Ipasok ang pagpapaandar (sa mga tuntunin ng x):') # variable na ginamit sa expression x = int (raw_input ('Ipasok ang halaga ng x:')) # pagpasa ng variable x sa ligtas na diksyunaryo safe_dict ['x'] = x # sinusuri ang expression y = eval (expr, {'__builtins __': Wala}, safe_dict) # pag-print sinuri ang resulta ng pag-print ('y = {}'. format (y)) kung __name__ == '__main__': # listahan ng mga ligtas na pamamaraan safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' degrees ',' e ',' exp ',' fabs ',' floor ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # lumilikha ng isang diksyunaryo ng mga ligtas na pamamaraan safe_dict = dict ([(k, mga lokal (). kumuha (k, Wala)) para sa k sa safe_list]) function_creator ()

Input mula sa Gumagamit

Ipasok ang pagpapaandar (sa mga tuntunin ng x): secret_unction ()

Ipasok ang halaga ng x: 0

Output:

NameError: hindi tinukoy ang pangalang 'secret_unction'

print_r sa php

Tulad ng nakikita mo sa pamamagitan ng paglilimita sa pag-access ng eval, ang mga pagkakataong may maling output na maaaring patunayan na nakakapinsala ay naiwala.

Mga Gamit ng Eval

Tulad ng ipinaliwanag sa mga seksyon sa itaas, dahil sa maraming mga kadahilanan sa seguridad ang eval ay hindi gaanong karaniwang ginagamit. Ngunit pa rin, may mga partikular na kaso ng paggamit kung saan ang pagpapatunay ng eval ay nagpapatunay na maging kapaki-pakinabang. Ang ilan sa mga pinakamahalaga sa mga ito ay.

  1. Kung nais mong ipasok ng gumagamit ang kanilang sariling mga scriptlet upang mabago ang output ng programa, ang paggamit ng eval function ay napatunayan na maging kapaki-pakinabang.

  2. Habang nagsusulat ng mga expression upang malutas ang mga query sa matematika maaari kang gumamit ng eval dahil mas madali ito kaysa sa pagsulat ng isang parser na expression.

Ngayon na alam mo na ang lahat tungkol sa masama, inaasahan naming gagamitin mo ang pareho sa iyong pang-araw-araw na pag-program habang isinasaalang-alang ang mga pakinabang pati na rin ang mga drawbacks.

Sa pamamagitan nito, natapos namin ang Eval sa artikulong Python na ito. Upang makakuha ng malalim na kaalaman sa Python kasama ang iba't ibang mga application nito, maaari mo para sa live na pagsasanay sa online na may suporta na 24/7 at habang-buhay na pag-access.

May tanong ba sa amin? Nabanggit ang mga ito sa seksyon ng mga komento ng 'Eval sa Python' at babalikan ka namin.