2012-06-11 38 views
8

我认为ELIF:是简写的 - 否则,相较于ELIF

else: 
    if: 

,但它不可能使用

为 - 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) 

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

+3

我已经编程了大约7年的Python,并且我从来不知道'for'语句中的'else'子句... –

+3

@AndrewJaffe:这是可以理解的。这不是特别有用。我认为在我使用它的时候只有少数几次。 –

+0

@JoelCornett我一直都在使用它。 – becko

回答

11

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

+2

这是幸​​运的,因为否则我们不能在一个if语句中有多个'elif'子句,这太糟糕了! (......我想,除非随后的扩展为*越来越多*'else:if'块,这将会是奇怪的......哇,我需要现在漂白我的大脑。) – weronika

+1

但是, 'for'后的elif',对吧?对我来说,我们可以做'for ... else',但没有'for ... elif ... elif ........... else'似乎不一致。 – becko

+0

在'for'之后加入'elif'会有什么意义?循环之后的'else'不会和'if'做同样的事情(这很令人困惑)。 – kindall

8

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

9

forelse是一种特殊用法,与ifelif结构不同。 eliffor的背景下确实没有意义,因为forelse的含义是“如果我们已经完成了循环而没有中断,请执行此操作”。这是二进制逻辑。 elif在这个二元决策的背景下没有意义。

+0

还有'while'' else',但它比''else'更少使用。 – MRAB

+0

@MRAB'elif'在'while''else'中也没有使上下文有意义。或者在'try''除''else'之外。要点在于'elif'不存在于这些上下文中,因为它不合逻辑。 –

+0

对我来说'elif'确实在'... ... elif ... else'上下文中有意义。把它看作等同于'for ... else if ... else'。什么没有意义呢?我知道Python语法不允许它。我的意思是*语义*它*可能*有道理。 – becko

4

你引用的'else'绑定到'for'命令,而不是'if'命令。 'elif'只有在与'if'命令一起使用时才有意义。

使用'for'命令时,'else'块仅在'for'块未由'break'命令过早结束时执行,请参阅paragraph 4.4