Dondequiera que mire a su alrededor, encontrará una aplicación que ha sido diseñada específicamente para satisfacer sus necesidades. Aunque hay muchos lenguajes de programación que se pueden utilizar para desarrollar estas aplicaciones, la mayoría de ellos se crean utilizando . Python, junto con sus excelentes características y una mayor versatilidad, trae a la mesa ofertas únicas que son poderosas y sumamente útiles en todo momento. En este artículo de Eval in Python discutiremos los siguientes puntos:
¿Qué es Eval en Python?
La función eval en Python es una de las opciones más interesantes que existen. Algunos lo llaman truco y algunos lo llaman atajo, pero de cualquier manera puedes usarlo para ejecutar un programa Python dentro de un código Python. Bastante bien, ¿verdad?
cadena hasta la fecha convertir en java
Cuando usa la función eval, básicamente está instando al intérprete a ejecutar que está encerrado dentro del corchete de la función eval.
La sintaxis para usar la función eval en Python es:
eval (expresión, globales = Ninguno, locales = Ninguno)
En la sintaxis anterior,
Expresión: Es la cadena o fragmento de código que se analiza y evalúa como una expresión de Python dentro del propio programa de Python.
globales: Es el diccionario que se utiliza para definir todos los métodos globales disponibles para ejecutar la expresión mencionada anteriormente. Esta es una entidad opcional y sus usos dependen de su necesidad.
Locales: Similar a los globales, este es otro diccionario que se usa para especificar los métodos locales disponibles, así como las variables.
Para comprender mejor el uso de esta función, observe el ejemplo siguiente.
from math import * def función_secreta (): return 'La clave secreta es 1234' def creador_función (): # expresión a evaluar expr = raw_input ('Ingrese la función (en términos de x):') # variable usada en la expresión x = int (raw_input ('Ingrese el valor de x:')) # evaluando la expresión y = eval (expr) # imprimiendo el resultado evaluado print ('y = {}'. format (y)) if __name__ == '__main__': function_creator ()
En el ejemplo anterior, function_creator es una función que evaluará las expresiones matemáticas creadas por el usuario cuando se ejecuta el programa.
Salida:
Ingrese la función (en términos de x): x * (x + 1) * (x + 2)
Ingrese el valor de x: 3
y = 60
Análisis
Ahora que ha visto el código compartido anteriormente, analicémoslo un poco más.
La función anterior tomará cualquier variable en la expresión x como entrada.
Una vez ejecutado, se le pedirá al usuario que ingrese un valor para x, solo después de lo cual se generará el resultado para el programa.
Finalmente, el programa Python ejecutará la función eval analizando el
expr
como argumento.
Inconvenientes de Eval
De forma similar a otras funciones integradas de Python, eval también tiene algunos inconvenientes que pueden crear un problema si no se tienen en cuenta.
Si observa el ejemplo anterior, una de las principales vulnerabilidades de la función, function_creator es que puede exponer cualquier valor oculto dentro del programa y también llamar a una función dañina, ya que eval de forma predeterminada ejecutará cualquier cosa que esté entre paréntesis.
Para entender esto mejor, eche un vistazo al siguiente ejemplo.
Entrada del usuario
Ingrese la función (en términos de x): función_secreta ()
Ingrese el valor de x: 0
Salida:
y = Secret key is 1234
Otra situación peligrosa que viene con el uso de la función eval es importar el módulo os. Cuando ha importado el módulo del sistema operativo, le permite a Python leer y escribir cualquier archivo presente en su sistema nativo sin la autenticación del usuario. En tal caso, si escribe mal unalínea de código, todos sus archivos nativos pueden ser eliminados.
La solución a todos estos inconvenientes radica en restringir las capacidades de la función eval.
Hacer que Eval sea seguro en Python
Eval viene por defecto con la opción de analizar cualquier función a la que tenga acceso o cualquiera que ya haya sido definida. Tener esto en cuenta mientras escribe su código, limitará las capacidades de eval en gran medida, asegurándose de que nada salga mal.
Para comprender mejor este concepto, eche un vistazo al siguiente ejemplo.
from math import * def función_secreta (): return 'La clave secreta es 1234' def creador_función (): # expresión a evaluar expr = raw_input ('Ingrese la función (en términos de x):') # variable usada en la expresión x = int (raw_input ('Ingrese el valor de x:')) # pasando la variable x en un diccionario seguro safe_dict ['x'] = x # evaluando expresión y = eval (expr, {'__builtins __': None}, safe_dict) # imprimiendo resultado evaluado print ('y = {}'. format (y)) if __name__ == '__main__': # lista de métodos seguros safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' grados ',' e ',' exp ',' fabs ',' piso ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radianes', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # creando un diccionario de métodos seguros safe_dict = dict ([(k, locals (). get (k, None)) para k en safe_list]) function_creator ()
Entrada del usuario
Ingrese la función (en términos de x): función_secreta ()
Ingrese el valor de x: 0
Salida:
NameError: el nombre 'función_secreta' no está definido
Como puede ver al limitar el acceso de eval, se han anulado las posibilidades de una salida incorrecta que puede resultar dañina.
Usos de Eval
Como se explicó en las secciones anteriores, debido a varias razones de seguridad, eval no se usa con tanta frecuencia. Pero aún así, hay casos de uso particulares en los que usar eval demuestra ser útil. Algunos de los más importantes son.
Si desea que el usuario ingrese sus propios scriptlets para modificar la salida del programa, entonces usar la función eval resultará útil.
Mientras escribe expresiones para resolver consultas matemáticas, puede utilizar eval, ya que es mucho más fácil que escribir un analizador de expresiones.
Ahora que ya sabes todo sobre eval, esperamos que lo uses en tu programación diaria, teniendo en cuenta las ventajas y los inconvenientes.
Con esto, llegamos al final de este artículo de Eval in Python. Para obtener un conocimiento profundo de Python junto con sus diversas aplicaciones, puede para capacitación en línea en vivo con soporte 24/7 y acceso de por vida.
Tienes una pregunta para nosotros? Menciónelos en la sección de comentarios de “Eval in Python” y nos comunicaremos con usted.