2016-12-14 2 views
0

Я написал простую функцию для извлечения трех выходов из строки. Когда я хочу использовать возвращаемое значение в других функциях, порядок изменяется. Например:Почему иногда порядок возвращаемого значения функцией изменяется в python?

def parsetrack2(trackstr): 

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

    return{cardnumber,expiryyear,expirymonth} 

Когда я хочу передать cardnumber и expiryyear к другой функции, иногда заказать изменения и другие времена, это правильно? Почему это?

Как его изменить, чтобы предотвратить это изменение?

ответ

2

Это происходит потому, что вы возвращаете набор вместо списка/кортежа. (Комплекты не сохранить порядок элементов, в то время как списки/кортежей делает)

Просто измените:

return{cardnumber,epxiryyear,epxirymonth} 

к:

return(cardnumber,epxiryyear,epxirymonth) 

Тогда порядок результат останется прежним.

+4

Фактически, вы возвращаете комплект, который также не имеет порядка. – zemekeneng

+2

Это не 'dict', это' set'. Кроме того, как правило, при возврате нескольких значений я обычно не разбираюсь с parens; Я использую parens, когда я создаю структуру данных, но в этом случае тот факт, что Python реализует несколько возвращаемых значений как 'tuple', не имеет значения (вызывающий должен распаковывать их в любом случае), поэтому я бы просто пошел с' return 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 
Смежные вопросы