Помните, что сопряженное присваивание не является «особенностью» Python. Если вы немного знаете о Python, это то, о чем вы уже знаете, но вы, возможно, не знаете, что знаете. Когда вы кладете следующее в консоли питона:
>>> 'a', 'b'
Что вы получаете взамен является:
('a', 'b')
Другими словами, кортеж. В вашем примере,
self.a, self.b = self.b, self.a+self.b
, что вы действительно делаете:
(self.a, self.b) = (self.b, self.a+self.b)
- Создать кортеж, который содержит значение self.b и значение self.a + self.b , (Кортеж справа.)
- Создайте кортеж, содержащий self.a и self.b. (Левый кортеж.)
- Чтобы создать этот левый кортеж, создайте новый экземпляр self.a и self.b для этого нового кортежа. Их старые ценности больше не имеют значения: они находятся во временном правом кортеже.
- Присвоить значение 0 переменной левого кортежа значение 0 правильного кортежа.
- Назначить значение 1 переменной левого кортежа в значение 1 правого кортежа.
- Теперь, когда назначены обе переменные левого кортежа, удалите оба кортежа. Новые переменные остаются с новыми значениями.
Так, например, вы можете сделать:
>>> a, b = 1, 2
>>> a, b
(1, 2)
>>> a, b = b, a
>>> a, b
(2, 1)
Есть еще временные переменные, участвующие под капотом, но вы, программист, не приходится иметь дело с ними.
Простой достаточно. Спасибо за разъяснения. – jimmyc3po
Это приведет к тому, что 'self.b' будет умножен на 2, а не будет суммой двух переменных. –
Исправить. Если две строки были выполнены последовательно, произойдет неправильное. Я коротко объяснил это в своем ответе и Марк Байерс более подробно в своем. –