在浏览codegolf时,我发现了这个页面:
我不理解print()后面的[]是什么意思...能否做出解释?
g=input();print("Approved","Summer School","Failed")[(g<7)+(g<3)]
我不理解print()后面的[]是什么意思...能否做出解释?
g=input();print("Approved","Summer School","Failed")[(g<7)+(g<3)]
>>> 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
)。bool
是 int
的一个子类,而且 True == 1
以及 False == 0
(这就是为什么我们可以像上面那样添加 bool
)。print(("Approved","Summer School","Failed")[(g<7)+(g<3)])
True
和False
是布尔值,而在Python中bool
是int
的子类,因此True
等于1,False
等于0... - Martijn Pietersx = (1, 2, 3)[1]
这段代码将 x
赋值为 2
。
在您的更复杂的变体中,一个元组的元素被选择并传递给 print
。
混淆在于这段代码看起来像是调用名为 print
的函数。在 Python 3 中通过将 print
转换为函数来消除了这种混淆。在 Python 3 中,您提出的代码执行完全不同的操作。
TypeError: 'NoneType' object is not subscriptable
而彻底失败。 - Martijn PietersNone[0]
来提醒自己。print()
返回 None
是常识,不是吗? - Martijn Pietersprint(x,y,...)[i]
应该被解析为 print (x,y)[i]
。它只是后面跟着一个 tuple
的打印。
print
,("Approved","Summer School","Failed")[(g<7)+(g<3)]
,分别理解它们,你就会明白了。这是元组和索引的运用。 - falsetru(...)[(g<7)+(g<3)]
这个写法是个疯子! - David Heffernanprint
函数已经改变为使用标准函数语法。 - Silas Ray