重新引用 python 中的大量函数

Re-referencing a large number of functions in python

我有一个文件functional.py,它定义了很多有用的函数。对于每个函数,我想创建一个 alias ,在调用时将提供对函数的引用。像这样:

foo/functional.py

def fun1(a):
    return a

def fun2(a):
    return a+1

...

foo/__init__.py


from inspect import getmembers, isfunction  
from . import functional

for (name, fun) in getmembers(functional, isfunction):
    dun = lambda f=fun: f
    globals()[name] = dun
>> bar.fun1()(1)
>> 1
>> bar.fun2()(1)
>> 2

我可以使用 inspectfunctional.py 中获取函数,并动态定义一组适合我的目的的新函数。

但是为什么呢?你可能会问...我正在使用配置管理器 Hydra where one can instantiate objects by specifying the fully qualified name. I want to make use of the functions in functional.py in the config and have hydra pass a reference to the function when creating an object that uses the function (more details can be found in the Hydra documentation).

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

基本上,我想知道是否有更好的方法来做到这一点!

您的问题与 this feature request and in particular to this 评论有关吗?

仅供参考:在 Hydra 1.1 中,instantiate fully supports positional arguments 所以我认为您应该能够直接调用 functools.partial 而无需重新定义它。