【问题标题】:How to pass parameters in compiled code object?如何在编译的代码对象中传递参数?
【发布时间】:2021-11-08 00:36:19
【问题描述】:

我想在 python 代码对象中传递一些参数。我已经尝试了下面的代码,它运行良好,但我想知道如何从外部传递ab 的值并将返回变量分配给另一个变量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))

请注意:我在分布式环境中运行此代码。

【问题讨论】:

  • 你的意思是像exec(codeObejct, dict(a=5, b=6))?不知道你所说的全局是什么意思。
  • 是的,我想要这样的东西.. exec(codeObejct, dict(a=5, b=6)).. 但这不起作用.. 你能告诉我 CodeString 将如何对应this.@don'ttalkjustcode

标签: python parallel-processing compilation runtime


【解决方案1】:

您似乎认为自己在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()的返回值是None

【讨论】:

  • 感谢您的帮助.. 是的,我已经尝试过了,它工作正常。但我也被困在与同一问题相关的另一个用例中。我为此发布了另一个问题..你能帮忙吗..stackoverflow.com/questions/69151112/…
  • Nikk:会看看。
猜你喜欢
  • 2013-08-04
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
相关资源
最近更新 更多