Ivan
У тебя iPhone?
обязательно
Alexander 🐕
Впрочем, в Android не JVM
Alexey
и вся jvm
Джава лучше питона =)
Alexander 🐕
Тем не менее, там Java
Alexander 🐕
то ли дело гошечка
Гошечка не офигеть как сильно отличается от JVM в плане рантайма
Ivan
Тем не менее, там Java
Это объясняет необходимость пихать в смартфоны терабайты RAM
Pavel
Хуже питона только PHP
Я вчера только узнал что логические операторы в питоне некоммутативны, а в пшп все в порядоке с этим. Как вообще можно сравнивать питон с грамотным элегантным и эффективным пшп ?
Dmitrii
Вот это наброс
Dmitrii
Надо протереть монитор
Pavel
Вот это наброс
Да я сам прихуел. Ты только подумай, там a and b не равно b and a
Dmitrii
А как это?
Georgiy
вы js видели ?
Pavel
вы js видели ?
в js то же самое кстати
Pavel
В гитхабе даже есть тикет к проекту на основе питона, какая то научная библиотека, типа ой у вас тут бага, бинарные операции некоммутативны. А им отвечают "да все в порядке, это просто так питон работает". 😂😂
Alexey
Да я сам прихуел. Ты только подумай, там a and b не равно b and a
Ну оно даже в Си так. Условия часто short circuited. Иначе бы все проверки типа (foo != NULL) && (foo.bar ...) шли по пизде.
Alexander 🐕
Абажжите, а в PHP разве не lazy evaluation будет?
Pavel
Абажжите, а в PHP разве не lazy evaluation будет?
lazy, но при этом итоговый результат будет выдан в виде bool всегда
Alexey
Не, в си к счастью все нормально работает. 3 && 2 и 2 && 3 равны.
В моём примере они не очень равны =) если их поменять местами то получится сегфолт =)
Pavel
процесс вычисления каждого операнда не имеет отношения к коммутативности, это другое
Tadeusz
Dmitrii
Bogdan (SirEdvin)
то ли дело гошечка
На которой только микропроекты писать?
Pavel
Я про то что выдаст (3 && 2) == (2 && 3) в нормальных си и пшп и что выдаст (3 and 2) == (2 and 3) в питоне =)
Dmitrii
Но ты же понимаешь что в PHP and это аналог к & ?
Dmitrii
Разве не?
Bogdan (SirEdvin)
Ем... потому что в питоне нормальные типы и есть бул?
Pavel
Мы не про побитовые операторы а про логические
Bogdan (SirEdvin)
А как вы хотите, чтобы оно работало?
Анатолий
Не скучайте там.
Alexey
Ну коммутативность это свойство любого бинарного оператора =) она кстати от порядка выполнения тоже зависит.
Dmitrii
(3 and 2) == (2 and 3) — в питоне выдает false а в php — true
Bogdan (SirEdvin)
Раз в си костыль, то пусть все его тащат к себе?
Анатолий
а в вашем си переменные по умолчанию видимы во вложенном контексте. как у джаваскрипт-господ?
Bogdan (SirEdvin)
Alexey
Нет, не так. Например, оператор "больше"
Я к тому что она либо есть либо нет. Понятно что не всё коммутативно =)
Pavel
Так падажжите
Pavel
Вы запутались в терминологии
Pavel
мы говорим про логические операторы, то есть функции которые принимают на вход кортеж из bool значений и на выходе выдают bool
Pavel
https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B8
Alexey
Ну так в питоне оно не выдаёт bool
Pavel
Вот в си есть некое послабление - там разрешено в параметры функции передавать не только bool но приводимое к нему значение. А в петоне посшли еще дальше - там не только на вход принимается не bool, но и на выходе выдается не bool тоже )
Bogdan (SirEdvin)
Но ты же не на булевых переменных это делаешь
Pavel
То есть по сути там логические операторы придуманы какие-то из своего мира, которые принимают разные типы, выдают разные типы, не обладают коммутативностью и вообще что за херня?
Pavel
Как жить то?
Bogdan (SirEdvin)
В си нет послабления, там костыль, потому что не было булевых переменных
Pavel
Так в питоне тоже костыль. Это называется неявный каст.
Pavel
КАСТыль
Pavel
Там 0 и 1 везде неявно считается булом
Georgiy
нет
Georgiy
0 - false, все остальное true
Pavel
И && выдают соответственно 0 и 1
Pavel
Ну да, типа того
Pavel
еще NULL это тоже false
Georgiy
еще NULL это тоже false
потому что NULL это 0 :)
Bogdan (SirEdvin)
Так в питоне тоже костыль. Это называется неявный каст.
какой каст? Там операции над числами и дают они числа. Неявный каст как раз в си, потому, что там все, что не ноль, то true
Alexey
То есть по сути там логические операторы придуманы какие-то из своего мира, которые принимают разные типы, выдают разные типы, не обладают коммутативностью и вообще что за херня?
Если ты оперируешь Boolean типами, то всё ок. Если ты оперируешь другими и хочешь вот такого поведения, то явно кастуй в bool. Всё идеоматично питонно.
Pavel
А то путаница
Pavel
Назовите их питоническими какими-нибудь
Bogdan (SirEdvin)
Это логические операторы над целыми числами, что не так?
Pavel
Это логические операторы над целыми числами, что не так?
Не так то, что у логических операторов в результате вычислений должен получатся либо false либо true
Pavel
либо 0 либо 1
Pavel
Тогда и коммутативность будет соблюдена
Alexey
Не так то, что у логических операторов в результате вычислений должен получатся либо false либо true
Не всегда. У тебя есть множество на входе и множество на выходе. Логика она не только над булевыми множествами определена
Pavel
Нет, результат должен быть из того же множества и все
Нет, результат должен быть из множества {0,1} иначе это никак нельзя назвать алгеброй логики
Pavel
Просто функция, отображение, биективное, сюрьективное, как угодно. Но не логика.
Pavel
См. ссылку выше я скидывал, там же все это написано 🙈