You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Python编译生成的code object对象传递参数并获取返回值

实现方案

Python 的 exec 内置方法支持传入自定义命名空间字典,用来隔离代码执行环境,你可以通过该字典完成参数传入和结果获取,同时不会污染当前运行环境的变量,适配分布式场景的序列化要求。

方案1:直接通过命名空间传参取结果(最简实现)

不需要修改原有计算逻辑的写法,仅通过命名空间传递参数,示例代码如下:

codeInString = '''
sum = a + b
print("sum =", sum)
'''
# 编译代码对象
codeObject = compile(codeInString, 'sumstring', 'exec')

# 构造命名空间字典,传入需要的a、b参数
run_context = {"a": 10, "b": 20}
# 执行编译好的代码对象,传入自定义命名空间
exec(codeObject, run_context)
# 从命名空间中获取计算结果赋值给c
c = run_context["sum"]

方案2:包装为函数调用(支持return写法)

如果你希望保留return的写法,可以将计算逻辑封装为函数,编译后取出函数对象直接调用,示例代码如下:

# 代码中定义函数,支持return返回结果
codeInString = '''
def calc_sum(a, b):
    sum = a + b
    print("sum =", sum)
    return sum
'''
codeObject = compile(codeInString, 'sumstring', 'exec')

run_context = {}
exec(codeObject, run_context)
# 取出命名空间中编译好的函数,直接传参调用
calc_sum = run_context["calc_sum"]
c = calc_sum(10, 20)

注意事项

  • 不要在编译的顶层代码中直接写return语句,顶层代码不属于任何函数作用域,执行会直接抛出语法错误
  • 分布式环境运行时,不要往命名空间中传入不可序列化的对象(比如Socket连接、临时文件句柄等),避免跨节点传输失败
  • 如果需要执行不可信的第三方代码,建议在命名空间中屏蔽不必要的内置方法,降低恶意代码执行风险

内容的提问来源于stack exchange,提问作者NIKHIL SUTHAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:27:02