【发布时间】:2023-03-19 15:40:01
【问题描述】:
我有一个相同 python 对象的几个实例的列表,我想循环并执行 3 个方法;但是,在某些情况下,我想选择运行 3 个中的哪一个(以任意组合)。
我可以这样做:
do_method_1 = True
do_method_2 = True
do_method_3 = True
for item in list_of_items:
if do_method_1:
item.method_1()
if do_method_2:
item.method_2()
if do_method_2:
item.method_2()
这很容易阅读,但是,我对循环中的每个项目都进行了多次检查,并稍微减慢了速度。我也可以通过每次检查来翻转它,然后循环检查每个真/假检查的项目......但我可能会多次循环检查所有内容并以这种方式减慢速度。
我很好奇是否有一种简单的方法可以只评估检查和循环一次。我目前有这样的东西:
do_method_1 = True
do_method_2 = True
do_method_3 = True
if do_method_1:
if do_method_2:
if do_method_3:
for item in list_of_items:
item.method_1()
item.method_2()
item.method_3()
else:
for item in list_of_items:
item.method_1()
item.method_2()
elif do_method_3:
for item in list_of_items:
item.method_1()
item.method_3()
else:
for item in list_of_items:
item.method_1()
else:
if do_method_2:
if do_method_3:
for item in list_of_items:
item.method_2()
item.method_3()
else:
for item in list_of_items:
item.method_2()
elif do_method_3:
for item in list_of_items:
item.method_3()
else:
print('not doing anything...')
这确实可行,因此循环只执行一次,而且我认为从技术上讲,每次检查只会被评估一次,但这是很多重复的代码混乱,如果一个第四种方法已添加到可能性列表中。那么,是否有另一种“更简洁”的方式来写出这个循环,只执行一次循环,并且每次只检查一次以提高速度?
谢谢!
【问题讨论】:
-
您是否分析过您的代码以确定这是一个瓶颈?
-
除了@C_Z_ 提出的问题,你能分享一些更接近你实际代码的东西吗?
标签: python