2008-09-26 107 views
250

我有一个python模块安装在我的系统上,我希望能够看到哪些函数/类/方法可用。如何列出Python模块中的所有函数?

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

例如。例如:

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

请考虑审查所选答案!在其他答案中建议使用更好/更易于使用的解决方案。 – r2d2oid 2017-08-29 20:02:32

回答

90

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

+1

我在[我的答案](http://stackoverflow.com/a/31005891/21028)中的某些情况下使用了`ast`模块。 – csl 2015-06-23 14:57:47

+20

我不明白为什么选择这个答案作为答案,但显然有更好的答案... – frankliuao 2016-12-05 21:50:53

331

您可以使用dir(module)查看所有可用的方法/属性。另外检查PyDocs。

+10

这不完全正确。 'dir()`函数“试图产生最相关的信息,而不是完整的信息”。资料来源:http://docs.python.org/library/functions.html#dir。 – Zearin 2012-04-17 14:08:33

+14

@jAckOdE引用?然后你会得到可用的字符串模块的方法和属性。 – OrangeTux 2014-05-06 07:44:15

+0

@OrangeTux:哎呀,那应该是个问题。你好,你回答了。 – jAckOdE 2014-05-08 07:34:32

56
import types 
import yourmodule 

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

一旦你import编的模块,你可以做:

​​

...要获得所有功能的文档一次完成,交互。或者您可以使用:

dir(modulename) 

...简单地列出模块中定义的所有函数和变量的名称。

25

这将这样的伎俩:

dir(module) 

不过,如果你觉得这恼人阅读返回列表,就用下面的循环得到每行一个名称。

for i in dir(module): print i 
53

用一个例子检查:

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_type的)元组的列表。

您可以用inspect模块中的任何其他isXXX函数替换isfunction。

17

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

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

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

它不是(或至少不再)适用于使用dir(模块)。代码应该这样写:

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

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

感谢所有的反对票。当我发布这个时,我正在使用Python3.2.2和其他3x版本。重点是使用('东西'),而不是以前的(东西)。但是我假设你的所有人都坚持使用Python2,或者使用PC的新版本,而不是像我一样移动。如果你不能说进口不导入错误的Python文件

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

1

这些答案都将无法工作。当我检查来自具有很多依赖关系的大型代码库的文件时,情况就是这样。以下将以文本形式处理文件并搜索以“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]) 
21

为了完整起见,我想指出的是,有时你可能想解析代码,而不是将其导入的。 import执行顶级表达式,这可能是一个问题。

例如,我让用户选择使用zipapp进行包装的入口点函数。使用importinspect冒着运行歧途代码的风险,导致崩溃,帮助消息被打印出来,GUI对话框弹出等等。

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

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并使用自身作为输入,我得到:

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

当然,导航AST可能有点棘手,即使是像Python这样的相对简单的语言,因为AST是相当低级的。但是如果你有一个简单明了的用例,它既可行又安全。

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

-5

您可以用下面的方法来获取列表的模块中的所有功能,从外壳:

import module

module.*? 
0

除了在前面的答案中提到目录(模块)或帮助(模块),你也可以尝试:
- 打开ipython
- import module_name
- 键入module_name,按tab键。它会打开一个小窗口,列出python模块中的所有功能。
它看起来非常整齐。

这里的代码片段上市hashlib模块

(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 
1

所有的功能代码,你不想分析,我建议上述@csl的基于AST的方法。

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

import inspect 

import <module_to_inspect> as module 

functions = inspect.getmembers(module, inspect.isfunction) 

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

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

相关问题