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
博客内容仅供参考,部分参考他人优秀博文,仅供学习使用
原文地址:https://www.cnblogs.com/linagcheng/p/14980787.html