Также замечание относительно левой части: порядок назначений гарантированно соответствует порядку их появления, другими словами:
a, b = c, d
функционально эквивалентен точному (помимо создания t):
t = (c, d) a = t[0] # done before 'b' assignment b = t[1] # done after 'a' assignment
Это имеет значение в таких случаях, как назначение атрибута объекта, например:
classdummy: def__init__(self): self.x = 0
a = dummy(); a_save = a a.x, a = 5, dummy() print(a_save.x, a.x) # prints "5 0" because above is equivalent to "a = dummy(); a_save = a; t = (5, dummy()); a.x = t[0]; a = t[1]"
a = dummy(); a_save = a a, a.x = dummy(), 5 print(a_save.x, a.x) # prints "0 5" because above is equivalent to "a = dummy(); a_save = a; t = (dummy(), 5); a = t[0]; a.x = t[1]"
Это также подразумевает, что вы можете выполнять такие вещи, как создание объекта и доступ к нему, используя однострочники, например:
classdummy: def__init__(self): self.x = 0 # Create a = dummy() and assign 5 to a.x a, a.x = dummy(), 5