我在某处找到了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循环。
我没有看到任何官方文档,并且想知道它是如何工作的以及它是否常用。
答案 0 :(得分:3)
如果是or
(或and
)运算符,则执行 -
a or b
如果a不是类似false的值,则返回a
,否则返回b
。 None
(和空列表)是假的,就像值一样。
来自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
。