Viss, kas jums jāzina par Eval Python



Šis raksts sniegs jums detalizētas un visaptverošas zināšanas par Eval Python, tā trūkumiem un lietojumiem ar piemēriem.

Visur, kur paskatās apkārt, jūs atradīsit lietojumprogrammu, kas ir īpaši izveidota, lai apmierinātu jūsu vajadzības. Lai gan ir daudz programmēšanas valodu, kuras var izmantot šo lietojumprogrammu izstrādei, lielākā daļa no tām tiek veidotas, izmantojot . Python kopā ar tā lieliskajām funkcijām un palielināto daudzpusību sniedz galdā unikālus piedāvājumus, kas vienmēr ir gan spēcīgi, gan ļoti noderīgi. Šajā Eval Python rakstā mēs apspriedīsim šādus jautājumus:

Kas ir Eval Python?

Eval funkcija Python ir viena no interesantākajām iespējām. Daži to sauc par uzlaušanu un citi to sauc par saīsni, taču, lai arī kā to varētu izmantot, lai palaistu programmu Python, izmantojot Python kodu. Diezgan forši vai ne?





Izmantojot eval funkciju, jūs būtībā mudināt tulku palaist, kas ir iekļauts eval funkcijas iekavās.

PythonLogo- Novērtējiet PythonFunkcijas eval izmantošanas Python sintakse ir šāda:



eval (izteiksme, globāļi = nav, vietējie = nav)

Iepriekš aprakstītajā sintaksē

  1. Izteiksme: Tieši virkne vai koda daļa tiek parsēta un novērtēta kā Python izteiksme pašā Python programmā.



  2. Globāls: Tieši vārdnīca tiek izmantota, lai definētu visas pieejamās globālās metodes iepriekš minētās izteiksmes izpildei. Šī ir izvēles entītija, un tās izmantošana ir atkarīga no jūsu vajadzības.

  3. Vietējie: Līdzīgi globālajiem vārdiem, šī ir vēl viena vārdnīca, kas tiek izmantota, lai norādītu pieejamās vietējās metodes, kā arī mainīgos.

Lai labāk izprastu šīs funkcijas lietojumu, apskatiet tālāk sniegto piemēru.

from math import * def secret_function (): return 'Slepenā atslēga ir 1234' def function_creator (): # vērtējamā izteiksme expr = raw_input ('Ievadiet funkciju (izteiksmē x):') # izteiksmē x = izmantotais mainīgais int (raw_input ('Ievadiet x vērtību:')) # novērtē izteiksmi y = eval (expr) # novērtēta rezultāta drukāšana ('y = {}'. formāts (y)) ja __name__ == '__main__': function_creator ()

Iepriekš minētajā piemērā function_creator ir funkcija, kas novērtēs lietotāja izveidotās matemātiskās izteiksmes, kad programma tiks izpildīta.

Izeja:

Ievadiet funkciju (izteiksmē x): x * (x + 1) * (x + 2)

Ievadiet x vērtību: 3

kā ierakstīt java

y = 60

Analīze

Tagad, kad esat apskatījis iepriekš koplietoto kodu, ļaujiet mums to nedaudz analizēt.

  1. Iepriekš minētā funkcija kā ievadi izmantos jebkuru izteiksmē x mainīgo.

  2. Pēc izpildes lietotājam tiks piedāvāts ievadīt vērtību x, tikai pēc tam tiks ģenerēta programma.

  3. Visbeidzot, programma Python izpildīs eval funkciju, parsējotizteiktkā arguments.

Eval. Trūkumi

Līdzīgi citām iebūvētajām Python funkcijām, arī Eval ir daži trūkumi, kas, ja neņem vērā, var radīt problēmu.

Ja aplūkojat iepriekš minēto piemēru, viena no galvenajām funkcijas ievainojamībām, function_creator ir tā, ka tā var atklāt visas slēptās vērtības programmā un arī izsaukt kaitīgu funkciju, jo pēc noklusējuma eval izpildīs visu, kas atrodas tās iekavās.

