仅当变量值不为None时,我才想向while循环添加条件。
我现在正在使用的这种方法:
from queue import Queue
max_limit = None # could be None or an integer (user provided value)
q = Queue()
q = get_values()
counter = 0
while not q.empty() and \
(not max_limit or counter <= max_limit):
# If max_limit is None , counter <= max_limit never gets evaluated thanks to lazy OR
# do stuff...
counter += 1
现在的问题是,仅通过查看就很难确定正在做什么。除了在while循环之前或之内添加if语句之外,还有其他更Python化的方法吗?
答案 0 :(得分:3)
尽管您的声明:
除了在while循环之前或之内添加if语句
我相信这实际上是最好的解决方案。
如果您最终遇到多个约束中的一个,可能会变成非常丑陋的while
条件,因此我将离开while
循环来处理正常情况,而只需添加“退出”尽早循环”代码来处理特殊情况,例如:
counter = 0
while not q.empty():
counter += 1
if max_limit is not None and counter > max_limit: break # User count limit.
if GetElapsedTime() > timeLimit: break # Took too long.
# Other checks as necessary.
# do stuff...
每行有一个退出原因(并有记录),它仍然保持原始循环的可读性。
您应该记住,Pythonic代码并非总是 最好的代码,有时它只是用来显示人们如何认为自己很聪明:-)
我的第一个倾向是始终针对 可读性进行优化。
答案 1 :(得分:3)
尽管您的数学老师会告诉您什么,但实际上 是最大的数字。
max_limit = # do something magic
if max_limit is None:
max_limit = float('inf')
# ...
while not q.empty() and counter <= max_limit:
pass
顾名思义, float('inf')
是浮点常量无穷大,它大于任何有限值。由于counter
总是较小,因此它将有效地禁用您的条件。而且while
循环代码也不会被一堆条件语句所困扰。
答案 2 :(得分:0)
max_limit = None or sys.maxint # use sys.maxsize for python 3
counter = 0
while not q.empty():
if counter > max_limit:
break # exit the loop
# do stuff...
counter += 1
答案 3 :(得分:-1)
from queue import Queue
max_limit = None # could be None or an integer (user provided value)
q = Queue()
q = get_values()
counter = 0
while q is not None and counter <= max_limit:
counter += 1