如何从模块中捕获所有非内置函数的名称并将它们放入列表中

时间:2016-06-30 21:17:25

标签: python python-2.7 python-3.x

我想从特定模块中捕获所有非内置函数的名称,并将它们放入列表中。

假设我在模块func_2()中写了test.pyimport test my_list_of_functions = all_funcs_from(test) 。然后,从另一个模块内部,我想做类似的事情:

Dir()

help()一起返回内置函数,我无法使用{{1}}

进行操作

2 个答案:

答案 0 :(得分:2)

这应该从导入的模块返回所有顶级函数。

from types import FunctionType

def all_funcs_from(module):
    return filter(lambda f: isinstance(f, FunctionType), module.__dict__.values())

内置函数属于types.BuiltinFunctionType类型。 但请注意,此方法无法捕获f = functools.partial(g, 5)之类的内容。

您也可以使用hasattr(f, '__call__')扩大搜索一般的callables。

所有这些都取决于您的实际要求。

question的答案在这方面非常有用。

答案 1 :(得分:1)

您可以使用inspect.getmembers

获取模块中的所有功能名称
  

返回(名称,值)对列表中对象的所有成员   按名称排序。如果仅提供可选的谓词参数   包含谓词返回真值的成员。

import types, inspect

# my_module is your module
r = inspect.getmembers(my_module, lambda o: isinstance(o, types.FunctionType))
function_names = [i[0] for i in r] # list of only function names

您可以使用inspect.isfunction(来自@ user2357112)来简化谓词:

r = inspect.getmembers(my_module, inspect.isfuction)
function_names = [i[0] for i in r]