凉城旧巷
Python从入门到自闭,Java从自闭到放弃,数据库从删库到跑路,Linux从rm -rf到完犊子!!!
posts - 315,comments - 20,views - 38万

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
posted on   凉城旧巷  阅读(279)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示