Python: как обработать?

Не могли бы вы посоветовать, как python работает с несколькими терминами, если?

Например:

   a = 0
   b = 0
   c = 0

   if a == 0 and b == 1 and c == 0:
   # test fails

Я предполагаю, что Python внутренне разбивает тест на 3, если. Но тогда возможны 2 случая:

  • python запускает все 3, если один за другим, и один из них неверен, тест не проходит
  • или python запускается, если один за другим, при первом сбое, если тест не проходит, а остальные, если не выполняются

Как Python запускает этот тест внутри?

Спасибо и с уважением, Хьюго.


person user2786664    schedule 17.09.2013    source источник
comment
Это короткое замыкание... т. е. первое условие, которое не соответствует критериям, приводит к провалу теста...   -  person Jon Clements♦    schedule 17.09.2013
comment
Точнее, это свойство не предложения if, а операторов and/or.   -  person glglgl    schedule 17.09.2013
comment
Спасибо за ваши быстрые ответы   -  person user2786664    schedule 17.09.2013


Ответы (4)


and — это оператор короткого замыкания.

Второй аргумент оценивается, если первый равен True. Аналогично для последующих рассуждений.

person devnull    schedule 17.09.2013

Это не имеет ничего общего с условным предложением, но с логическими операторами and и or. Это операторы короткого замыкания. . Если первое значение равно False, то сразу используется False. В противном случае оценивается второе значение.

Вот хороший пример:

>>> def a():
...     print 'a is running!'
...     return True
... 
>>> def b():
...     print 'b is running!'
...     return False
... 
>>> def c():
...     print 'c is running!'
...     return True
... 
>>> if a() and b() and c():
...     print 'hello!'
... 
a is running!
b is running!

Поскольку b возвращает False, c не запускается, потому что в этом нет необходимости.

person TerryA    schedule 17.09.2013

Второй. and/or являются операторами короткого замыкания - если в этом нет необходимости, второй аргумент не вычисляется. См. документ boolean- операции-и-или-нет.

person Roman Bodnarchuk    schedule 17.09.2013

Python использует «ленивую оценку» для if: см. документацию.

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

person doctorlove    schedule 17.09.2013
comment
Я не уверен, что правильно говорить, что python использует ленивую оценку. ОП, если оператор лениво оценивает условия, да. Правильным термином здесь будет en.wikipedia.org/wiki/Short-circuit_evaluation. - person Roman Pekar; 17.09.2013
comment
из вики: В языках, которые по умолчанию используют ленивые вычисления (например, Haskell), все функции эффективно замыкаются, и специальные операторы короткого замыкания не нужны. - person Roman Pekar; 17.09.2013