В состоянии ИЛИ, которое сторона сначала оценивает в python?

if cpu_expensive_condition() or simple_condition():
        do_something()

из двух условий в операторе OR в приведенном выше коде python, который будет оцениваться первым?, и является ли обязательным, чтобы оба были оценены?

+4
источник поделиться
4 ответа

Выражение x or y сначала оценивает x; если x истинно, возвращается его значение; в противном случае y вычисляется и возвращается возвращаемое значение.

Цитата из Справочник по языку Python

+13
источник

Python оценивает слева направо, и обе стороны не нуждаются в оценке. Рассмотрим следующий пример.

def left(x):
    print 'left'
    return x

def right(x):
    print 'right'
    return x

if left(False) or right(False):
    print 'Done'

if left(True) or right(True):
    print 'Done'

Это приведет к следующему выводу:

left
right #This is where the first if statement ends.
left
Done  #Only the left side was evaluated
+3
источник

В соответствии с Логические операции - и, или, не в документации Python:

Это оператор короткого замыкания, поэтому он оценивает только второй аргумент, если первый - False.

Так что cpu_expensive_condition() всегда будет оцениваться. simple_condition() будет оцениваться только тогда, когда cpu_expensive_condition() возвращает False (или что-то, что оценивается как False, например 0 или '' или None).

Смотрите также: Поддерживает ли Python короткое замыкание?

+2
источник

Python выполняет оценку короткого замыкания. Конечно, первое утверждение будет оценено первым. Второй будет оцениваться только в том случае, если первый False или false-ish.

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос