的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