Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Присвоение значений в Python. Различие способов

#python


Почему получаются разные результаты в 2-х случаях?

Пример 1:

A = 1
B = 2
C = 3
D = 4
E = 5
F = 6

A,B,C,D = E,F,A,B
print A,B,C,D,E,F


Результат 1:


  5 6 1 2 5 6


Пример 2:

A = 1
B = 2
C = 3
D = 4
E = 5
F = 6

A = E
B = F
C = A
D = B

print A,B,C,D,E,F


Результат 2:


  5 6 5 6 5 6


В каком порядке, в первом примере происходит присвоение переменных?
    


Ответы

Ответ 1



E,F,A,B даёт кортеж (5,6,1,2), который к оригинальным переменным уже не имеет никакого отношения и никак с ними не связан. foo = E,F,A,B print(foo) # => (5, 6, 1, 2) E = -777 print(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 = 3 a, b, c = range(3) # a = 0, b = 1, c = 2 a, 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 Второе число: 4 3 4

Комментариев нет:

Отправить комментарий