Python中的R??搜索函数

lc8prwob  于 2023-09-29  发布在  Python
关注(0)|答案(1)|浏览(77)

有没有一种简单的方法可以在repl中搜索python函数,比如?R中的魔法命令我想输入一个函数名或子字符串,并返回一个可能匹配的列表。
我一直在试验一些pytorch教程,这些文档的版本中有一些方法已经被移到了包的其他部分。我希望能够搜索文本的功能,而不必在谷歌寻找,如果可能的话。

c9qzyr3d

c9qzyr3d1#

如果我很好地理解了这个问题,这里有一个python函数find,它可以使用pattern正则表达式搜索特定模块中的任何函数。

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()]

例如,你可以像这样在pytorch包中搜索one_hot一个热门编码函数;

find('one_hot', torch, 1)

# [('one_hot', 'torch.nn.functional'), ('one_hot', 'torch.onnx.symbolic_opset9')]

数字1是您要搜索的级别,意味着在模块级别(0)或子模块(1)或子子模块(2)中。
也可以使用模式来获取函数;

find('.*_hot', torch, 1)    # same result as above
# [('one_hot', 'torch.nn.functional'), ('one_hot', 'torch.onnx.symbolic_opset9')]

相关问题