在浏览 codegolf 时,我发现了这个:
g=input();print("Approved","Summer School","Failed")[(g<7)+(g<3)]
我不明白 print() 之后的 [] 是什么意思……有什么说明吗?
在浏览 codegolf 时,我发现了这个:
g=input();print("Approved","Summer School","Failed")[(g<7)+(g<3)]
我不明白 print() 之后的 [] 是什么意思……有什么说明吗?
>>> print("Approved","Summer School","Failed")[0]
Approved
>>> print("Approved","Summer School","Failed")[1]
Summer School
>>> print("Approved","Summer School","Failed")[2]
Failed
看到图案了吗?这只是简单的索引。
顺便说一句,我们总是知道(g<7)+(g<3)
将是>= 0
( False + False
) 和<= 2
( True + True
)。
回想一下,thatbool
是int
, 和 thatTrue == 1
的子类False == 0
(这就是我们可以添加bool
s 的原因,就像上面所做的那样)。
最后,不用说,这种混淆可以很容易地通过一组额外的括号来避免:
print(("Approved","Summer School","Failed")[(g<7)+(g<3)])
这只是元组索引。与此没有什么不同:
x = (1, 2, 3)[1]
分配2
给x
.
在您更复杂的变体中,选择元组的一个元素,然后将其传递给print
.
令人困惑的是,代码使您看起来像是在调用一个名为print
. 这种混乱在 Python 3 中通过print
变成一个函数而被消除了。您问题中的代码在 Python 3 中的作用完全不同。
print(x,y,...)[i]
应该被解析为print (x,y)[i]
. 它只是打印后跟tuple
.