Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 15, 2015 12:14:18

andrey.mezhov
Зарегистрирован: 2015-04-15
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

должен быть false но почему-то true???

Доброго времени суток!
Только начал изучение замечательного языка (по книге Саммерфилда)
и столкнулся с небольшим непониманием
если вводить в Shell:

x="str str"
y="str str"
x is y
#то получится как по книге false
но если вводить в текстовом файле, а потом подать на исполнение
x="str str"
y="str str"
print(x is y)
# то получается true
Помогите разобраться в чем разница, а то уж очень хочется разобраться прежде чем идти дальше
P.S. работаю в IDLE с оф. сайта

Офлайн

#2 Апрель 15, 2015 12:45:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

должен быть false но почему-то true???

Он, когда файл запускает, сначала его компилирует. Видимо, тогда-то он и замечает одинаковые строки и оптимизирует код, сохраняя их как одну.

В любом случае, через is строки не сравниваются, используй == или != .



Отредактировано py.user.next (Апрель 15, 2015 12:46:15)

Офлайн

#3 Апрель 15, 2015 12:56:10

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

должен быть false но почему-то true???

andrey.mezhov
В книге Марк Лутц - Изучаем Python (4-е изд. 2011), прочитай на странице 203 “Разделяемые ссылки и равенство”. Это как раз на эту тему.

Офлайн

#4 Апрель 15, 2015 13:06:39

a.medveditskov
Зарегистрирован: 2015-02-15
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

должен быть false но почему-то true???

Странно, однако… У меня и так и эдак получается “True”?

Офлайн

#5 Апрель 15, 2015 13:17:23

andrey.mezhov
Зарегистрирован: 2015-04-15
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

должен быть false но почему-то true???

py.user.next
Он, когда файл запускает, сначала его компилирует. Видимо, тогда-то он и замечает одинаковые строки и оптимизирует код, сохраняя их как одну.В любом случае, через is строки не сравниваются, используй == или != .
это я понял, просто в книге пример в shell сначала сравнивается через is а потом через == и !=
хотел разобраться почему… за ответ спасибо!
alex925
andrey.mezhovВ книге Марк Лутц - Изучаем Python (4-е изд. 2011), прочитай на странице 203 “Разделяемые ссылки и равенство”. Это как раз на эту тему.
спасибо большое, почитаю Лутца
a.medveditskov
Странно, однако… У меня и так и эдак получается “True”?
Бывает и такое если в одном и том же окне shell производить манипуляции, но если заново в shell переопределить x и y, то получится false. у меня получался…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version