我想从特定模块中捕获所有非内置函数的名称,并将它们放入列表中。
假设我在模块func_2()
中写了test.py
和import test
my_list_of_functions = all_funcs_from(test)
。然后,从另一个模块内部,我想做类似的事情:
Dir()
help()
一起返回内置函数,我无法使用{{1}}
答案 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]