我知道在使用Groovy闭包时,我可以更改闭包,delegate因此可以在外部定义闭包内的函数调用.
我可以在Python中做类似的事情吗?
具体来说,如果您采用以下代码:
def configure():
build()
def wrap(function):
def build():
print 'build'
function()
wrap(configure)
Run Code Online (Sandbox Code Playgroud)
我想要打印'build'(只进行更改wrap()).
一些说明:
我不想传递函数,configure()因为可能有很多函数可以被调用configure().
我也不想全局定义它们,因为可能会有大量可以调用的函数,configure()我不想污染全局命名空间.
是否是一个很好的方法是有争议的,但这是一个不修改全局命名空间的解决方案.
def configure():
build()
def wrap(f):
import new
def build():
print 'build'
new.function(f.func_code, locals(), f.func_name, f.func_defaults, f.func_closure)()
wrap(configure)
Run Code Online (Sandbox Code Playgroud)
我在如何修改python中的本地命名空间中找到了它