У меня есть скрипт Python, который я запускаю, который проверяет соединение двух условий, один из которых легко проверить, а другой жесткий. Скажем, я пишу его как easy_boole and hard_boole
в Python. Будет ли переводчик всегда проверять сначала easy_boole
, а затем вернуть False
, если easy_boole == False
? Оптимизирован ли интерпретатор в целом для того, чтобы как можно быстрее разрешить подобные заявления?Булевы выражения в Python
ответ
Да, оба and
и or
являются так называемыми операторами короткого замыкания. Оценка выражения and
завершается, как только значение является ложным, оценка выражения or
заканчивается, как только значение является правдивым.
Вы можете найти соответствующую документацию here.
Вот кусок кода, с помощью которого вы можете наблюдать такое поведение самостоятельно:
def fib(n):
if n <= 2:
return 1
return fib(n-1) + fib(n-2)
print(False and fib(100)) # prints False immediately
print(True and fib(100)) # takes very, very long
print(fib(100) and False) # takes very, very long
Так с этим в виду, всегда используйте easy_boole and hard_boole
.
выражения х и у сначала вычисляет й; если x ложно, его значение равно ; в противном случае y вычисляется, и полученное значение возвращает .
Так до тех пор, как это x
False
, выражение будет оцениваться с False
Да, python оценивает, если утверждения лениво. Например, в следующем коде:
if f() and g():
print("GOOD")
else:
print("BAD")
интерпретатор Python сначала проверяет F() заявление и если е() ложна, она будет немедленно перейти на другое заявление.
Просто открыть REPL и попробовать:
>>> False and 1/0
False
>> True or 1/0
True
>>> False or 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
Это означает, что Python действительно оценивает логические операторы лениво.
P.S. Это duplicate
- 1. с нетерпением оценивая булевы выражения в Python
- 2. Выбор булевы выражения
- 3. C# Булевы выражения
- 4. Простые булевы и выражения
- 5. Упростите эти булевы выражения?
- 6. Булевы выражения на C
- 7. Булевы выражения в сценариях оболочки
- 8. Булевы выражения оптимизации в Java
- 9. Булевы выражения для элементов в списках
- 10. Python 3 булевы
- 11. Булевы перезаписываются в python?
- 12. Булевы операторы в Python
- 13. Булевы и условные выражения в порядке
- 14. Булевы выражения в XPath чувствительны к регистру?
- 15. Как проверить булевы выражения в VBScript?
- 16. булевы выражения в SQL Select списка
- 17. булевы выражения в XSLT выберите заявления
- 18. Python 3.5 - Булевы в выражениях
- 19. Любые хорошие булевы выражения упрощения там?
- 20. Как следует писать булевы выражения на PHP?
- 21. булевы выражения: Функция не возвращает ожидаемый результат
- 22. Как отделить булевы выражения от операторов (JAVA)?
- 23. Булевы параметры для python 3
- 24. Как булевы отформатированы в Строках в Python?
- 25. Булевы в выражениях If в Python
- 26. Булевы операции
- 27. Если заявление в Python (вложенные булевы операторы)
- 28. Почему эти булевы работают в Python?
- 29. листать булевы значения в списке Python
- 30. Объединение 3 булевы маски в Python
Да. Это коротко. –