Комментарии 26
Использовать "О" в качестве имени переменной — это чистое зло. Помню как в бейске или паскале был ноль перечёркнут вот как от таких вот недоразумений.
print(_._)
О это же оператор задницы, в Scala есть почти такой же: map(_,_)
.
Что-то не припомню в скале такого оператора. Там конечно можно для коллекции написать что-то типа .reduce(_ + _)
или .map(_._1)
, но ни в том, ни в другом случае это конечно никакой не оператор.
В основном всё было pythonic way
Это не те wtf'ы, которые обычно ожидают вас в Питоне. Просто совсем не те. Такие вещи и без линтера видно — фигня написана.
А вот это пример wtf'а настоящего:
>>> a={ 1: 'first', True: 'second'}
>>> a[1]
'second'
Всё понятно почему, но дикий wtf.
Потому, что секонд перезаписал фест?
>>> hash(1)
1
>>> hash(True)
1
>>> True + True
2
Или WTF что оно так реализовано?
In [128]: {True: 'yes', 1: 'no', 1.0: 'maybe'}
Out[128]: {True: 'maybe'}
Это уже не так логично.)
>>> a = {True: 'yes', 1: 'no', 1.0: 'maybe'}
>>> a[True]
'maybe'
>>> a[1]
'maybe'
>>> a[1.0]
'maybe'
>>> a.__str__()
"{True: 'maybe'}"
Все три хешуются в одно и то же значение, стринг репрезентация ключа будет по первому, который попал в словарь, в данном случае класс булин.
Признак WTF — пока причин не знаешь, кажется ахинеей, а когда причины знаешь, они не кажутся обоснованными. Кстати, особый wtf тут доставляет то, что (1 is True) == False. Т.е. id у них разные, классы у них разные, а хеши у них почему-то одинаковые.
Я специально самый wtf случай приводил. В целом у питона умеренно строгая типизация, которую делают строже в новых версиях. О преимуществах и недостатках динамической типизации можно долго дискутировать. Недостатки — вот такие wtf'ы, преимущества — обычно в районе произвольного числа аргументов, интраспеции и 'everything is an object, even 'type' is an object'.
А вы, вольные жители Python королевства, встречались с подобной черной магией в вашем коде?Почти все эти примеры не то, что встретить в коде, их даже выдумать сложно.
Чистое зло Python