import re
import inspect
def find(pat, module, level = 0):
def get_funs(pat, module):
funs = [x for x in dir(module) if inspect.isroutine(getattr(module, x))]
matched = [x for x in funs if re.findall(pat, x)]
return {getattr(module, x): module for x in matched}
def get_modules(module):
ms = {getattr(module, x): x for x in dir(module)
if inspect.ismodule(getattr(module, x)) and not x.startswith('_')
and getattr(module, x).__name__.startswith(module.__name__)}
return ms
fun_lst = {}
ms = [module]
dks = get_modules(module)
while level > 0:
for m in list(dks):
dks.update(get_modules(m))
level -= 1
for m in dks:
fun_lst.update(get_funs(pat, m))
return [(x.__name__, y.__name__) for (x , y) in fun_lst.items()]
1条答案
按热度按时间c9qzyr3d1#
如果我很好地理解了这个问题,这里有一个
python
函数find
,它可以使用pattern
正则表达式搜索特定模块中的任何函数。例如,你可以像这样在
pytorch
包中搜索one_hot
一个热门编码函数;数字
1
是您要搜索的级别,意味着在模块级别(0)
或子模块(1)
或子子模块(2)
中。也可以使用模式来获取函数;