Función eval() de Python
Funciones integradas de Python3
eval()Es una función integrada de Python que se utiliza para ejecutar expresiones de Python contenidas en cadenas.
eval()Recibe una cadena, la ejecuta como código Python y devuelve el resultado de la ejecución. Es una funcionalidad potente, pero un uso inadecuado puede conllevar riesgos de seguridad.
Significado de la palabra: evalSíevaluateAbreviatura de (evaluación).
Sintaxis básica y parámetros
Formato de sintaxis
eval(expression, globals, locals)
Descripción de parámetros
- Parámetro expression:
- Tipo: cadena
- Descripción: la expresión de Python que se va a ejecutar.
- Parámetro globals(opcional):
- Tipo: diccionario
- Descripción: el espacio de nombres global.
- Parámetro locals(opcional):
- Tipo: diccionario
- Descripción: el espacio de nombres local.
Descripción de la función
- Valor de retorno: devuelve el resultado de la ejecución de la expresión.
- Advertencia de seguridad: no lo use con entradas no confiables
eval(), lo que puede provocar ataques de inyección de código.
Ejemplos
Ejemplo 1: Uso básico
Ejemplo
# Calcula una expresión matemática
result = eval("1 + 2 + 3")
print(result) # Salida: 6
# Usa variables
x = 10
result = eval("x * 2")
print(result) # Salida: 20
# Expresión compleja
result = eval("2 ** 3 + 4 * 5")
print(result) # Salida: 28
# Llamada a función
result = eval("len('hello')")
print(result) # Salida: 5
result = eval("1 + 2 + 3")
print(result) # Salida: 6
# Usa variables
x = 10
result = eval("x * 2")
print(result) # Salida: 20
# Expresión compleja
result = eval("2 ** 3 + 4 * 5")
print(result) # Salida: 28
# Llamada a función
result = eval("len('hello')")
print(result) # Salida: 5
Resultado esperado:
6 20 28 5
Análisis del código:
eval()Puede ejecutar expresiones aritméticas.- Puede hacer referencia a variables ya definidas.
- Puede llamar a funciones integradas.
Ejemplo 2: Entorno restringido
Ejemplo
# Limita las funciones y variables disponibles
x = 10
y = 20
# Crea un diccionario global restringido
safe_dict = {"x": x, "y": y, "abs": abs}
result = eval("x + y", safe_dict)
print(result) # Salida: 30
# No permite acceder a funciones peligrosas
try:
eval("__import__('os').system('ls')", {})
except NameError as e:
print(f"Restricción de seguridad: {e}")
x = 10
y = 20
# Crea un diccionario global restringido
safe_dict = {"x": x, "y": y, "abs": abs}
result = eval("x + y", safe_dict)
print(result) # Salida: 30
# No permite acceder a funciones peligrosas
try:
eval("__import__('os').system('ls')", {})
except NameError as e:
print(f"Restricción de seguridad: {e}")
Resultado esperado:
30 安全限制: name '__import__' is not defined
Este ejemplo muestra cómo, al restringir el diccionario globals, se puede mejorareval()la seguridad.
Funciones integradas de Python3
Otras extensiones