我有个档案 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不能解析它)。
基本上,我想知道是否有更好的方法来做这件事!
1条答案
按热度按时间uxhixvfz1#
您的问题是否与此功能请求有关,特别是与此评论有关?
仅供参考:在hydra1.1中,instantiate完全支持位置参数,因此我认为您应该能够调用
functools.partial
不需要重新定义它。