for - else vs for elif

Vik*_*ren 9 python for-loop if-statement python-2.7

我认为elif:是简写

else:
     if:
Run Code Online (Sandbox Code Playgroud)

但是不可能使用

for - elif:

只要

for - else:if:if:

在这段代码中:

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)
Run Code Online (Sandbox Code Playgroud)

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

kin*_*all 12

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

  • 这很幸运,因为否则我们不能在一个`if`语句中有多个`elif`子句,这将是非常糟糕的!(...我想除非后来的那些扩展到*越来越缩进*`else:if` blocks,这将是奇怪的......哇,我现在需要漂白我的大脑.) (2认同)
  • 但是在'for`之后有'elif`是有道理的,对吧?对我来说,事实上我们可以做'for ... else`,但没有`for ... elif ... elif ........... else`似乎不一致. (2认同)

Sil*_*Ray 9

for else是一种特殊用法,与if elif结构不同. elif在任何情况下都没有意义for,因为for else"如果我们完成了循环而没有破坏,就做这件事".这是二进制逻辑. elif在这个二元决策的背景下没有意义.

  • 对我来说,“ elif”在“ for ... elif ... else”上下文中确实有意义。认为它等同于`for ... else if ... else`。这没有什么意义呢?我知道python语法不允许这样做。我的意思是说*可能*合理。 (2认同)

eca*_*mur 8

正确.同样适用elsetry .. except .. else.


use*_*lpa 5

您所指的“其他”与“ for”命令相关,而不与“ if”命令相关。仅当与“ if”命令一起使用时,“ elif”才有意义。

使用'for'命令,仅当'for'块没有以'break'命令提前结束时,才执行'else'块,请参见第4.4节