Сравнение объектов встроенных типов в Пайтоне
Некоторым ребятам показалось, что в заметке про «goatse operator» в Перле я поругал этот язык. Это не так, можно прочитать заметку от и до, чтобы в этом убедиться. Мне очень нравится Перл, но это язык не для современного продакшна. Давайте я
В Пайтоне всё что только можно — объект и нет примитивных типов. С объектами можно делать всё что хочется — сравнивать, умножать, производить битовые операции. Чтобы программист мог указать как объекту следует себя вести рядом
In [26]: "Это строка".__eq__
Out[26]: <method-wrapper '__eq__' of str object at 0x10136f770>
In [27]: "Это строка".__ne__
Out[27]: <method-wrapper '__ne__' of str object at 0x10139cf70>Сравнивать между собой можно большинство встроенных типов — список с со словарём, строку с кортежем и так далее. Есть исключения (например, set нельзя сравнить ни с чем, кроме set и frozenset), но их мало. Какой же будет результат сравнения? Давайте попробуем:
In [44]: "">()
Out[44]: False
In [45]: ""<()
Out[45]: True
In [46]: []>()
Out[46]: False
In [47]: []<()
Out[47]: True
In [48]: []<{}
Out[48]: False
In [49]: []>{}
Out[49]: TrueДаже пустые объекты разных типов не равны между собой,
In [52]: [1,2,3,4,5,6]<(0,)>[100000]
Out[52]: TrueНе знаю где это написано в документации, не искал, но я совершенно случайно,
True < {} < [] < object() < "" < () < u""
# b < d < l < o < s < t < uРешение мне кажется, мягко говоря, неудачным, но уж какое выбрали. Я не вижу ничего страшного в том, чтобы сравнение встроенных типов всегда выдавало False (попробуйте сравнить между собой два None) или выдавать исключение при попытке их сравнения (кажется
Моё рабочее место

Роботы меня выживают.
Как вам, жаворонкам, живётся?
Решил провести эксперимент — вставать до конца недели на два часа раньше, в восемь утра. Не экстремально рано, конечно, но для меня, совы, всё же довольно рано. Сегодня встал в первый раз. Пока всё нормально.