你要打印字符串"Buzz"
要么一旦if (i % 5 == 0)
是真还是返回i
:
In [5]: "foo" * 2
Out[5]: 'foofoo'
In [6]: "foo" * 3
Out[6]: 'foofoofoo'
In [7]: i = 5
In [8]: "foo" * (i % 5 == 0) or i
Out[9]: 'foo'
In [9]: "foo" * (i % 5 == 1) or i
Out[22]: 5
同样的逻辑也适用于“菲斯”有时(i % 3 == 0)
将是真正的,所以我们看到过一次,当它是假我们没有看到它。
当您使用*
操作上的弦,它就会重复串n
倍,在这种情况下,一旦将最多为任何字符串只印基于布尔测试的结果。
你可以看到在IPython的正是与True
和False
情况:
In [26]: "foo" * True
Out[26]: 'foo'
In [27]: "foo" * False
Out[27]: ''
基本上True * "foo"
相当于1 * "foo"
"foo" * False
相当于0 * "foo"
布尔数据类型为int的子类,所以代码正在有利的是,您有时会看到类似的逻辑与索引基于测试的列表一起使用,尽管不推荐:
In [31]: d = ["bar","foo"]
In [32]: d[3<2] # False so we get 0 the first element
Out[32]: 'bar'
In [33]: d[3>2] # True so we get 1 the second element
Out[33]: 'foo'
三元运算符的Python等价物是'b if a else c'。 – augurar 2015-02-24 00:47:47