我目前正在处理Allen B. Downey的几个“Think Python”部分,我在第16.1节中无法理解问题的解决方案:
编写一个名为is_after的布尔函数,它接受两个Time对象, t1和t2,如果t1按时间顺序跟随t2,则返回True 除此以外。挑战:不要使用if语句。
他的解决方案如下:
def is_after(t1, t2):
"""Returns True if t1 is after t2; false otherwise."""
return (t1.hour, t1.minute, t1.second) > (t2.hour, t2.minute, t2.second)
Full solution code显示在这里。
问题:此运算符是否同时比较多个值?这怎么工作?我在哪里可以阅读更多相关信息?
答案 0 :(得分:3)
Read the docs here for an explanation
可以将序列对象与具有相同序列类型的其他对象进行比较。比较使用词典排序:首先比较前两个项目,如果它们不同,则确定比较的结果;如果它们相等,则比较接下来的两个项目,依此类推,直到任一序列用完为止。如果要比较的两个项本身是相同类型的序列,则递归地执行词典比较。如果两个序列的所有项比较相等,则认为序列相等。如果一个序列是另一个序列的初始子序列,则较短的序列是较小的(较小的)序列。
根据您的具体情况: t1.hour
与t2.hour
进行比较。如果它们相等,则会将t1.minute
与t2.minute
进行比较。如果那些相等,则会将t1.second
与t2.second
进行比较。一旦存在不平等,就会返回。
答案 1 :(得分:2)
(t1.hour, t1.minute, t1.second)
和(t2.hour, t2.minute, t2.second)
是元组。来自docs:
使用相应元素的比较,按字典顺序比较元组和列表。
意味着首先比较t1.hour
和t2.hour
,然后是分钟,然后是秒。
答案 2 :(得分:1)
来自Python documentation: 序列类型也支持比较。特别是,通过比较相应的元素,按字典顺序比较元组和列表。
答案 3 :(得分:-1)
它只是比较元组。在终端上做(2,3,4) > (1,2,3)
,你就明白了。使用元组比较和元组比较规则将变得非常明显。