Комментарии 10
Погуглил: для строк в Питоне (как и в Java) есть явный вызов «intern», который позволяет потом предсказуемо сравнивать такие строки по ссылке.
Да, совершенно верно:
>>> import sys
>>> a = "hello!"
>>> b = "hello!"
>>> a is b
False
>>> a = sys.intern("hello!")
>>> b = sys.intern("hello!")
>>> a is b
True
Но для этого необходимо явно интернировать строки
Ну да. А тех, кто их сравнивает на «is» (или на == в Java) без предварительного интернирования, необходимо больно бить по рукам.
Впрочем, такое сравнение строк – довольно экзотическая процедура (зачем-то понадобилось резко ускорить сравнение). По сути, это случай, когда строка используется в качестве символа (токена). Обычно для таких случаев вообще удобно завести мапу, которая преобразует строку в значение из enum.
Впрочем, такое сравнение строк – довольно экзотическая процедура (зачем-то понадобилось резко ускорить сравнение). По сути, это случай, когда строка используется в качестве символа (токена). Обычно для таких случаев вообще удобно завести мапу, которая преобразует строку в значение из enum.
Блин, картинка из под ката не оказалась в самой статье пришлось возвращаться %) ненадо так…
с картинки:
Это же не верно. Я только из за этого и зашел, думал будет тут)) да и всё остальное тоже true.
Но это так, чисто к самой картинке, а не к статье.
было бы нагляднее не результат выводить отдельным блоком, а прямо там как и положено в тестах, выполнять проверку со значением которое должно. Вывод результатов отдельно хорошо, но так, сразу во время просмотра кода было бы понятно. Можно было сразу в pytest завернуть всё)
с картинки:
290 is 290 #False
Это же не верно. Я только из за этого и зашел, думал будет тут)) да и всё остальное тоже true.
Python 3.9.2 (tags/v3.9.2:1a79785, Feb 19 2021, 13:44:55) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> 290 is 290
True
>>> a, b = "hi", "hi"
>>> a is b
True
>>> a == b
True
Но это так, чисто к самой картинке, а не к статье.
def test_str():
было бы нагляднее не результат выводить отдельным блоком, а прямо там как и положено в тестах, выполнять проверку со значением которое должно. Вывод результатов отдельно хорошо, но так, сразу во время просмотра кода было бы понятно. Можно было сразу в pytest завернуть всё)
Интересно.
И этот язык используется для обучения?
// Где ты старый добрый Perl?
Не особенно понятно, кто вообще в здравом уме будет сравнивать строки оператором is? Кто-то знаком с подобной практикой? Я вот сколько кода не смотрел, и профессионального и индусского, не припомню, чтобы такое видел. А в таком случае для чего подобное исследование? Это все равно, что разбираться, почему сравнение строк на C нельзя выполнять сравнением указателей. Но никто для этой цели на сях и не делает типа
s1 = s2 = "hello";
if (&s1 == &s2) { ... }
Ибо, как говорится, на что козе укулеле?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Python: неочевидное в очевидном