2024-03-29 05:45:18 发布
网友
在浏览codegolf时,我发现this:
g=input();print("Approved","Summer School","Failed")[(g<7)+(g<3)]
我不明白print()之后的[]是什么意思。。。有什么澄清吗?在
print(x,y,...)[i]应解析为print (x,y)[i]。它只打印在tuple后面。在
print(x,y,...)[i]
print (x,y)[i]
tuple
只是元组索引。与此无异:
x = (1, 2, 3)[1]
它将2分配给x。在
2
x
在更复杂的变体中,选择元组的一个元素,然后传递给print。在
print
令人困惑的是,代码看起来像是在调用一个名为print的函数。在python3中,通过将print转换为函数,消除了这种混乱。您问题中的代码在Python3中做了完全不同的事情。在
>>> 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)和{}(True + True)。在
(g<7)+(g<3)
>= 0
False + False
True + True
回想一下,bool是int的子类,True == 1和{}(这就是为什么我们可以添加bools,如上所述)。在
bool
int
True == 1
最后,不用说,只要加上一组括号,这种混乱就可以很容易地避免:
print(x,y,...)[i]
应解析为print (x,y)[i]
。它只打印在tuple
后面。在只是元组索引。与此无异:
它将
2
分配给x
。在在更复杂的变体中,选择元组的一个元素,然后传递给
print
。在令人困惑的是,代码看起来像是在调用一个名为
print
的函数。在python3中,通过将print
转换为函数,消除了这种混乱。您问题中的代码在Python3中做了完全不同的事情。在看到图案了吗?只是简单的索引。在
顺便说一下,我们总是知道}(
(g<7)+(g<3)
将是>= 0
(False + False
)和{True + True
)。在回想一下,}(这就是为什么我们可以添加
bool
是int
的子类,True == 1
和{bool
s,如上所述)。在最后,不用说,只要加上一组括号,这种混乱就可以很容易地避免:
^{pr2}$相关问题 更多 >
编程相关推荐