exec()和eval()

exec()和eval()的区别

eval() 和 exec() 函数的功能是相似的,都可以执行一个字符串形式的 Python 代码(代码以字符串的形式提供),相当于一个 Python 的解释器。

们的区别在于,eval() 执行完会返回结果,而 exec() 执行完不返回结果。

 举例:

语法

以下是 eval() 方法的语法:

eval(expression, globals=None, locals=None)

参数

  • expression -- 表达式。
  • globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
  • locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

globals和locals参数是可选的,如果提供了globals参数,那么它必须是dictionary类型;如果提供了locals参数,那么它可以是任意的map对象。

python的全局名字空间存储在一个叫globals()的dict对象中;局部名字空间存储在一个叫locals()的dict对象中。我们可以用print (locals())来查看该函数体内的所有变量名和变量值。

返回值

返回表达式计算结果。

x=9
w=eval('x+2')
print(w)

#gloas()用法

a=1
b=1
print(eval("a+b"))
def func():
    a=2
    b=2
    #不加gloas()会在局部查找a和b的范围
    print(eval("a+b")) #输出4
    #加了gloas()会在全局搜索a和b的范围
    print(eval("a+b",globals())) #输出2
    #局部查找
    print(eval("a+b",globals(),locals())) #2

func()

输出: 

11
2
4
2
4

Process finished with exit code 0

 把字符串编程list、dict、tuple

n='[[1,2],[3,4]]'
print(eval(n))
m='(1,2,3)'
print(eval(m))
c="{'a':1}"
print(eval(c))
[[1, 2], [3, 4]]
(1, 2, 3)
{'a': 1}

exec()语法:

相比于 eval,exec可以执行更复杂的 Python 代码。eval执行单挑python语句,exec执行多条,或者更加复杂代码。

需要说明的是在 Python2 中exec不是函数,而是一个内置语句(statement),但是Python 2中有一个 execfile() 函数。可以理解为 Python 3 把 exec 这个 statement 和 execfile() 函数的功能够整合到一个新的 exec() 函数中去了。

参数

  • obj -- 要执行的表达式。

返回值

exec 返回值永远为 None。

exec ("print ('hello world cup')")

输出:
hello world cup



expr = """
z = 30
sum = x + y + z
print(sum)
"""

def funcs():
    y = 20
    exec(expr)
    exec(expr,{"x":1,"y":2})
    exec(expr,{"x":1,"y":10},{"x":20,"y":30})


funcs()
59
33
80

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值