(即使这个标题会导致火焰,我意识到)
Python做出了深思熟虑的设计选择,让for循环使用显式迭代,在大多数情况下,代码大大简化了.
但是,如果你的测试用例和更新函数很复杂,有时构造一个iterable会非常麻烦,所以我发现自己编写了以下while循环:
val = START_VAL
while <awkward/complicated test case>:
# do stuff
...
val = <awkward/complicated update>
Run Code Online (Sandbox Code Playgroud)
这个问题是更新位于while块的底部,这意味着如果我想在其中continue嵌入某个地方,我必须:
使用重复代码进行复杂/ awkard更新,AND
冒着忘记它并让我的代码无限循环的风险
我可以去手动滚动一个复杂的迭代器:
def complicated_iterator(val):
while <awkward/complicated test case>:
yeild val
val = <awkward/complicated update>
for val in complicated_iterator(start_val):
if <random check>:
continue # no issues here
# do stuff
Run Code Online (Sandbox Code Playgroud)
这让我感到震惊,因为waaaaay太冗长和复杂.堆栈溢出中的人有一个更简单的建议吗?
回复评论:
@Glenn Maynard:是的,我驳回了答案.如果有一种方法可以在一个方法中编写五行,那就太糟糕了......特别是在一直出现的情况下(循环是图灵完成程序的一个共同特征).
对于寻找具体示例的人:假设我正在使用自定义日期库.那么我的问题是,你将如何在python中表达这一点:
for (date = start; date < end; date = calendar.next_quarter_end(date)):
if another_calendar.is_holiday(date):
continue
# ... do stuff...
Run Code Online (Sandbox Code Playgroud) python ×1