Присвоение значений в Python. Различие способов
📁 python, пример
Почему получаются разные результаты в 2-х случаях?
Пример 1:
A = 1B = 2C = 3D = 4E = 5F = 6A,B,C,D = E,F,A,Bprint A,B,C,D,E,FРезультат 1:
5 6 1 2 5 6
Пример 2:
A = 1B = 2C = 3D = 4E = 5F = 6A = EB = FC = AD = Bprint A,B,C,D,E,FРезультат 2:
5 6 5 6 5 6
В каком порядке, в первом примере происходит присвоение переменных?
E,F,A,B даёт кортеж (5,6,1,2), который к оригинальным переменным уже не имеет никакого отношения и никак с ними не связан.
foo = E,F,A,Bprint(foo) # => (5, 6, 1, 2)E = -777print(foo) # всё ещё => (5, 6, 1, 2)Синтаксис A,B,C,D = — это распаковка (в данном случае кортежа) — последовательно присваивает переменным значения из списка, кортежа или любого другого итерируемого объекта (можно поставить = range(4), например), стоящего после знака равно. А тот кортеж, который стоит справа, уже не имеет к оригинальным переменным никакого отношения. То есть получается что-то вроде:
A,B,C,D = (5,6,1,2)Во втором случае код просто выполняется последовательно как есть и меняет переменные, надеюсь он в пояснениях не нуждается)
Ещё примеров:
a, b, c = [1, 2, 3] # a = 1, b = 2, c = 3a, b, c = range(3) # a = 0, b = 1, c = 2a, b, *l, c = range(5) # a = 0, b = 1, l = [2, 3], c = 4Пример со своим генератором:
def gen(): yield int(input('Первое число: ')) yield int(input('Второе число: '))a, b = gen()print(a, b)Даст:
Первое число: 3Второе число: 43 4 Войдите чтобы оставить ответ