• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python中eval() 与exec() 函数的用法解析

python 搞代码 4年前 (2022-01-09) 30次浏览 已收录 0个评论
文章目录[隐藏]

本篇文章给大家带来的内容是关于Python中eval() 与exec() 函数的用法解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

Python 提供了很多内置的工具函数(Built-in Functions),在最新的 Python 3 官方文档中,它列出了 69 个。

大部分函数是我们经常使用的,例如 print()、open() 与 dir(),而有一些函数虽然不常用,但它们在某些场景下,却能发挥出不一般的作用。内置函数们能够被“提拔”出来,这就意味着它们皆有独到之处,有用武之地。

因此,掌握内置函数的用法,就成了我们应该点亮的技能。

1、eval 的基本用法

语法:eval(expression, globals=None, locals=None)

它有三个参数,其中 expression 是一个字符串类型的表达式或代码对象,用于做运算;globals 与 locals 是可选参数,默认值是 None。

具体而言,expression 只能是单个表达式,不支持复杂的代码逻辑,例如赋值操作、循环语句等等。(PS:单个表达式并不意味着“简单无害”,参见下文第 4 节)

globals 用于指定运行时的全局命名空间,类型是字典,缺省时使用的是当前模块的内置命名空间。locals 指定运行时的局部命名空间,类型是字典,缺省时使用 globals 的值。两者都缺省时,则遵循 eval 函数执行时的作用域。值得注意的是,这两者不代表真正的命名空间,只在运算时起作用,运算后则销毁。

x = 10def func():    y = 20    a = eval('x + y')    print('a: ', a)    b = eval('x + y', {'x': 1, 'y': 2})    print('x: ' + str(x) + ' y: ' + str(y))    print('b: ', b)    c = eval('x + y', {'x': 1, 'y': 2}, {'y': 3, 'z': 4})    print('x: ' + str(x) + ' y: ' + str(y))    print('c: ', c)func()

输出结果:

a:  30x: 10 y: 20b:  3x: 10 y: 20c:  4

由此可见,当指定了命名空间的时候,变量会在对应命名空间中查找。而且,它们的值不会覆盖实际命名空间中的值。

2、exec 的基本用法

语法:exec(object[, globals[, locals]])

在 Python2 中 exec 是个语句,而 Python3 将其改造成一个函数,就像 print 一样。exec() 与 eval() 高度相似,三个参数的意义和作用相近。

主要的区别是,exec() 的第一个参数不是表达式,而是代码块,这意味着两点:一是它不能做表达式求值并返回出去,二是它可以执行复杂的代码逻辑,相对而言功能更加强大,例如,当代码块中赋值了新的变量时,该变量可能 在函数外的命名空间中存活下来。

>>> x = 1>>> y = exec('x = 1 + 1')>>> print(x)>>> print(y)2None

可以看出,exec() 内外的命名空间是相通的,变量由此传递出去,而不像 eval() 函数,需要一个变量来接收函数的执行结果。

3、一些细节辨析

两个函数都很强大,它们将字符串内容当做有效的代码执行。这是一种字符串驱动的事件 ,意义重大。然而,在实际使用过程中,存在很多微小的细节,此处就列出我所知道的几点吧。

常见用途:将字符串转成相应的对象,例如 string 转成 list ,string 转成 dict,string 转 tuple 等等。

>>> a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]">>> print(eval(a))[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]>><div style="color:transparent">本文来源gaodai^.ma#com搞#代!码网</div>> a = "{'name': 'Python猫', 'age': 18}">>> print(eval(a)){'name': 'Python猫', 'age': 18}# 与 eval 略有不同>>> a = "my_dict = {'name': 'Python猫', 'age': 18}">>> exec(a)>>> print(my_dict){'name': 'Python猫', 'age': 18}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python中eval() 与exec() 函数的用法解析

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址