6

有没有一种方法可以找到在 python 环境中定义的所有函数?

例如,如果我有

def test:
   pass

some_command_here会回来test

4

5 回答 5

6

您可以使用检查模块:

import inspect
import sys


def test():
    pass

functions = [name for name, obj in inspect.getmembers(sys.modules[__name__], inspect.isfunction)]
print functions

印刷:

['test']
于 2013-06-18T18:36:17.027 回答
4

您可以使用globals()来获取文件全局范围内定义的所有内容,并inspect过滤您关心的对象。

[ f for f in globals().values() if inspect.isfunction(f) ]
于 2013-06-18T18:33:44.500 回答
2

使用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']
于 2013-06-18T18:35:18.287 回答
1
>>> def test():
...     pass
...
>>> [k for k, v in globals().items() if callable(v)]
['test']
于 2013-06-18T18:37:40.537 回答
1

首先,我们将创建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>)
>>> 
于 2013-06-18T19:21:39.837 回答