在python中重新引用大量函数

在python中重新引用大量函数,python,decorator,hydra-python,Python,Decorator,Hydra Python,我有一个文件functional.py,它定义了许多有用的函数。对于每个函数,我想创建一个别名,当调用该别名时,它将提供对函数的引用。大概是这样的: foo/functional.py def fun1(a): return a def fun2(a): return a+1 ... from inspect import getmembers, isfunction from . import functional for (name, fun) in getme

我有一个文件
functional.py
,它定义了许多有用的函数。对于每个函数,我想创建一个别名,当调用该别名时,它将提供对函数的引用。大概是这样的:

foo/functional.py

def fun1(a):
    return a

def fun2(a):
    return a+1

...

from inspect import getmembers, isfunction  
from . import functional

for (name, fun) in getmembers(functional, isfunction):
    dun = lambda f=fun: f
    globals()[name] = dun
foo/\uuuuu init\uuuuuu.py

def fun1(a):
    return a

def fun2(a):
    return a+1

...

from inspect import getmembers, isfunction  
from . import functional

for (name, fun) in getmembers(functional, isfunction):
    dun = lambda f=fun: f
    globals()[name] = dun
我可以使用
inspect
functional.py
获取函数,并动态定义一组适合我用途的新函数

但是为什么呢?你可能会问。。。我使用的配置管理器可以通过指定完全限定名来实例化对象。我想在配置中使用
functional.py
中的函数,并让hydra在创建使用该函数的对象时传递对该函数的引用(更多详细信息可在中找到)

有很多函数,我不想把它们都写出来。。。人们在类似的文章中指出,为此修改
globals()
是一种不好的做法。我的用例是相当受限的——文档方面有一个一一映射(但显然IDE无法解决它)


基本上,我想知道是否有更好的方法来做这件事

您的问题是否与功能请求相关,尤其是与评论相关


仅供参考:在Hydra 1.1中,因此我认为您应该能够直接调用
functools.partial
,而无需重新定义它。

您的问题是否与功能请求相关,尤其是与评论相关


仅供参考:在Hydra 1.1中,因此我认为您应该能够直接调用
functools.partial
,而无需重新定义它。

是的,非常感谢您为此添加了一个利用位置参数支持的简单示例:是的,非常感谢您为此添加了一个利用位置参数支持的简单示例: