原谅我,我是python的新手。
在其他语言中,当我想在循环的结尾而不是在开始时进行迭代时,我会使用do while
循环。
Python没有do while
,所以我这样做了:
iter_ = zip(x_list, y_list)
x,y = initial_values()
while x:
foo(x,y)
x,y = next(iter_,(False,False))
这很好,但是我不完全满意:
(False,False)
元组。不过我觉得比较可取到try except: StopIteration; break
False
的元素。但是,我发现最好引入一个单独的条件变量并进行测试,除了next()
调用在循环的末尾而不是循环的开始执行迭代的最佳/最python惯用方式是什么?
关于:
z = set_z_for_first_pass()
for x,y in zip(x_list,y_list):
if not x: break
foo(x,y,z)
z = set_z_for_subsequent_passes()
我认为回答问题的方式有两种。
[首先,仅解决问题,我想说您使用do...while
循环的用例是人为的,并且可能来自使用这种复杂思维的其他语言。在Python中,我将使用:
z = calc_z_for_first_pass()
for x,y in zip(x_list, y_list)
foo(x,y,z)
z = calc_z_for_subsequent_passes()
第二,确实有些情况下您想要一个do...while
循环,例如:
do:
z = calc_z()
while not is_valid(z)
在这种情况下,您需要手动模拟自己的do...while
循环(请参见Olvin建议的[Emulate a do-while loop in Python?):
while True:
z = calc_z()
if is_valid(z):
break