2016-10-04 3 views
2

БудетИсправлен ли порядок назначения кортежа python?

a, a = 2, 1 

всегда приводят в равной 1? Другими словами, гарантируется ли назначение кортежа слева направо?

Вопрос становится актуальным, если у нас нет только a, но [i], a [j] и i и j могут быть или не быть равными.

+2

Если C++ научил нас чему-либо, это то, что эмпирическое тестирование не является подходящим способом понять разницу между четко определенным, определенным реализацией и неопределенным поведением. Вы должны проконсультироваться со спецификацией языка. Python - это не C++, но есть еще опасные части, например, как маленькие целые числа интернированы, которые могут различаться между интерпретаторами. –

ответ

0

Как это работает:

a, a = 2, 1 
--> a does not exist, create variable a and set value to 2 
--> a already exists, value of a changed to 1 

Если у вас есть различные переменные, это работает точно так же:

a, b, a = 1, 2, 3 
--> a does not exist, create variable a and set value to 1 
--> b does not exist, create variable b and set value to 2 
--> a already exists, value of a changed to 3 
8

Да, это является частью задания языка Python, что назначение кортеж должен принять место слева направо.

https://docs.python.org/2.3/ref/assignment.html

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

Таким образом, все реализации Python должны следовать этому правилу (как подтверждают эксперименты в другом ответе).

Лично я бы все же не решался использовать это, поскольку он кажется непонятным будущему читателю кода.