Tot el que heu de saber sobre Eval a Python



Aquest article us proporcionarà un coneixement detallat i exhaustiu d’Eval a Python, els seus inconvenients i usos amb exemples.

Sempre que mireu al vostre voltant, trobareu una aplicació que s’ha dissenyat específicament per satisfer les vostres necessitats. Tot i que hi ha molts llenguatges de programació que es poden utilitzar per desenvolupar aquestes aplicacions, la majoria es construeixen mitjançant . Python, juntament amb les seves excel·lents funcions i una major versatilitat, aporta a la taula ofertes úniques, alhora que potents i útils en tot moment. En aquest article d'Eval in Python tractarem els següents punts:

Què és Eval a Python?

La funció eval a Python és una de les opcions més interessants que hi ha. Alguns l’anomenen pirateig i d’altres, una drecera, però de qualsevol manera podeu fer-ne ús per executar un programa Python dins d’un codi Python. Molt bé no?





Quan utilitzeu la funció eval, bàsicament esteu demanant a l'intèrpret que s'executi que estigui inclòs dins del parèntesi de la funció eval.

PythonLogo- Eval a PythonLa sintaxi per utilitzar la funció eval a Python és:



què fa un escàner a Java

eval (expressió, globals = Cap, locals = Cap)

A la sintaxi anterior,

  1. Expressió: És la cadena o tros de codi que s’analitza i s’avalua com a expressió Python dins del propi programa Python.



  2. Globals: És el diccionari que s’utilitza per definir tots els mètodes globals disponibles per executar l’expressió esmentada anteriorment. Es tracta d’una entitat opcional i els seus usos depenen de la vostra necessitat.

  3. Locals: Similar als globals, aquest és un altre diccionari que s’utilitza per especificar els mètodes locals disponibles així com les variables.

Per entendre millor l'ús d'aquesta funció, mireu l'exemple següent.

from math import * def secret_function (): return 'La clau secreta és 1234' def function_creator (): # expressió a avaluar expr = raw_input ('Introduïu la funció (en termes de x):') # variable utilitzada a l'expressió x = int (raw_input ('Introduïu el valor de x:')) # expressió avaluadora y = eval (expr) # impressió resultat avaluat impressió ('y = {}'. format (y)) si __name__ == '__main__': function_creator ()

A l'exemple anterior, function_creator és una funció que avaluarà les expressions matemàtiques creades per l'usuari quan s'executa el programa.

Sortida:

Introduïu la funció (en termes de x): x * (x + 1) * (x + 2)

Introduïu el valor de x: 3

i = 60

Anàlisi

Ara que heu vist el codi compartit anteriorment, analitzem-ho una mica més.

  1. La funció anterior prendrà com a entrada qualsevol variable de l’expressió x.

  2. Un cop executat, es demanarà a l'usuari que introdueixi un valor per a x, només després del qual es generarà el programa.

  3. Finalment, el programa Python executarà la funció eval analitzant el fitxerexprcom a argument.

Inconvenients d'Eval

De manera similar a altres funcions integrades de Python, eval també presenta alguns inconvenients que poden crear un problema si no es té en compte.

Si mireu l’exemple anterior, una de les principals vulnerabilitats de la funció, function_creator és que pot exposar qualsevol valor ocult dins del programa i també recórrer a una funció perjudicial, ja que eval per defecte executarà qualsevol cosa que estigui dins del seu parèntesi.

Per entendre-ho més, mireu l'exemple següent.

converteix la cadena de dates en data

Entrada de l'usuari

Introduïu la funció (en termes de x): secret_function ()

Introduïu el valor de x: 0

Sortida:

i = Secret key is 1234

Una altra situació perillosa que comporta l'ús de la funció eval és la importació del mòdul os. Quan hàgiu importat el mòdul OS, permet a Python llegir i escriure qualsevol fitxer present al vostre sistema nadiu sense autenticació de l'usuari. En aquest cas, si escriviu malament una solalínia de codi, és possible que se suprimeixin tots els fitxers natius.

La solució a tots aquests inconvenients rau en restringir les capacitats de la funció eval.

Fer Eval segur a Python

Eval per defecte inclou l'opció d'analitzar qualsevol funció a la qual tingui accés o qualsevol que ja s'hagi definit. Si ho teniu en compte mentre escriviu el vostre codi, limitarà les capacitats de eval en una mesura considerable, assegurant-vos que res no surt malament.

Per entendre més aquest concepte, consulteu l'exemple següent.

from math import * def secret_function (): return 'La clau secreta és 1234' def function_creator (): # expressió a avaluar expr = raw_input ('Introduïu la funció (en termes de x):') # variable utilitzada a l'expressió x = int (raw_input ('Introduïu el valor de x:')) # passant la variable x al diccionari segur safe_dict ['x'] = x # expressió d'avaluació y = eval (expr, {'__builtins __': Cap}, safe_dict) # impressió impressió del resultat avaluat ('y = {}'. format (y)) si __name__ == '__main__': # llista de mètodes segurs safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' graus ',' e ',' exp ',' fabs ',' floor ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # creant un diccionari de mètodes segurs safe_dict = dict ([(k, locals (). get (k, None)) per k a safe_list]) function_creator ()

Entrada de l'usuari

Introduïu la funció (en termes de x): secret_function ()

Introduïu el valor de x: 0

Sortida:

NameError: el nom 'secret_function' no està definit

Com podeu veure limitant l'accés a eval, s'han negat les possibilitats d'una sortida incorrecta que pugui resultar perjudicial.

Usos d’Eval

Com s’explica a les seccions anteriors, a causa de diversos motius de seguretat, l’eval no s’utilitza tan sovint. Però, tot i així, hi ha casos d'ús particulars en què l'ús de eval resulta útil. Alguns dels més significatius són.

  1. Si voleu que l'usuari introdueixi els seus propis scriptlets per modificar la sortida del programa, l'ús de la funció eval resultarà útil.

  2. Mentre escriviu expressions per resoldre consultes matemàtiques, podeu fer servir eval ja que és molt més fàcil que escriure un analitzador d’expressions.

Ara que ja sabeu tot sobre eval, esperem que en feu ús en la vostra programació diària tenint en compte els avantatges i els inconvenients.

Amb això, arribem al final d’aquest article d’Eval a Python. Per obtenir coneixements en profunditat sobre Python juntament amb les seves diverses aplicacions, podeu fer-ho per a formació en línia en directe amb assistència les 24 hores del dia, els 7 dies de la setmana i accés durant tota la vida

Tens alguna pregunta? Esmenteu-los a la secció de comentaris de 'Eval a Python' i us respondrem.