在python for循环中使用“或”来定义默认序列

时间:2015-07-26 12:30:33

标签: python for-loop

我在某处找到了for循环的用法:

def func(seq=None):
    for i in seq or [1, 2, 3]:
       print i

func([3, 4, 5])  # Will print 3, 4, 5
func()           # Will print 1, 2, 3

似乎在使用或/和使用“in”关键字时,它将选择第一个/最后一个“可用”序列以运行for循环。

我没有看到任何官方文档,并且想知道它是如何工作的以及它是否常用。

2 个答案:

答案 0 :(得分:3)

如果是or(或and)运算符,则执行 -

a or b

如果a不是类似false的值,则返回a,否则返回bNone(和空列表)是假的,就像值一样。

来自documentation -

  

表达式x and y首先评估x;如果x为false,则返回其值;否则,将评估y并返回结果值。

     

表达式x or y首先评估x;如果x为真,则返回其值;否则,将评估y并返回结果值。

     

(注意,既不是也不限制或者限制它们返回False和True的值和类型,而是返回最后一个被评估的参数。这有时是有用的,例如,如果s是一个应该被替换的字符串如果它是空的默认值,则表达式s or 'foo'产生所需的值。因为无论如何不必发明一个值,它不需要返回与其参数相同类型的值,因此,例如,不' foo'收益率假,而不是''。)

此外,在for循环的情况下,in实际上是for循环结构的一部分,它不是运算符。 for循环构造here的文档。

因此当你这样做时 -

for i in seq or [1, 2, 3]:

首先要评估 -

seq or [1 , 2, 3]

如果seq列表不是none或为空,则返回week,area1,area2,area3,area4,area5,area6,area7 1,5,5,5,5,5,5,5 2,6,6,6,6,6,6,6 3,7,7,7,7,7,7,7 列表,以便您可以迭代它。否则,它会返回[1,2,3],你会迭代它。

答案 1 :(得分:0)

没有!这是运营商的优先事项! in之前的seq or [1, 2, 3] ... Precedence,§6.15。
因此在进入循环之前评估None。 seq是li