В чем причина выхода? - PullRequest
       21

В чем причина выхода?

1 голос
/ 26 сентября 2019

Вход :

x, y = 20, 60
y, x, y = x, y-10, x+10
print(x, y)

Выход :

50 30

Что я ожидал ?

  • x = 20

  • y = 60

  • y = x = 20

  • x = y - 10 = 20 - 10 = 10

  • y = x + 10 = 20

Ожидаемый результат :

10 20

Почему это не так?Это потому, что сначала вычисляются выражения, а затем переменной присваивается значение?

1 Ответ

6 голосов
/ 26 сентября 2019

Правая сторона определяется полностью перед левой.Затем левая сторона оценивается слева направо.

x, y = 20, 60
# x = 20, y = 60

# ----------------------

y, x, y = x, y-10, x+10
# Evaulate the right first:
# x, y-10, x+10 = 20, 50, 30
# So now we have
# y, x, y = 20, 50, 30

# Now it goes left to right so:
# y = 20
# x = 50
# y = 30 --> note this overwrote the first y assignment

print(x, y)

Таким образом

50 30
...