Python--eval和exec的区别

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

1.expression只能是单个表达式,不能是复杂的代码,如赋值、循环等

2.当指定了命名空间后,变量会在对应的命名空间中查找,其值不会覆盖实际其他命名空间中的值

3.返回的是expression的执行结果,在某些情况(print()或列表的append()操作)下,返回值可能是None

exec(object[, globals[, locals]])

1.object是代码块,可执行复杂的代码逻辑,如循环控制代码块, 异常代码块, 类, 函数的定义等,但不会像表达式一样能返回

2.内外的命名空间相通

3.其返回值都是None

针对1:

ml='print("hello everybody")'
exec(ml)  # hello everybody
eval(ml)  # hello everybody
print(exec(ml))  # hello everybody
                 # None
print(eval(ml))  # hello everybody
                 # None


ml='a=1+2'
exec(ml)
# eval(ml)  # 报错:SyntaxError: invalid syntax
print(exec(ml))  # None

ml='3+2'
exec(ml)
eval(ml)
print(exec(ml))  # None
print(eval(ml))  # 5


ml="for i in range(0,5):print('iter time: %d' %i)"
exec(ml)  #iter time: 0
          # iter time: 1
          # iter time: 2
          # iter time: 3
          # iter time: 4
# eval(ml)  # 报错:SyntaxError: invalid syntax

针对2:

x=10
def 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},{"x":3,"z":4})
    print('x: ' + str(x) + ' y: ' + str(y))
    print("c : ",c)

func()  # a :  30
        # x: 10 y: 20
        # b :  3
        # x: 10 y: 20
        # c :  5

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

func()  # a :  None
        # x: 10 y: 20
        # b :  None
        # x: 10 y: 20
        # c :  None

x=1
y=5
# y=eval("x=1+1")  # 报错:SyntaxError: invalid syntax
y=eval("1+1")
print(x)  # 1
print(y)  # 2


x=1
y=8
y=exec("x=1+1")
print(x)  # 2
print(y)  # None

a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
print(eval(a))  # [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]

a = "{'name': 'Python猫', 'age': 18}"
print(eval(a))  # {'name': 'Python猫', 'age': 18}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值