zoukankan      html  css  js  c++  java
  • exec()内置方法

    exec()内置方法

    一、介绍

    exec()能够动态地执行复杂的Python代码,exec()仅支持string和code object参数。

    官方文档:https://docs.python.org/3/library/functions.html#exec

    二、示例

    a = 1
    b = 2
    
    exec('c = a + b')
    print(c)
    
    # result
    3
    

    exec("""
    def fact(n):
        print(n)""")
    
    fact(1)
    
    # result
    1
    

    三、应用场景

    在实际项目中,可能会将python代码写在txt文件中,而非py文件中。python代码写在txt中,不能直接使用,通过exec()来调用

    python_code.txt

    def fact(n):
        if n==1:
            return 1
        else:
            return n*15
    t = fact(6)
    print(t)
    

    python代码写在txt中,不能直接使用,通过exec()来调用。一定要先读取文件内容,然后执行,exec只支持strcode object对象

    with open('python_code.txt', 'r') as f:
        codes = f.read()
       
    exec(codes)
    
    # result
    90
    

    四、传参

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

    • globals 用于指定运行时的全局命名空间,类型是字典,缺省时使用的是当前模块的内置命名空间。

    • locals 指定运行时的局部命名空间,类型是字典,缺省时使用 globals 的值。

    • 两者都缺省时,则遵循 exec 函数执行时的作用域。

    • 值得注意的是,这两者不代表真正的命名空间,只在运算时起作用,运算后则销毁

    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()
    
    # result
    60
    33
    34
    

    # 优先使用局部变量,然后在使用全局变量,存在覆盖赋值
    exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
    # 等价于
    
    # 全局变量
    x = 10
    y = 20
    
    # 参数局部变量,参数的值在python字符之前
    x = 1
    y = 2
    y = 3
    z = 4
    
    # 局部变量
    z = 30
    
    sum = x + y + z
    
    博客内容仅供参考,部分参考他人优秀博文,仅供学习使用
  • 相关阅读:
    HDU4126
    训练赛Day6-The 36th ACMICPC Asia Regional Beijing Site
    弦图
    HDU4821 字符串哈希+尺取
    HDU1854
    HDU1166
    输入输出挂
    LightOj 1027 数学期望
    HDU
    HDU
  • 原文地址:https://www.cnblogs.com/linagcheng/p/14980787.html
Copyright © 2011-2022 走看看