奇怪的Python布尔运算符

时间:2017-02-17 20:37:08

标签: python python-2.x

我看到了以下简单代码的一些变体:

if dist_1>dist_2 :
    print enemy_2
else:
    print enemy_1

变化1:

print (enemy_1, enemy_2)[dist_1 > dist_2]

变化2:

e1, d1, e2 = (raw_input() for _ in '123')
print (e1, e2)[d1 > raw_input()]

有人可以解释这个print (x,y)[x>y]代码的工作原理吗?

2 个答案:

答案 0 :(得分:3)

布尔值实际上是Python中整数的子类:

isinstance(True, int)
isinstance(False, int)

都是真实的陈述。因此,您可以使用布尔值索引两元素序列。如果布尔值为False,您将获得第一个元素。如果布尔值为True,则会得到第二个元素。

表达式(enemy_1, enemy_2)创建一个双元素tuple[dist_1 > dist_2]提供布尔索引。 print是偶然的;它只是用来输出结果。

答案 1 :(得分:1)

如果你把一些元素放在至少有一个逗号的parens中它就会成为一个元组。与列表类似,您可以索引元组。通常使用整数进行索引。但是,如果使用布尔值进行索引,则False将被解释为0,而True将被解释为1。

所以代码:

(enemy_1, enemy_2)[dist_1 > dist_2]

用英语解释为“if dist_1>而不是dist_2从元组给我第1项,否则给我第0项。”

如果你愿意,你可以做一个元组教程。