LINUX.ORG.RU

Чем «is» отличается от «==» при использовании string?

 


0

2

Почему-то «is» работает очень нестабильно, проходит все возможные тесты, а в реальных условиях «while class.attr is not 'lalala'» перестает работать. Хотя с тест юнитами никаких проблем.

★★★★★

Последнее исправление: steemandlinux (всего исправлений: 2)
Ответ на: комментарий от Bfgeshka

У питонистов от синтаксического сахара уже диабет начинается.

Сахар это конечно та еще дичь, но в питоне его гозардо меньше чем в других скриптовых язычках.

Siado ★★★★★
()
Ответ на: комментарий от Siado

Теперь понял почему при обновлении атрибута оно отваливается.

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от Siado

тест-юнит напрямую обновляет, а код внутри класса.

steemandlinux ★★★★★
() автор топика
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от Siado

Согласись, что непонятно, что is будет сравнивать по адресу, а не значению. Если код просто читаешь (а питон извествен как «формализованный псевдокод»), то ошибиться недолго.

Bfgeshka ★★★★★
()
Ответ на: комментарий от Bfgeshka

Согласись, что непонятно, что is будет сравнивать по адресу, а не значению

Если языка не знаешь - то не понятно. Но таких перлов встречается гораздо меньше чем в других «формализованных псевдокодах» как ты говоришь )

Siado ★★★★★
()
Ответ на: комментарий от Bfgeshka

Согласись, что непонятно, что is будет сравнивать по адресу, а не значению.

У тебя странные представления о понятности.

anonymous
()
Ответ на: комментарий от Bfgeshka

«формализованный псевдокод»

Но это же невозможно в принципе. Псевдокод на то и псевдокод, что позволяет вольности как в естественных языках

Deleted
()
Ответ на: комментарий от Crocodoom

Т.к. пишу только для себя, изучаю по факту. Я тот еще говнокодер.

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от Siado

Например, потому что это (намного) более ресурсоёмко, чем сначала прочитать маны/доки/спеки/агитки/etc

Deleted
()
Ответ на: комментарий от Deleted

Псевдокод на то и псевдокод, что позволяет вольности как в естественных языках

Перл настолько волен, что на нем можно стихи писать. Однако не псевдокод. И считается какбэ наоборот.

Deleted
()
Ответ на: комментарий от Deleted

А не псевдокод только(или по большей части) из-за второго. Т. е. вольности здесь ни при чём

Deleted
()
Ответ на: комментарий от Deleted

Например, потому что это (намного) более ресурсоёмко, чем сначала прочитать маны/доки/спеки/агитки/etc

Может оно и дольше, за-то сразу осваиваешь тесы и на практике понимаешь как оно работает. Мануал если прочесть и не применить - то может в голове какие-то нюансы и не отложиться и придешь к вопросу почему is не так работает, когда продакшен будешь запускать

Siado ★★★★★
()
Ответ на: комментарий от Siado

Мануал если прочесть и не применить

Так это явное ССЗБ. Кстати, хз какая из двух крайностей менее опасна и неприятна: только прочитать или только код написать(написал-запустил-поправил, ага). Я вот на python никогда не писал, но тривиальные конструкции вроде is вопросов не вызывают

Deleted
()
Ответ на: комментарий от Deleted

Я вот на python никогда не писал, но тривиальные конструкции вроде is вопросов не вызывают

Ходят слухи, что существуют такие мастера теории, которые ничего не создавали, но все знают.

Siado ★★★★★
()

О! Интересно! А меня убеждали, что надо php бросить и на python перейти. А в нем тоже граблей хватает, оказывается.

AnonymUser
()
Ответ на: комментарий от Bfgeshka

Я бы не отказался от добавки. Например, какой-нибудь кракозабр в аргументах конструктора, чтобы эти аргументы сразу становились полями объекта:

class Foo:
    def __init__(self, self.bar, self.baz="baz"):
        pass
makoven ★★★★★
()
Ответ на: комментарий от Deleted

Формализованный подход?! Хе-хе Я как-то просматривал свой старый код на PHP (порядком подзабыв уже все) и обнаружил такое в коде:

if ($var2 == 0) $var = 0;

Смотрю на эту строчку и в голове вертится: «Если ботинки - это ботинки, то ботинки это ботинки.»

Думаю, во я маразм-то написал. Убираю строчку, а код не работает.

И вполне закономерно для PHP.

А оказывается, имелось в виду if(empty($var)) = $var = 0;

AnonymUser
()
Ответ на: комментарий от Siado

Calm down. Это контрпример к твоему

за-то сразу осваиваешь тесы и на практике понимаешь как оно работает

Deleted
()
Ответ на: комментарий от AnonymUser

Если ботинки - это ботинки, то ботинки это ботинки

Капитан, перелогинтесь!

Deleted
()
Ответ на: комментарий от makoven

Я написал это, потому особенности языка скриптового уводят от обычного формального восприятия синтаксиса, особенно, когда переключаешься с языка на язык.

AnonymUser
()
Ответ на: комментарий от Bfgeshka

Это прямым текстом написано в документации, что значит непонятно?

VirRaa ★★★
()

Потому что == сравнивает содержимое, а is значение ссылки. Зачем ты вообще полез в is, да ещё какие-то тесты пишешь?

slovazap ★★★★★
()
Ответ на: комментарий от Bfgeshka

непонятно, что is будет сравнивать по адресу, а не значению.

Как это не понятно? Вася и Петя - близнецы. Вася это Петя (вариант с «is», false). Вася такой же, как Петя (вариант с «==», true (пусть и условно)). Это вот даже если просто код читать как текст, не задумываясь что в питоне по сути все является объектами.

micronekodesu ★★★
()

Анонимус неодобряет

RTFM, блджад!

В любом яп свинья погромист найдёт неожиданное поведение.

Всё больше прихожу к мнению, что на собеседованиях на работу собеседуемого (если он метит не в джуниоры) надо спрашивать заковыристые вопросы по синтаксису языка. Тупо чтобы выявить засранцев не читавших маны.

anonymous
()
Ответ на: комментарий от Tanger

Я опечатался, но удалять лень было. Понадеялся на ясновидение форумчан. Сейчас поправлю.

AnonymUser
()

Кстати вопрос, а except: pass является допустимым скажем для проверки атрибута или ключа, или нет?

Siado

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от steemandlinux

Ну технически - да, наверное (я всю конструкцию не видел).

Но это суперговнокод(особенно если не указываешь тип исключения), белые люди используют in и hasattr. Ну или сразу get/getattr.

Scondo
()
Ответ на: комментарий от steemandlinux

Кстати вопрос, а п: pass является допустимым скажем для проверки атрибута или ключа, или нет?

Допустимо, но если ты хочешь проверять ключ в словаре - то тебе проще использовать конструкцию {}.get(value, default_value) если ключа value в словаре нет - то оно вернет default_value

Siado ★★★★★
()
Ответ на: комментарий от Deleted

Вот оне - «современные» языки: все минусы опасных операций лиспа, но без его мощи и няшных смайликов.

anonymous
()
Ответ на: комментарий от Bfgeshka

не суди нас по write-only питонистам, неспособным открыть доку, но резво строчащим бесполезные треды

t184256 ★★★★★
()
Ответ на: комментарий от Siado

хоть официальный тьюториал сначала прочитай, а то так каша и останется

t184256 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.