如何在编译代码对象中传递参数?

How to pass parameters in compiled code object?

我想在 python 代码对象中传递几个参数。我已经尝试了下面的代码,它 运行 很好,但我想知道如何在外部传递 a & b 的值并将 return 变量分配给另一个变量c.

codeInString = 'a = 5\nb=6\nsum=a+b\nprint("sum =",sum)\v return sum'
codeObject = compile(codeInString, 'sumstring', 'exec')

exec(codeObject)

像这样:

codeInString = 'sum=a+b\nprint("sum =",sum) return sum'
codeObject = compile(codeInString, 'sumstring', 'exec')

c = exec(codeObject(a,b))

请注意:我是运行分布式环境下的这段代码。

您似乎认为自己在 codeInString 中定义函数,但实际上不是。通过删除 return 语句修复该问题,以下工作:

from textwrap import dedent

codeInString = dedent("""\
    sum = a + b
    print("sum =", sum)
""")
codeObject = compile(codeInString, 'sumstring', 'exec')

exec(codeObject, dict(a=5, b=6))  # -> sum = 11

另请注意 exec() 的 return 值为 None