四时宝库

程序员的知识宝库

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

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']



发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接