当我获得一个代码对象(通过.func_code
)时,有没有任何方法可以调用这段代码?简单地调用它是行不通的:
def f(): pass
f.func_code()
结果
^{pr2}$当您想对嵌套函数进行单元测试时,这会很方便:
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>
当然,这段代码还需要上下文等等,但这不是我的问题。在
你可以}它们。在
eval()
或{如果它们有自由变量(例如,对于其外部函数在嵌套函数之前定义了局部变量的嵌套函数代码),这是不可能直接实现的(在本例中,}引发
eval
或{TypeError
)。在另外,不可能直接向代码传递参数。在
但是可以动态地为给定的代码创建包装函数。通常可以调用此函数(使用
f(…)
),以通常的方式传递参数。这是使用types.FunctionType
完成的。要实现对自由变量的引用,必须使用技巧才能获得Python期望的正确数据类型。有关示例,请参见下面的代码:相关问题 更多 >
编程相关推荐