如何列出Python模块中的所有函数?

我有一个Python模块安装在我的系统上,我希望能够看到哪些function/类/方法可用。

我想调用每个文档的function。 在ruby中,我可以做类似ClassName.methods的东西,以获得该类可用的所有方法的列表。 在Python中有类似的东西吗?

例如。 就像是:

from somemodule import foo print foo.methods # or whatever is the correct method to call 

检查模块。 另请参阅pydoc模块,交互式解释器中的help()函数和生成pydoc文档的pydoc命令行工具。 你可以给他们上课,你希望看到的文件。 他们还可以生成HTML输出,并将其写入磁盘。

你可以使用dir(module)来查看所有可用的方法/属性。 也检查出PyDocs。

一旦你import了模块,你可以做:

  help(modulename) 

…以交互方式一次获得所有function的文档。 或者你可以使用:

  dir(modulename) 

…简单地列出模块中定义的所有函数和variables的名称。

 import types import yourmodule print [yourmodule.__dict__.get(a) for a in dir(yourmodule) if isinstance(yourmodule.__dict__.get(a), types.FunctionType)] 

检查示例:

 from inspect import getmembers, isfunction from my_project import my_module functions_list = [o for o in getmembers(my_module) if isfunction(o[1])] 

getmembers返回(object_name,object_type)元组列表。

您可以使用检查模块中的其他isXXXfunctionreplaceisfunction。

这将做的伎俩:

 dir(module) 

但是,如果您发现读取返回的列表很烦人,则可以使用以下循环来获取每行一个名称。

 for i in dir(module): print i 

为了完整起见,我想指出的是,有时您可能需要parsing代码而不是导入它。 import执行顶级expression式,这可能是一个问题。

例如,我让用户select使用zipapp创build的包的入口点函数。 使用importinspect运行错误代码的风险,导致崩溃,帮助打印出消息,popupGUI对话框等等。

相反,我使用ast模块列出所有的顶级function:

 import ast import sys def top_level_functions(body): return (f for f in body if isinstance(f, ast.FunctionDef)) def parse_ast(filename): with open(filename, "rt") as file: return ast.parse(file.read(), filename=filename) if __name__ == "__main__": for filename in sys.argv[1:]: print(filename) tree = parse_ast(filename) for func in top_level_functions(tree.body): print(" %s" % func.name) 

把这个代码放在list.py并用它自己作为input,我得到:

 $ python list.py list.py list.py top_level_functions parse_ast 

当然,即使对Python这样一个相对简单的语言来说,导航AST也是非常棘手的,因为AST是相当低级的。 但是,如果你有一个简单而明确的用例,它既可行又安全。

尽pipe如此,缺点是无法检测到运行时生成的函数,如foo = lambda x,y: x*y

dir(module)是使用脚本或标准解释器时的标准方式,正如大多数答案中所述。

但是使用像IPython这样的交互式Python shell,你可以使用tab-completion来获得模块中定义的所有对象的概述。 这比使用脚本和print来查看模块中定义的内容要方便得多。

  • module.<tab>会显示模块中定义的所有对象(函数,类等)
  • module.ClassX.<tab>会显示一个类的方法和属性
  • module.function_xy?module.ClassX.method_xy? 将显示该函数/方法的文档string
  • module.function_x??module.SomeClass.method_xy?? 会显示函数/方法的源代码。

如果您无法在没有导入错误的情况下导入所述Python文件,则这些答案都不起作用。 当我检查一个来自大量代码库的文件时,情况就是如此。 以下将以文本forms处理文件,并search以“def”开头的所有方法名称并打印它们及其行号。

 import re pattern = re.compile("def (.*)\(") for i, line in enumerate(open('Example.py')): for match in re.finditer(pattern, line): print '%s: %s' % (i+1, match.groups()[0]) 

对于你不想分析的代码,我推荐上面的@csl的基于AST的方法。

对于其他一切,检查模块是正确的:

 import inspect import <module_to_inspect> as module functions = inspect.getmembers(module, inspect.isfunction) 

这以[(<name:str>, <value:function>), ...]的forms给出了2元组列表。

上面的简单回答暗示在各种回应和评论中,但没有明确地提出。

除了以前答案中提到的dir(module)或help(module)之外,还可以尝试:
– 打开ipython
– 导入module_name
– inputmodule_name,按tab键。 它会打开一个小窗口,列出python模块中的所有函数。
它看起来很整齐。

这里是列出hashlib模块的所有function的片段

 (C:\Program Files\Anaconda2) C:\Users\lenovo>ipython Python 2.7.12 |Anaconda 4.2.0 (64-bit)| (default, Jun 29 2016, 11:07:13) [MSC v.1500 64 bit (AMD64)] Type "copyright", "credits" or "license" for more information. IPython 5.1.0 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]: import hashlib In [2]: hashlib. hashlib.algorithms hashlib.new hashlib.sha256 hashlib.algorithms_available hashlib.pbkdf2_hmac hashlib.sha384 hashlib.algorithms_guaranteed hashlib.sha1 hashlib.sha512 hashlib.md5 hashlib.sha224 

这不是(或至less不再)适用于dir(模块)。 代码应该像这样读取:

 dir('module') or dir('modules') 

或者你可以这样指定你想要的模块: dir('sys')从模块名称sys产生结果。 dir()返回错误,而dir('')是你所需要的。 * help('')将返回帮助信息,如果大多数function可用。 例如; help('modules')将返回模块帮助信息。

感谢所有的反对票。 当我发布这个时,我正在使用Python3.2.2和其他3x版本。 重点是使用('东西'),而不是以前的(东西)。 但是,我假设你们都停留在Python2上,或者使用PC的新版本,而不是像我一样移动。

http://effbot.org/librarybook/sys.htm

您可以使用以下方法从shell中获取模块中的所有function:

import module

 module.*?