eval()函数

2019年11月18日 / 4次阅读 / Last Modified 2019年11月18日
内置函数

python内置函数eval(),用来将一个字符串当作python表达式执行,并返回执行结果。比如:

>>> a = '[1,2,3,4,5,6]'
>>> a
'[1,2,3,4,5,6]'
>>> alist = eval(a)
>>> alist
[1, 2, 3, 4, 5, 6]

这段代码将一个字符串a,通过eval函数执行,就变成了一个list对象。

eval()函数很灵活,我们写的python代码,用引号括起来,都是字符串,理论上都可以通过eval()函数来执行。只是要理解什么时python表达式,赋值语句的右边都是表达式,或者说表达式中不能有等号(=),表达式不用用来创建变量,但是在eval中调用函数时,入参赋值时可以的。

>>> eval('a=1')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    a=1
     ^
SyntaxError: invalid syntax
>>>
>>> def cc(a):
...     print(a)
...
>>> cc(a=1)
1
>>> eval('cc(a=3)')
3

eval()函数还有两个参数,globals和locals,分别用来执行执行字符串中的变量的位置(是不是想到了python内置的globals()函数和locals()函数)。按照官方的解释,如果不提供globals和locals参数,默认eval执行代码的环境与其所在的位置的其它代码一样,即首先找locals,然后再找globals。

>>> a
'[1,2,3,4,5,6]'
>>> def tee():
...     a = 567
...     eval('print(a)')
...
>>> tee()
567

如果提供了globals参数,运行效果如下:

>>> def tee():
...     a = 567
...     eval('print(a)',globals())
...
>>> tee()
[1,2,3,4,5,6]

没有必要单独提供locals参数,这是默认的!

eval函数不能直接获取nonlocal变量的访问,只能通过其它代码来讲nonlocal变量引入当前local环境!

eval函数的使用要小心,因为它会把任意字符串当成python表达式来执行!如果字符串来自用户的输入,用户可能会输入恶意代码,比如删除文件等。

-- EOF --

本文链接:https://www.pynote.net/archives/1515

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top