Побитовые и логические операторы Python [дубликаты]

Я читаю руководство по торговой платформе на основе Python и рекомендую использование побитовых (~, &, |), а не логических (not, and, or) операторов для объединения логических выражений.

Как и факторы, фильтры можно комбинировать. Объединение фильтров осуществляется с помощью операторов & (и) и | (или).

Есть ли для этого веская причина? Я никогда не видел его раньше. Я не совсем уверен во всех свойствах логических значений в Python, но я уверен, что в C и C++ логические значения представлены целым числом 1 или 0 и могут работать как таковые. Питон похож? Я вижу, как в этом случае могут работать как минимум & и |.

Какова может быть цель использования этих побитовых операторов вместо логических? Это быстрее?


person Luke    schedule 19.08.2017    source источник
comment
Хорошо, что учебник говорит о том, почему он рекомендует это?   -  person Stefan Pochmann    schedule 19.08.2017
comment
Если они рекомендуют вам побитовые операторы вместо обычных логических операторов в условных выражениях, то это проблема.   -  person Christian Dean    schedule 19.08.2017
comment
Это не так. На самом деле это означает, что он считает, что они являются логическими операторами. Like factors, filters can be combined. Combining filters is done using the & (and) and | (or) operators.   -  person Luke    schedule 19.08.2017
comment
для объединения логических выражений: это условно.   -  person Jean-François Fabre    schedule 19.08.2017
comment
@ Люк В этой цитате даже не говорится о логических операторах. Каковы их факторы и фильтр? Может быть, они похожи на массивы numpy, и поэтому они говорят использовать побитовые операторы.   -  person Stefan Pochmann    schedule 19.08.2017
comment
@StefanPochmann Насколько я могу судить, фильтры - это логические выражения. Определяется с помощью >, ==, < и т. д.   -  person Luke    schedule 19.08.2017
comment
@Luke Ну, тогда это действительно звучит так, будто вы должны использовать побитовые. Потому что тогда логические вообще не будут работать.   -  person Stefan Pochmann    schedule 19.08.2017
comment
@Luke Выражения Python не имеют типа, поэтому не существует таких вещей, как логические выражения. Скорее всего, такие вещи, как факторы и фильтры, не являются логическими, но мы не можем сказать наверняка без дополнительного контекста. Выражения, использующие > и т. д., не всегда дают логическое значение.   -  person Stop harming Monica    schedule 19.08.2017


Ответы (1)


Побитовые операторы обычно являются очень неподходящим инструментом для работы. Побитовые операторы не быстрее (на самом деле они должны выполнять больше работы) и имеют другой приоритет, поэтому они привязаны к другим частям более крупного выражения по сравнению с логическими операторами.

Однако в некоторых конкретных платформах побитовые операторы заменяют логические операторы, поскольку к ним можно подключиться. Есть __or__ и __and__ специальные методы, позволяющие управлять возвращаемым значением для | и &, но таких нет хуки для логических операторов (поскольку последний короткое замыкание; оценка обоих выражений для передачи хуку не поможет).

Так что, если в статье говорится о numpy (или фреймворках, производных от numpy, таких как Pandas или Scipy), или инфраструктуре ORM, такой как SQLAlchemy, Peewee или Django, то есть веская причина использовать побитовые операторы.

person Martijn Pieters    schedule 19.08.2017
comment
Я считаю, что у них есть собственная структура, которая тесно интегрирована в платформу. Вы должны использовать онлайн-IDE для разработки с ним, поэтому я подозреваю, что это ответ. Я не знал об этих крючках. Спасибо! Я приму ваш ответ, когда смогу! - person Luke; 19.08.2017
comment
хороший ответ на очень расплывчатый вопрос. Я закрыл как дубликат, возможно, ваш ответ можно было бы объединить с оригиналом, потому что никто не решает проблему так, как вы. - person Jean-François Fabre; 19.08.2017
comment
Похоже, они используют панды quantopian.com/tutorials/getting-started#lesson5 - person ayhan; 19.08.2017
comment
@ayhan Вы имеете в виду quantopian.com/tutorials/pipeline#lesson6 - person Stefan Pochmann; 19.08.2017
comment
@StefanPochmann Да, это страница, которую цитирует OP, но я хотел связать объект данных (и его отношение к серии pandas или DataFrame). - person ayhan; 19.08.2017
comment
@ayhan А, хорошо. Но было неясно, какое отношение страница, на которую вы ссылаетесь, имеет отношение к ОП. Это просто выглядело так, как будто вы без уважительной причины показали случайную страницу в Интернете, на которой говорится о пандах. - person Stefan Pochmann; 19.08.2017
comment
@StefanPochmann Вы правы. Я отредактировал вопрос, включив в него ссылку, которую вы упомянули. - person ayhan; 19.08.2017