相关疑难解决方法(0)

在python中模拟C风格的循环

(即使这个标题会导致火焰,我意识到)

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

20
推荐指数
2
解决办法
8927
查看次数

标签 统计

python ×1