Я вообще не понимаю мотивации доброхотов, которые подсказывают решения — «а давайте нейронными сетями, а давайте генетическим алгоритмом, а давайте префиксным деревом». Этим людям не нужны 1000-3000$? Зачем вы помогаете прямым конкурентам? -_-
Но ссылки и указатели отличаются семантически. Да, ссылки, как правило, реализованы через указатели, но это не значит, что они взаимозаменяемы. Ну и, если вернуться к оператору is, то проблема лишь в том, что из-за особенностей реализации он сравнивает указатели, а не ссылки. Это не значит, что это правильно — просто у авторов CPython так получилось. Больше, насколько мне известно, указатели в Python себя не проявляют — за исключением лишь функции id().
Над ссылкой не определена арифметика указателей, плюс ссылки имеют значение с точки зрения сборщиков мусора. Указатель это просто число, адрес в памяти.
Для иммутабельных типов (чисел, строк, NoneType и т.д.) понятие «ссылки» не имеет смысла, т.к. не определено, что такое экземпляр иммутабельного типа — у них бывают только значения. Поэтому is сравнивает именно что указатели, хоть это и является дырявой абстракцией.
Никогда не используйте «is» в качестве строкового сравнения.
>>> a = 'a' * 100
>>> b = 'a' * 100
>>> a == b
True
>>> a is b
False
Это identity-оператор, он проверяет на равенство указатели, а не значения. И работать как оператор сравнения может исключительно случайно, если обе строки были объявлены как строковые литералы или неявно интернированы.
А можно рассказывать истории о Русском Превосходстве в каком-нибудь другом, специально предназначенном для этого месте? Это все-таки коллективный блог о программировании. Пожалуйста.
Нет, я понимаю, о чем вы. Можно и в Python сделать re.compile("foobar"). Просто автор ищет регулярки /в перловом (?:стиле)/ugi, о чем он и пишет в начале статьи.
А почему именно регуляркой искать, почему не парсить конечным автоматом? Будет ведь проще даже не на порядок, а на два, и, в отличие от этой регулярки, потом еще и поддерживать можно будет.
is, то проблема лишь в том, что из-за особенностей реализации он сравнивает указатели, а не ссылки. Это не значит, что это правильно — просто у авторов CPython так получилось. Больше, насколько мне известно, указатели в Python себя не проявляют — за исключением лишь функцииid().isсравнивает именно что указатели, хоть это и является дырявой абстракцией.Это identity-оператор, он проверяет на равенство указатели, а не значения. И работать как оператор сравнения может исключительно случайно, если обе строки были объявлены как строковые литералы или неявно интернированы.
__hello__и__phello__— это не «пасхальные яйца», а часть юнит-тестов python для проверки поиска замороженных модулей и пакетов.Ну и вы же знаете, что
love = this— это обычныйNameError("name 'this' is not defined")без философии, да?re.compile("foobar"). Просто автор ищет регулярки/в перловом (?:стиле)/ugi, о чем он и пишет в начале статьи.