eval()函数在python中的应用详解,执行字符串表达式

python中的eval()函数

eval()函数是python的一个内置函数,与exec()函数有些像,可用于执行字符串的python代码,但eval()更多的是用于执行字符串表达式,并返回表达式的值,或对类型进行转换。


eval()函数语法结构

def eval(source: Union[Text, bytes, CodeType], globals: Optional[Dict[str, Any]]=..., locals: Optional[Mapping[str, Any]]=...)

eval()函数的三个参数

  • source,第一个参数,必须是字符串或字节串bytes或code object;否则会抛出TypeError;
  • globals,第二个参数,可选,为全局变量,必须是dict字典类型的数据,优先级弱于第三个参数locals;
  • locals,第三个参数,也是可选的,为局部变量,可以是任何映射类型的数据,优先级强于第二个参数globals;

eval()函数实例代码

>>> eval("1+2")
3
>>> eval("a+b",{'a':2,'b':6})
8
>>> eval("a+b+c",{'a':2,'b':6},{'b':3,'c':6})
11
>>> eval(b"2+3") #字节串
5
>>> eval({'a':2})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: eval() arg 1 must be a string, bytes or code object

代码解析

如上代码,当第二个参数globals和第三个参数locals当中都有b时,因为locals局部变量的优先级比较强,所以会使用locals里头的变量b的值,所以所得数值为11。当第一个参数不是字符串或字节串或code object时,python为抛出TypeError。


eval()函数用于数据转换

这个主要还是将各种数据类型的字符串形式转换为原来的类型,实例代码如下:

>>> eval("[1,2,3]")
[1, 2, 3]
>>> type(eval("(1,2)"))
<class 'tuple'>
>>> eval("print('x1y1z1.com')")
x1y1z1.com
>>> eval("'笨鸟工具'") #1
'笨鸟工具'
>>> eval("abc") #2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'abc' is not defined

代码解析

如上代码,对比#1和#2处的代码,#1中的多了个表示字符串的单引号,成为字符串,而#2中没有,abc为变量,没有赋值的话,python为抛出NameError。



全栈后端 / python教程 :


























Copyright © 2022-2024 笨鸟工具 x1y1z1.com All Rights Reserved.