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只支持str
或code 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
博客内容仅供参考,部分参考他人优秀博文,仅供学习使用
标签:
内置模块
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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