2014-02-19 62 views
0

我目前經過幾部分工作由Allen B.唐尼「Think Python」,我無法理解的解決問題的第16.1節:比較先進的Python「認爲Python」

編寫一個名爲is_after的布爾函數,其中包含兩個時間對象 t1和t2,如果t1按照時間順序依次爲t2,則返回True,否則返回False 。挑戰:不要使用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

謝謝大家!我知道這是一件簡單的事情,它只是在那裏躲過我一分鐘。 – Nitax

回答

3

Read the docs here for an explanation

序列對象可以與具有相同序列類型的其他對象。比較使用了詞典排序:首先比較前兩項,如果它們不同,則確定比較結果;如果它們相等,則比較下兩個項目,等等,直到任何一個序列被耗盡。如果要比較的兩個項目本身是同一類型的序列,則字典對比將遞歸執行。如果兩個序列的所有項目比較相等,則序列被認爲是相等的。如果一個序列是另一個序列的初始子序列,則較短的序列是較小(較小)的序列。

您的具體情況:t1.hour是針對t2.hour比較。如果它們相等,則將t1.minutet2.minute進行比較。如果那些相等,則將t1.secondt2.second進行比較。只要有不平等,就會返回。

2

(t1.hour, t1.minute, t1.second)(t2.hour, t2.minute, t2.second)是元組。從docs

元組和列表字典順序使用相應的元件的比較比較。

意思是說第一個t1.hourt2.hour被比較,然後是分鐘,然後是秒。

-1

它只是比較元組。做一個(2,3,4) > (1,2,3)在終端上,你會明白。玩弄元組比較和元組比較的規則將變得非常明顯。

1

來自Python documentation: 序列類型也支持比較。具體來說,元組和列表通過比較相應的元素按字典順序進行比較。