Lai to tālāk saprastu, ieskatieties zemāk redzamajā piemērā.

datuma datu tips kv

Lietotāja ievade

Ievadiet funkciju (izteiksmē x): secret_function ()

Ievadiet x: 0 vērtību

Izeja:

y = Slepenā atslēga ir 1234

Vēl viena bīstama situācija, kas rodas, izmantojot eval funkciju, ir importēt os moduli. Kad esat importējis os moduli, tas ļauj Python lasīt un rakstīt visus jūsu dzimtajā sistēmā esošos failus bez lietotāja autentifikācijas. Šādā gadījumā, ja nepareizi ierakstāt vienukoda rindiņa, visi vietējie faili var tikt izdzēsti.

Visu šo trūkumu risinājums ir eval funkcijas ierobežošana.

Padarīt Eval drošu Python

Novērtējums pēc noklusējuma nāk ar iespēju parsēt jebkuru funkciju, kurai tai ir piekļuve, vai jebkuru citu, kas jau ir definēts. Paturot to prātā, rakstot kodu, ievērojami ierobežosiet eval iespējas, tādējādi pārliecinoties, ka nekas nepareizs.

Lai saprastu šo jēdzienu tālāk, ieskatieties zemāk esošajā piemērā.

from math import * def secret_function (): return 'Slepenā atslēga ir 1234' def function_creator (): # vērtējamā izteiksme expr = raw_input ('Ievadiet funkciju (izteiksmē x):') # izteiksmē x = izmantotais mainīgais int (raw_input ('Ievadiet x vērtību:')) # mainīgā lieluma x nodošana drošā vārdnīcā safe_dict ['x'] = x # novērtē izteiksmi y = eval (expr, {'__builtins __': Neviens}, safe_dict) # drukāšana novērtētā rezultāta izdruka ('y = {}'. formāts (y)), ja __nosaukums = = '__main__': # drošo metožu saraksts safe_list = ['acos', 'asin', 'atan', 'atan2', 'griesti ',' cos ',' cosh ',' grādi ',' e ',' exp ',' fabs ',' grīda ',' fmod ',' frexp ',' hipot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # drošu metožu vārdnīcas izveide safe_dict = dict ([[(k, vietējie (). get (k, Neviens)) par k drošajā sarakstā]] function_creator ()

Lietotāja ievade

Ievadiet funkciju (izteiksmē x): secret_function ()

Ievadiet x: 0 vērtību

Izeja:

metiens vs metiens vs metams java

NameError: nosaukums 'secret_function' nav definēts

Kā redzat, ierobežojot eval piekļuvi, tiek noraidītas nepareizas izejas iespējas, kas var izrādīties kaitīgas.

Eval lietojums

Kā paskaidrots iepriekšējās sadaļās, vairāku drošības apsvērumu dēļ eval netiek izmantots tik bieži. Bet tomēr ir īpaši lietošanas gadījumi, kad eval izmantošana izrādās noderīga. Daži no nozīmīgākajiem no tiem ir.

  1. Ja vēlaties, lai lietotājs ievadītu savus skriptus, lai modificētu programmas izvadi, noderēs eval funkcijas izmantošana.

  2. Rakstot izteicienus, lai atrisinātu matemātiskos jautājumus, varat izmantot eval, jo tas ir daudz vieglāk nekā rakstīt izteicienu parsētāju.

Tagad, kad jūs zināt visu par eval, mēs ceram, ka jūs to izmantosiet ikdienas programmēšanā, paturot prātā priekšrocības, kā arī trūkumus.

Ar to mēs esam nonākuši pie šī Eval Python raksta beigām. Lai iegūtu padziļinātas zināšanas par Python kopā ar tā dažādajām lietojumprogrammām, varat tiešsaistes apmācībai tiešsaistē ar diennakts atbalstu un piekļuvi mūža garumā.

Vai mums ir jautājums? Pieminiet tos komentāru sadaļā “Eval in Python”, un mēs ar jums sazināsimies.