当我抓住一个代码对象时(通过像.func_code
这样的内部),是否有任何方式调用这段代码?简单地调用它不起作用:
def f(): pass
f.func_code()
结果
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'code' object is not callable
当您想对嵌套函数进行单元测试时,这可以派上用场:
def f():
def g():
return 3
f.x = g
return g() + 1
f.func_code.co_consts[1]
结果
<code object g at 0x7f123991b930, file "<stdin>", line 2>
当然,这段代码仍然需要上下文等等,但这不是我的问题。
答案 0 :(得分:0)
他们可以eval()
或exec
。
如果他们有自由变量(例如,对于外部函数在嵌套函数之前定义了局部变量的嵌套函数的代码),这不可能直接实现(eval
或{{ 1}}在这种情况下提出exec
。
此外,不能直接将参数传递给代码。
但是可以在运行中为给定代码创建包装函数。通常可以调用此函数(使用TypeError
),以通常的方式传递参数。这是使用f(…)
完成的。要实现对自由变量的引用,必须使用技巧来获得Python期望的正确数据类型。请参阅以下代码以获取示例:
types.FunctionType