• Python eval()、exac()



    一、eval()

    1. 描述

    eval()执行一个字符串,返回表达式的值。


    2. 语法

    eval(expression[, globals[, locals]])
    
    • expression:表达式
    • globals:变量作用域,全局命名空间(存放全局变量),如果被提供,必须是字典。
    • locals:变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

    返回值:

    表达式计算结果。


    3. 实例

    result = eval('pow(2, 2)')
    print(result)
    
    result = eval('3*x', {'x': 7})
    print(result)
    

    输出:

    4
    21
    


    二、exec()

    1. 描述

    exec执行存储在字符串或文件中的 Python 语句,相比eval,exec 可执行更复杂的代码。


    2. 语法

    exec(object[, globals[, locals]])
    
    • object:必选参数。如果 object 是字符串,会被解析为 Python 语句再执行,如果是代码,直接执行。
    • globals:可选参数。全局命名空间(存放全局变量),如果被提供,必须是字典。
    • locals:可选参数。局部命名空间。如果被提供,可以是任何映射对象。当和 globals 有重复,以 locals 为准。

    返回值:

    永远是None。


    3. 实例

    x = 10
    expr = """
    z = 30
    sum = x + y + z
    print(sum)
    """
    
    def func():
        y = 20
        exec(expr)
        exec(expr, {'x': 1, 'y': 2})
        exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
    func()
    
    
    a = 10
    b = 20
    c = 30
    g = {'a': 6, 'b': 8}  # 定义一个字典
    t = {'b': 100, 'c': 10}  # 定义一个字典
    print(eval('a+b+c', g, t))  # 定义一个字典 116
    

    输出:

    60
    33
    34
    
    116
    


    三、exal()与exac()的区别、易错点

    1. 区别

    eval()有返回值,exec()无返回值。


    2. 易错点

    eval()exac()的第一个参数是字符串,字符串的内容必须是可执行代码。

    s = 'hello'
    print(eval(s))
    print(exec(s))
    

    输出:

    NameError: name 'hello' is not defined
    

    出错原因:字符串的内容是 hello,而 hello 不是可执行代码。

    s = 'hello'
    print(eval('s'))
    print(exec('s'))
    

    输出:

    hello
    None
    

    字符串的内容是 'hello',是字符串,字符串是可执行代码。


    使用repr()转化,但使用str()转换会报错。

    s = "hello"
    print(eval(repr(s)))
    print(eval(str(s)))
    

    输出:

    hello
    
    NameError: name 'hello' is not defined
    

    出错原因:repr()返回的内容,多一个单引号。

    s = 'hello'
    print(repr(s))
    print(str(s))
    

    输出:

    'hello'
    hello
    


  • 相关阅读:
    总结:使用pll来进行“异步复位,同步释放”
    总结“异步复位,同步释放”
    用quartusII再带的modelsim进行后仿真(时序仿真)的操作步骤
    Notepad++新建文件默认保存格式修改问题
    英语翻译正确的思维
    浅谈web网站架构演变过程
    MVC-API(二)
    C#面向对象编程的基础
    C# 堆栈讲解
    AutoCAD 2013 之R14版本下载地址整理汇总
  • 原文地址:https://www.cnblogs.com/keye/p/15682081.html
Copyright © 2020-2023  润新知