Python: логические операторы как функции - PullRequest
0 голосов
/ 02 августа 2020

Я создаю простой парсер, который должен уметь читать некоторые логические c и арифметические c, компилировать его в AST, а затем оценивать его. Пытаясь сделать это без использования зла eval, я наткнулся на этот ответ .

Затем я понял, что встроенная operator библиотека имеет функции почти для всего, кроме логических and и or, существуют только побитовые. Удивительно, но логичный not тоже существует. Почему отсутствуют and и or? Почему not, а не and и or? И, чтобы следовать упомянутому выше ответу, какую функцию я должен использовать для этих двух операторов?

PS: Я проверял python3, но похоже, что та же библиотека в python2 имеет ту же проблему.

1 Ответ

0 голосов
/ 02 августа 2020

Вы можете реализовать логический эквивалент побитовых операторов, используя operator.truth для преобразования объекта в его bool() значение и затем применяя побитовый оператор:

from operator import truth, and_, or_


def logical_and(a, b):
    return and_(truth(a), truth(b))

def logical_or(a, b):
    return or_(truth(a), truth(b))

print(logical_and([], ''))
print(logical_or([], 'x'))

Результат :

False
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...