在 python 中:我希望在 while 循环中执行相同的代码块,但在不同的条件下,带有一个应该检查哪个条件的标志。此外,在这种情况下,标志不会在执行期间更改,并且只有一个标志对于程序的这一部分是事件的。
我可以这样做:
#user inputs flag
if flag == "flag1": flag1 = True
elif flag == "flag2": flag2 = True
#...
#define parameters
while (flag1 and condition1) or (flag2 and condition2) ... or (flagN and conditionN):
#do stuff #using parameters
由于“and”在 python 中的工作方式,这种方法可以,因为它只会检查标志,而不会每次都计算每个括号的条件。
或
def dostuff(parameters):
#do stuff
#user inputs flag
if flag == "flag1": flag1 = True
elif flag == "flag2": flag2 = True
#...
#define parameters
if flag1:
while(condition1):
dostuff(parameters)
elif flag2:
while(condition2):
dostuff(parameters)
etc... down to N
会完成相同的事情,可能是相同的开销。
我只是想知道是否有人可以在编程实践和可读性方面提出更好的方法,或者这是否是最好的通用方法。
谢谢
您可以使用 lambda 表达式的 dict
:
conditions = {
flag1: lambda: cond1,
flag2: lambda: cond2,
flag3: lambda: cond3}
while conditions[flag]():
do_stuff(parameters)
例子:
conditions = {
"flag1": lambda: x < 10,
"flag2": lambda: x < 3,
"flag3": lambda: x < 5}
x = 0
while conditions["flag2"]():
print(x)
x += 1
输出:
0
1
2
我是一名优秀的程序员,十分优秀!