zoukankan      html  css  js  c++  java
  • python eval和exec的区别

    eval:
    可以把字符串里的字符转换为可执行代码,但只支持一行字符。可以返回执行后得到的值。如下:

    f = "3+6+9+8"
    s = eval(f)
    print(s)
    

    输出:

    "C:Program Filespython3python3.exe" D:/codes_py3/luhy_tool/string_utils/mymethod.py
    26
    

    exec:
    可以把字符串里的字符转换为可执行代码,可以支持多行字符。但是拿不到返回结果。如下:

    code = '''
    def func():
    print('test')
    return 555
    func()
    '''
    
    f = exec(code)
    print('---'*5)
    print(f)
    

    输出:

    "C:Program Filespython3python3.exe" D:/codes_py3/luhy_tool/string_utils/mymethod.py
    test
    ---------------
    None
    

    通过exec可以执行动态Python代码,类似Javascript的eval功能;

    而Python中的eval函数可以计算Python表达式,并返回结果;

    (exec不返回结果,print(eval("…"))打印None);

    例如:

    >>> exec("print("hello, world")")
    hello, world
    >>> a = 1
    >>> exec("a = 2")
    >>> a
    2
    

    这里有个scope(命名空间,作用域)的概念,为了不破坏现在的scope,可以新建一个scope(一个字典)执行exec(Javascript没有此功能):

    >>> scope = {}
    >>> exec("a = 4", scope)
    >>> a
    2
    >>> scope['a']
    4
    >>> scope.keys()
    dict_keys(['a', '__builtins__'])
    

    __builtins__包含了所有的内建函数和值

  • 相关阅读:
    python3 bytes数据类型探讨
    字典
    列表及元组
    在py文件中设置文件头
    函数的作用域、global与nonlocal
    python中 的意义及用法
    int、bool和str
    while循环、格式化输出、运算符和编码初识
    python初认识、基础数据类型以及 if 流程控制
    列表遍历和生成器遍历效率对比
  • 原文地址:https://www.cnblogs.com/miaoweiye/p/12597957.html
Copyright © 2011-2022 走看看