龙空技术网

一日一技:Python 中的eval()函数应用

Python编程之美 1681

前言:

如今我们对“eval在python中的用法”都比较注重,我们都需要剖析一些“eval在python中的用法”的相关文章。那么小编在网上搜集了一些对于“eval在python中的用法””的相关内容,希望咱们能喜欢,各位老铁们一起来了解一下吧!

Python eval()

eval()的语法为:

eval(expression, globals=None, locals=None)

eval()参数解读:

eval()函数有三个参数:

expression         #解析Python表达式的字符串globals(可选参数)#是一个字典locals(可选参数)#映射对象。,因为字典是Python中标准的映射类型。

稍后将在本节中说说全局变量和局部变量的使用。

从eval()返回值

示例1--从eval()方法返回从表达式求值的结果,我们看一个示例:

x = 1print(eval('x + 1'))

输出:

2

在上面示例当中,eval()函数对表达式x +1求值,并打印值。

示例2:eval()的实际示例操作:

def   calculatePerimeter(l):    return 4*ldef   calculateArea(l):    return l*lexpression = 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 =  1If length is  2 , Area =  4If length is  3 , Area =  9If 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']

标签: #eval在python中的用法