Python中如何通过循环批量调用命名规则相近的函数
实现方法
方法1:手动维护函数列表(最推荐)
该方案不依赖函数命名规则,执行顺序完全可控,出错概率最低。
def statement1(): # Do something print("执行statement1") def statement2(): # Do something print("执行statement2") def statement3(): # Do something print("执行statement3") # 把需要执行的函数按顺序放进列表,注意不要加括号,直接传函数对象本身 func_list = [statement1, statement2, statement3] # 循环调用 for func in func_list: func()
后续新增statement4这类函数时,只需要把新函数追加到列表中即可,灵活度很高。
方法2:按命名规则自动获取函数
如果你不想手动维护列表,且能确定所有待执行函数都符合statement+数字的命名规则,可以通过全局命名空间自动匹配调用:
for i in range(1, 4): # 数字区间对应函数名里的数字范围 func_name = f"statement{i}" # 从全局命名空间获取对应名称的对象,判断是可调用的函数再执行 if callable(globals().get(func_name)): globals()[func_name]()
注意使用该方案时要确保当前命名空间内没有其他符合statement+数字命名规则的非函数对象,避免出现调用错误。
方法3:装饰器自动注册(适合函数数量较多的场景)
如果待执行的函数数量多、经常需要增删,可以用装饰器自动把符合要求的函数加入执行队列,不需要手动修改调用列表:
func_queue = [] # 定义注册装饰器 def register_func(func): func_queue.append(func) return func @register_func def statement1(): print("执行statement1") @register_func def statement2(): print("执行statement2") @register_func def statement3(): print("执行statement3") # 循环调用所有已注册的函数 for func in func_queue: func()
后续新增函数时只要加@register_func装饰器就会自动加入执行队列,执行顺序和函数定义顺序一致。
内容的提问来源于stack exchange,提问作者Sarthak Saxena
相关产品推荐
相关产品推荐

