我看到了以下简单代码的一些变体:
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]
代码的工作原理吗?
答案 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项。”
如果你愿意,你可以做一个元组教程。