- 1
- 2
ipdb> Decimal('10000') < "1"
True
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−46
ipdb> Decimal('10000') < "1"
True
myaut 22.09.2016 13:36 # +4
CrashTesterAnusov 22.09.2016 15:32 # −69
BagorCtretora 22.09.2016 20:10 # −66
Проверь
3_14dar 23.09.2016 01:28 # −1
3_14dar 23.09.2016 01:28 # −1
Steve_Brown 22.09.2016 15:20 # −1
huesto 22.09.2016 18:24 # +1
roman-kashitsyn 22.09.2016 15:37 # +3
Строгая типизация, ага. Зачем райзить ошибки, если можно просто вовзращать мусор. Это же не цикл какой-нибудь, чтобы исключения бросать. потому что Напитоноэксперты, откуда взялся True?
roman-kashitsyn 22.09.2016 15:45 # +2
A rich comparison method may return the singleton NotImplemented if it does not implement the operation for a given pair of arguments. By convention, False and True are returned for a successful comparison. However, these methods can return any value, so if the comparison operator is used in a Boolean context (e.g., in the condition of an if statement), Python will call bool() on the value to determine if the result is true or false.
-- https://docs.python.org/2/reference/datamodel.html#specialnames
bormand 22.09.2016 18:14 # +2
З.Ы. Это даже круче чем php'шный strpos, который может вернуть и 0 и FALSE.
huesto 22.09.2016 18:23 # −1
bormand 22.09.2016 18:25 # 0
http://ideone.com/b1LvRv
kurwa-nextgen 22.09.2016 18:44 # −1
bormand 22.09.2016 18:45 # 0
А нахуя тогда оператор __lt__ позвали, да ещё и два раза? :)
Второй раз - а вдруг передумает и True/False вернёт?
kurwa-nextgen 22.09.2016 18:47 # −1
bormand 22.09.2016 18:47 # −1
bormand 22.09.2016 18:52 # 0
roman-kashitsyn 22.09.2016 18:53 # +4
Змееуст
huesto 22.09.2016 18:54 # −5
3_14dar 23.09.2016 01:41 # 0
3_14dar 23.09.2016 01:29 # 0
roman-kashitsyn 22.09.2016 19:46 # +1
Для питона всё же есть существенная разница между сравнением и вызовом __lt__. Сравнение в конечном итоге триггерит вызов PyObject_RichCompare, который уже конвертит результат в бул, вероятно, вызывая в данном случае try_3way_to_rich_compare, который вызывает __lt__, но остаётся недоволен результатом
kurwa-nextgen 22.09.2016 20:09 # −1
roman-kashitsyn 23.09.2016 00:49 # 0
В теории да: в конечном итоге тут должен вызваться default_3way_compare, который тупо сравнивает имена классов И "Decimal" как раз меньше "str". Но без дебаггера сложно сказать точно, а дальше ковыряться в этом говне запала не хватает.
3_14dar 24.09.2016 02:37 # 0
Лол, это тут уже где-то обсуждалось. Можете поискать в тредах где я писал.
kurwa-nextgen 22.09.2016 16:48 # +2
http://stackoverflow.com/a/3270689
barop 22.09.2016 18:30 # +1
UB в моем пистончике
мусор на входе -- мусор на выходе
как в сишечке
kurwa-nextgen 22.09.2016 18:35 # −1
bormand 22.09.2016 18:37 # +1
huesto 22.09.2016 18:55 # −1
kurwa-nextgen 22.09.2016 18:59 # 0
huesto 22.09.2016 19:00 # −1
kurwa-nextgen 22.09.2016 19:04 # +2
inkanus-gray 22.09.2016 19:20 # 0
BagorCtretora 22.09.2016 20:07 # −66
Это хуй
Ленин в кепке
Жри буржуй
Ленин в кепке
Деньги где?
Ленин в кепке
Штык в пизде
voodoodal16 22.09.2016 20:09 # −1
3_14dar 23.09.2016 01:25 # −3
Ла-ла ла-ла ла-ла ла-ла!
kurwa-nextgen 22.09.2016 18:55 # −1
Неправильно. Сравнение любых объектов разных типов - implementation defined. Вот в мане написано https://docs.python.org/2/library/stdtypes.html#comparisons
> Objects of different types, except different numeric types and different string types, never compare equal; such objects are ordered consistently but arbitrarily
А инты к топику вообще отношения не имеют. Не знаю, зачем я про них написал.
3_14dar 23.09.2016 01:38 # −1
Без пруфов, но человек расписал нахуя так было сделано.