1描述
eval()是Python的一个内置函数,用来执行一个字符串表达式,并返回表达式的值。即:将字符串作为有效表达式进行求值并返回计算结果
eval()函数还能实现将字符串str转化为列表List、元组tuple、字典ditc的功能,这与str()函数功能刚好互补(str()函数能够将list\tuple\ditc转化为字符串str)
2语法
eval(expression[, globals[, locals]])
3参数
- expression -- 表达式
- globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
- locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射(map)对象
3返回值
表达式的计算结果.
4使用
示例代码:
#1.eval无参实现字符串转化
s = '1+2+3*5-2'
print(eval(s)) #16
#2.字符串中有变量也可以
x = 1
print(eval('x+2')) #3
#3.字符串转字典
print(eval("{'name':'linux','age':18}"))
#输出结果:{'name':'linux','age':18}
#4.eval传递全局变量参数,注意字典里的:age中的age没有带引号,说明它是个变量,而不是字符串。
#这里两个参数都是全局的
print(eval("{'name':'linux','age':age}",{"age":1822}))
#输出结果:{'name': 'linux', 'age': 1822}
print(eval("{'name':'linux','age':age}",{"age":1822},{"age":1823}))
#输出结果:{'name': 'linux', 'age': 1823}
#eval传递本地变量,既有global和local时,变量值先从local中查找。
age=18
print(eval("{'name':'linux','age':age}",{"age":1822},locals()))
#输出结果:{'name': 'linux', 'age': 18}
print("-----------------")
print(eval("{'name':'linux','age':age}"))
eval()通常还与input()函数联合使用,来将用户输入的字符串转化为标准形式。
#使用eval直接完成了表达式的还原与计算:
s = input("输入一个表达式")
输入一个表达式:1+3+4+4*3
>>> print(eval(s))
20
#使用eval可以直接将用户输入的字符串转化为字典
s = input("输入一个字典形式的字符串")
输入一个字典形式的字符串:{'name':'linux','age':18}
>>> print(eval(s))
#输出结果:{'name':'linux','age':18}
4使用风险
eval虽然方便,但是要注意安全性,。eval(input())可以将用户输入的字符串转成表达式并执行,用户就可以利用此函数执行系统命令,删除文件等操作。比如用户恶意输入就会获得当前目录文件
>>>eval("__import__('os').system('dir')")
驱动器 C 中的卷是 OS
卷的序列号是 B234-8A38
...