2016-12-14 43 views
0

我寫了一個簡單的函數來從字符串中檢索三個輸出。當我想在其他函數中使用返回值時,順序會改變。 例如:爲什麼有時函數的返回值的順序因python而異?

def parsetrack2(trackstr): 

    cardnumber, date = trackstr.split('=') 
    expiryyear = date[0:2] 
    expirymonth = date[2:4] 

    return{cardnumber,expiryyear,expirymonth} 

當我想通過cardnumberexpiryyear給另一個函數,有時訂購改變,有時候它是正確的?這是爲什麼?

我應該如何改變它以防止這種變化?

回答

2

發生這種情況是因爲你正在返回一個集合而不是一個列表/元組。 (套不保存元素的順序,而列表/元組一樣)

只要改變:

return{cardnumber,epxiryyear,epxirymonth} 

到:

return(cardnumber,epxiryyear,epxirymonth) 

那麼結果順序將保持不變。

+4

其實,你正在返回一個集合,它也沒有順序。 – zemekeneng

+2

這不是'dict',它是'set'。另外,通常,當返回多個值時,我通常不會打擾父親;我在創建數據結構時使用了parens,但在這種情況下,Python將多個返回值作爲「元組」實現是無關緊要的(調用者應該將其解包),所以我只是用'返回cardnumber,epxiryyear,epxirymonth' – ShadowRanger

1

此:

{item_1, item_2, ...} 

實際上是一組文字(不是字典)。一組是無重複項目的無序集合。因此,返回的項目順序是隨機的。而是這樣做

def func(): 
    return 1, 2, 3 

>>> a, b, c = func() 
>>> a 
1 
>>> b 
2 
>>> c 
3 
相關問題