• 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())来查看该函数体内的所有变量名和变量值。

    返回值

    返回表达式计算结果。

    1. x=9
    2. w=eval('x+2')
    3. print(w)
    4. #gloas()用法
    5. a=1
    6. b=1
    7. print(eval("a+b"))
    8. def func():
    9. a=2
    10. b=2
    11. #不加gloas()会在局部查找a和b的范围
    12. print(eval("a+b")) #输出4
    13. #加了gloas()会在全局搜索a和b的范围
    14. print(eval("a+b",globals())) #输出2
    15. #局部查找
    16. print(eval("a+b",globals(),locals())) #2
    17. func()

    输出: 

    1. 11
    2. 2
    3. 4
    4. 2
    5. 4
    6. Process finished with exit code 0

     把字符串编程list、dict、tuple

    1. n='[[1,2],[3,4]]'
    2. print(eval(n))
    3. m='(1,2,3)'
    4. print(eval(m))
    5. c="{'a':1}"
    6. print(eval(c))
    1. [[1, 2], [3, 4]]
    2. (1, 2, 3)
    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。

    1. exec ("print ('hello world cup')")
    2. 输出:
    3. hello world cup

    1. expr = """
    2. z = 30
    3. sum = x + y + z
    4. print(sum)
    5. """
    6. def funcs():
    7. y = 20
    8. exec(expr)
    9. exec(expr,{"x":1,"y":2})
    10. exec(expr,{"x":1,"y":10},{"x":20,"y":30})
    11. funcs()
    1. 59
    2. 33
    3. 80

  • 相关阅读:
    暑假加餐|有钱人和你想的不一样(第8天)+多目标金鹰优化算法(Matlab代码实现)
    js手写题汇总(面试前必刷)
    k8s之选主机制
    JavaSE反射前置之Properties类
    某有色金属集团主数据管理面临的问题和解决方案
    QT中常用文本控件区别(LineEdit、TextEdit 、PlainTextEdit )
    Centos7离线安装Mysql8(rpm安装)
    实现将一张图片中的目标图片抠出来
    1+x证书-网络安全
    常用Python中文分词工具的使用方法
  • 原文地址:https://blog.csdn.net/chehec2010/article/details/126027279