2

我正在寻找所有具有参数的函数可调

其中一个函数是matplotlib.pyplot.figure ().add_axes。help(matplotlib.pyplot.figure ().add_axes) 描述了可以在kwargs字典中出现的参数。

我试过 pydoc.apropos

from pydoc import apropos

In [8]: apropos ('adjustable')
No handlers could be found for logger "OpenGL.Tk"

In [9]: 

这就是它返回的所有内容 apropos(key)。

找到我正在寻找的东西的一种蛮力方法是从 /usr/share/ grep python 的源代码。但我需要从当前的 python 环境中执行它(只有在评估器中加载的内容)。

4

3 回答 3

3

我刚刚注意到你正在使用 IPython,如果是这样,有一个名为的扩展,它实现了它自己的apropos版本,可能在这里有用。

该文档甚至matplotlib在其示例中使用。

于 2013-06-03T15:46:25.947 回答
1

这是一个快速编写的函数,它遍历指定路径中的所有当前包,ast用于查找匹配的参数,并(filename, funcname, line_no)为每个匹配项返回。

import ast
import pkgutil
import os.path

class FindParameter(ast.NodeVisitor):
    def __init__(self, parameter):
        self.parameter = parameter
        self.found = []

    def visit_FunctionDef(self, node):
        for arg in node.args.args:
            if getattr(arg, 'id', None) == self.parameter:
                self.found.append(node)

def apropos(parameter, path=None):
    paramFinder = FindParameter(parameter)
    for importer, modname, is_package in pkgutil.iter_modules(path=path):
        try:
            loader = importer.find_module(modname)
            loader.get_code()
            if loader.source:
                tree = ast.parse(loader.source, filename=loader.filename)
                paramFinder.visit(tree)
        except SyntaxError:
            pass # avoid any broken code in the current path
    return [ (loader.filename, found.name, found.lineno) for found in paramFinder.found ]

all_selfs = apropos('self')
于 2013-06-03T06:35:53.867 回答
1

apropos只搜索所有模块的单行摘要,而不是每个函数的每个文档字符串,因为那是不可行的(已经按原样导入每个模块apropos并搜索它的文档字符串是相当多的开销)。

即使它会,在add_axes它不会找到任何东西的情况下,因为您的搜索词不是单行描述的一部分。

如果你需要这样的功能,我很害怕,你需要自己实现它。

于 2013-06-02T20:15:36.203 回答