有没有一种方法可以找到在 python 环境中定义的所有函数?
例如,如果我有
def test:
pass
some_command_here
会回来test
您可以使用检查模块:
import inspect
import sys
def test():
pass
functions = [name for name, obj in inspect.getmembers(sys.modules[__name__], inspect.isfunction)]
print functions
印刷:
['test']
您可以使用globals()
来获取文件全局范围内定义的所有内容,并inspect
过滤您关心的对象。
[ f for f in globals().values() if inspect.isfunction(f) ]
使用globals()
和types.FunctionType
>>> from types import FunctionType
>>> functions = [x for x in globals().values() if isinstance( x, FunctionType)]
演示:
from types import FunctionType
def func():pass
print [x for x in globals().values() if isinstance(x, FunctionType)]
#[<function func at 0xb74d795c>]
#to return just name
print [x for x in globals().keys() if isinstance(globals()[x], FunctionType)]
#['func']
>>> def test():
... pass
...
>>> [k for k, v in globals().items() if callable(v)]
['test']
首先,我们将创建test
我们想要查找的函数。
def test():
pass
接下来,我们将创建some_command_here
您想要的功能。
def some_command_here():
return filter(callable, globals().values())
最后,我们调用新的函数并将过滤器转换为一个tuple
查看。
tuple(some_command_here())
注意:这会搜索当前的全局命名空间并返回任何可调用的内容(不仅仅是函数)。
例子:
>>> def test():
pass
>>> def some_command_here():
return filter(callable, globals().values())
>>> tuple(some_command_here())
(<function test at 0x02F78660>,
<class '_frozen_importlib.BuiltinImporter'>,
<function some_command_here at 0x02FAFDF8>)
>>>