Python 如何在保留函数名的同时包装来自不同命名空间的函数?

Python 如何在保留函数名的同时包装来自不同命名空间的函数?,python,wrapper,Python,Wrapper,我想用timeit\u wrapper像这样包装函数: import timeit_wrapper def func1(): pass def func2(): func1 = timeit_wrapper(func1) func1() 由于func1是在本地范围内分配给的,因此上述操作将导致分配前引用错误 我怎样才能以pythonic的方式实现这一点(不使用global关键字)?这个怎么样: import timeit_wrapper def func1():

我想用
timeit\u wrapper
像这样包装函数:

import timeit_wrapper

def func1():
    pass

def func2():
    func1 = timeit_wrapper(func1)
    func1()
由于func1是在本地范围内分配给的,因此上述操作将导致分配前引用错误

我怎样才能以pythonic的方式实现这一点(不使用global关键字)?

这个怎么样:

import timeit_wrapper

def func1():
    pass

def func2(func1=func1):
    func1 = timeit_wrapper(func1)
    func1()
这个怎么样:

import timeit_wrapper

def func1():
    pass

def func2(func1=func1):
    func1 = timeit_wrapper(func1)
    func1()

如何
wrapped\u func1=timeit\u wrapper(func1)
wrapped\u func1()
?我希望它仍然被称为func1(现实中的get\u batch),以使代码更容易理解和更改-可能吗?哇。2秒回答我的问题;-)你跑得很快。那么您不喜欢
global
关键字的哪些方面?这可以解决您的问题,不是吗?@LearnOPhile no。理论上,您可以使用
timeit\u包装器(globals()['func1'])
,但这是您应该感到羞耻的事情。global关键字将更改全局变量func1(用timeit\u包装器包装)-这是我不想要的。如何
wrapped\u func1=timeit\u包装器(func1)
包装的func1()
?我希望它仍然被称为func1(现实中的get\u batch),以使代码更容易理解和更改-可能吗?哇。2秒回答我的问题;-)你跑得很快。那么您不喜欢
global
关键字的哪些方面?这将解决您的问题,不是吗?@LearnOPhile no.理论上,您可以使用
timeit\u包装器(globals()['func1'])
但这是您应该感到惭愧的。全局关键字将更改全局变量func1(用timeit\u包装器包装),而我不希望。