zoukankan      html  css  js  c++  java
  • python3的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__包含了所有的内建函数和值

  • 相关阅读:
    多线程-上
    IO流之序列化
    IO流之标准输入输出流
    IO流之BufferedReader/BufferedWriter
    IO流之转换流
    IO流之字符输入输出流
    IO流之字节输入输出流
    JS Flex布局
    MSSQL case when
    钉钉审批流API
  • 原文地址:https://www.cnblogs.com/ExMan/p/10415785.html
Copyright © 2011-2022 走看看