我的python脚本中有一个未知数量的函数(嗯,它是已知的,但不是常量),以site _...开头.我想知道是否有办法在一些主函数中执行所有这些函数他们.就像是:
foreach function_that_has_site_ as coolfunc
if coolfunc(blabla,yada) == true:
return coolfunc(blabla,yada)
Run Code Online (Sandbox Code Playgroud)
所以它会经历所有这一切,直到它得到真实的东西.
谢谢!
该inspect模块已在其他答案中提及,特别方便,因为您可以轻松过滤您关心的对象的名称和值. inspect.getmembers有两个参数:正在探索其成员的对象,以及只接受(返回)您关注的对象的谓词(返回函数bool)True.
要获得"作为此模块的对象",您需要以下众所周知的习语:
import sys
this_module = sys.modules[__name__]
Run Code Online (Sandbox Code Playgroud)
在谓词中,您只想选择作为函数且名称以以下开头的对象site_:
import inspect
def function_that_has_site(f):
return inspect.isfunction(f) and f.__name__.startswith('site_')
Run Code Online (Sandbox Code Playgroud)
有了这两个项目,你的循环变为:
for n, coolfunc in inspect.getmembers(this_module, function_that_has_site):
result = coolfunc(blabla, yada)
if result: return result
Run Code Online (Sandbox Code Playgroud)
我还拆分了循环体,这样每个函数只被调用一次(这既节省时间又是一种更安全的方法,避免了可能的副作用)......以及在Python中重写它;-)