Python eval()
eval()的语法为:
eval(expression, globals=None, locals=None)
eval()参数解读:
eval()函数有三个参数:
expression #解析Python表达式的字符串
globals(可选参数)#是一个字典
locals(可选参数)#映射对象。,因为字典是Python中标准的映射类型。
稍后将在本节中说说全局变量和局部变量的使用。
从eval()返回值
示例1--从eval()方法返回从表达式求值的结果,我们看一个示例:
x = 1
print(eval('x + 1'))
输出:
2
在上面示例当中,eval()函数对表达式x +1求值,并打印值。
示例2:eval()的实际示例操作:
def calculatePerimeter(l):
return 4*l
def calculateArea(l):
return l*l
expression = input("Type a function: ")
for l in range(1, 5):
if (expression == 'calculatePerimeter(l)'):
print("If length is ", l, ", Perimeter = ", eval(expression))
elif (expression == 'calculateArea(l)'):
print("If length is ", l, ", Area = ", eval(expression))
else:
print('Wrong Function')
break
输出:
Type a function: calculateArea(l)
If length is 1 , Area = 1
If length is 2 , Area = 4
If length is 3 , Area = 9
If length is 4 , Area = 16
使用eval()时的注意事项:
考虑一下我们使用Unix系统(比如macOS,Linux等)并且已经导入os模块的情况。 os模块提供了一种可移植的方式来使用操作系统功能,例如读取或写入文件。
如果允许我们使用eval(input())输入值,则可以发出命令来更改文件,甚至使用以下命令删除所有文件:os.system('rm -rf *')
如果在我们的代码中使用了eval(input())方法,那么就最好检查一下,我们可以使用哪些变量和方法。 我们可以使用dir()方法查看哪些变量和方法可用。操作如下:
from math import *
print(eval('dir()'))
输出:
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'os', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']