我的系统上安装了一个Python模块,我希望能够看到其中有哪些函数/类/方法可用。
我想对每一个都调用帮助函数。在Ruby中,我可以做一些类似ClassName的事情。方法获取该类上所有可用方法的列表。Python中有类似的东西吗?
例如:
from somemodule import foo
print(foo.methods) # or whatever is the correct method to call
我的系统上安装了一个Python模块,我希望能够看到其中有哪些函数/类/方法可用。
我想对每一个都调用帮助函数。在Ruby中,我可以做一些类似ClassName的事情。方法获取该类上所有可用方法的列表。Python中有类似的东西吗?
例如:
from somemodule import foo
print(foo.methods) # or whatever is the correct method to call
当前回答
import types
import yourmodule
print([getattr(yourmodule, a) for a in dir(yourmodule)
if isinstance(getattr(yourmodule, a), types.FunctionType)])
其他回答
使用检查。Getmembers用于获取模块中的所有变量/类/函数等,并传入inspect。Isfunction作为谓词,只得到函数:
from inspect import getmembers, isfunction
from my_project import my_module
functions_list = getmembers(my_module, isfunction)
Getmembers返回一个元组列表(object_name, object),按名字的字母顺序排序。
你可以用inspect模块中的任何其他isXXX函数替换isfunction。
这样就可以了:
dir(module)
但是,如果您发现阅读返回的列表很烦人,只需使用下面的循环来每行获取一个名称。
for i in dir(module): print i
对于你不想评估的代码,我推荐一种基于ast的方法(就像csl的答案),例如:
import ast
source = open(<filepath_to_parse>).read()
functions = [f.name for f in ast.parse(source).body
if isinstance(f, ast.FunctionDef)]
对于其他一切,inspect模块是正确的:
import inspect
import <module_to_inspect> as module
functions = inspect.getmembers(module, inspect.isfunction)
这给出了一个形式为[(<name:str>, <value:function>),…]的二元组列表。
上面的简单答案在各种回应和评论中都有暗示,但没有明确地指出来。
一旦你导入了模块,你可以这样做:
help(modulename)
... 以交互方式一次性获得所有函数的文档。或者你可以用:
dir(modulename)
... 简单地列出模块中定义的所有函数和变量的名称。
如果你不能在没有导入错误的情况下导入上述Python文件,这些答案都不会起作用。当我检查一个来自大量依赖的大型代码库的文件时,我就遇到了这种情况。下面的代码将把文件作为文本处理,搜索所有以“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])