的inspect
模块,在其他的答案已经提到的,因为你可以轻松地过滤你关心对象的名称和值是特别方便。 inspect.getmembers需要参数:其成员你探索的对象,一个谓词(函数返回bool
)将接受(返回True
的)只有你关心的对象。
得到你需要以下众所周知的成语“也就是这个模块对象”:
import sys
this_module = sys.modules[__name__]
在你的谓词,您只需要选择哪些是函数对象,并具有与site_
开头的名称:
import inspect
def function_that_has_site(f):
return inspect.isfunction(f) and f.__name__.startswith('site_')
在掌握这两个项目,你的循环就变成了:
for n, coolfunc in inspect.getmembers(this_module, function_that_has_site):
result = coolfunc(blabla, yada)
if result: return result
我还分割了循环体,以便每个函数只被调用一次(这既节省了时间和是一种更安全的方法,避免了可能的副作用)...以及在Python ;-)重新措辞它
请注意,你可能会更好试图做这一种不同的方式 - 为实例,而不是将它们全部定义为名为'site_ZZZZ'的顶级函数,而是将它们存储为函数的列表或字典。 – Amber 2010-05-16 08:49:56