在python中重新引用大量函数

guz6ccqo  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(349)

我有个档案 functional.py 它定义了许多有用的函数。对于每个函数,我想创建一个别名,当调用它时,它将提供对函数的引用。像这样: 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

我可以从 `functional.py` 使用 `inspect` 动态定义一组适合我的新函数。
但为什么呢?你可能会问。。。我使用的配置管理器hydra可以通过指定完全限定名来示例化对象。我想利用中的函数 `functional.py` 在config中,让hydra在创建使用函数的对象时传递对函数的引用(更多详细信息可以在hydra文档中找到)。
有很多函数,我不想把它们都写出来。。。人们在类似的问题中指出 `globals()` 为此目的是不好的做法。我的用例是相当受限的-文档方面有一个一一Map(但显然ide不能解析它)。
基本上,我想知道是否有更好的方法来做这件事!
uxhixvfz

uxhixvfz1#

您的问题是否与此功能请求有关,特别是与此评论有关?
仅供参考:在hydra1.1中,instantiate完全支持位置参数,因此我认为您应该能够调用 functools.partial 不需要重新定义它。

相关问题