Python eval()函数详解

2021-04-30  本文已影响0人  香菜那么好吃为什么不吃香菜

1描述

eval()是Python的一个内置函数,用来执行一个字符串表达式,并返回表达式的值。即:将字符串作为有效表达式进行求值并返回计算结果
eval()函数还能实现将字符串str转化为列表List、元组tuple、字典ditc的功能,这与str()函数功能刚好互补(str()函数能够将list\tuple\ditc转化为字符串str)

2语法

eval(expression[, globals[, locals]])

3参数

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
 ...

上一篇 下一篇

猜你喜欢

热点阅读