【问题标题】:for - else vs for eliffor - else vs for elif
【发布时间】:2012-06-11 15:44:48
【问题描述】:

我认为 elif: 是

的简写
else:
     if:

但无法使用

for-elif:

只有

对于-否则:如果:

在这段代码中:

for line in source:
    change_next = False
    for dataset,artnr,revision in datasets:
        if dataset in line:
            change_next = True
            print "  **  " + dataset + " found"
            datasets.remove((dataset,artnr,revision))
            break
    else:
        if line.startswith("DstID:"):
            print line.replace("DstID:","").rstrip()

    if change_next and "Partno:" in line:
        destination.write("Partno: " + artnr + "\n")
        print "Partno: " + artnr
    elif change_next and "Revno:" in line:
        destination.write("Revno:" + revision + "\n")
        print "Revno:" + revision
    else:
        destination.write(line)

感谢您到目前为止的回复,我现在的问题是:这是这样做的方式吗?如果一行中没有任何(已知的)数据集,那么如果它是数据集,我想打印它?

【问题讨论】:

  • 我已经编写 Python 大约 7 年了,但我从来不知道 for 语句中的 else 子句...
  • @AndrewJaffe:这是可以理解的。它不是特别有用。我想我用过它的次数屈指可数。
  • @JoelCornett 我一直在使用它。

标签: python for-loop python-2.7 if-statement


【解决方案1】:

elif: 不是扩展为else: if 的宏,它是一个仅在if: statement 的上下文中有效的语法元素。通常,else: if 会打开一个新的if 块;但是,elif: 没有这样做。

【讨论】:

  • 这是幸运的,否则我们不能在一个if 语句中包含多个elif 子句,这太糟糕了! (...我想除非后续的扩展为 越来越缩进 else: if 块,这会很奇怪...哇,我现在需要漂白我的大脑。)
  • 但是eliffor 之后是有意义的,对吧?对我来说,我们可以做到for ... else,但没有for ... elif ... elif ........... else 似乎不一致。
  • eliffor 之后有什么意义?循环后的 elseif 的作用不同(这令人困惑)。
【解决方案2】:

for else 是一种特殊情况用法,与if elif 结构不同。无论如何,eliffor 的上下文中没有任何意义,因为for else 的含义是“如果我们已经完成了循环而没有中断,那就做这件事”。这就是二元逻辑。 elif 在这种二元决策的上下文中没有意义。

【讨论】:

  • 还有whileelse,但使用频率比forelse还要少。
  • @MRAB elifwhile else 中也没有上下文意义。或者tryexceptelse。关键是 elif 在这些上下文中不存在,因为它没有逻辑意义。
  • 对我来说eliffor ... elif ... else 上下文中确实有意义。认为它等同于for ... else if ... else。什么没有意义?我知道python语法不允许它。我是说语义上可能有意义。
【解决方案3】:

正确。 try .. except .. else 中的 else 也是如此。

【讨论】:

    【解决方案4】:

    您所指的“else”与“for”命令相关联,而不是与“if”命令相关联。 'elif' 仅在与 'if' 命令一起使用时才有意义。

    使用 'for' 命令,只有在 'for' 块没有被 'break' 命令提前结束时才会执行 'else' 块,请参阅 paragraph 4.4

    【讨论】:

      猜你喜欢
      • 2017-11-27
      • 2023-03-17
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 2016-08-30
      • 2011-05-20
      相关资源
      最近更新 更多