在浏览 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(这就是我们可以添加bools 的原因,就像上面所做的那样)。
最后,不用说,这种混淆可以很容易地通过一组额外的括号来避免:
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.