python的eval_eval()函数

本文详细介绍了Python内置函数eval()的工作原理和使用方法,包括如何将字符串转化为可执行的Python表达式,以及eval()函数的globals和locals参数。同时,也强调了在使用eval()时需要注意的安全问题,因为该函数会执行任意字符串,可能导致执行恶意代码的风险。在实际应用中,应谨慎处理用户输入,避免潜在的安全隐患。
摘要由CSDN通过智能技术生成

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 "", line 1, in

File "", 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 --

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值