«if var и var2 == getSomeValue ()» в python - если первый равен false, оценивается ли второй оператор? ' - PullRequest
5 голосов
/ 03 июня 2011

У меня есть такой код:

if var:
    if var2 == getSomeValue()

Это может быть в одном выражении.

if var and var2 == getSomeValue():

... но getSomeValue() можно вызвать, только если var - True.

Итак, при вызове if var and var2 == getSomeValue() оба интерпретатора оцениваются или оценка останавливается на var, если False? Где я могу найти эту информацию в документации по Python? (Я не знал, что искать ...: /)

Ответы [ 6 ]

10 голосов
/ 03 июня 2011

Это называется коротким замыканием, и Python делает это, так что вы хорошо.

ОБНОВЛЕНИЕ: Вот краткий пример.

>>> def foo():
...     print "Yay!"
... 
>>> if True and foo() is None:
...     print "indeed"
... 
Yay!
indeed
>>> if False and foo() is None:
...     print "nope"
... 

ОБНОВЛЕНИЕ 2: Помещение соответствующего PEP (308) в мой ответ, чтобы оно не упускалось из виду в превосходном комментарии @Somebody все еще использует вас MS-DOS.

2 голосов
/ 03 июня 2011

Если var равно False, оценка прекращается.

См. Раздел Поведение при коротком замыкании в PEP 308 .

2 голосов
/ 03 июня 2011

Второй элемент не оценивается - вы можете проверить это с помощью простой программы:

def boo():
  print "hi"
  return True

a = False
b = True

if a and b == boo():
  print "hi2"

Запуск его не дает вывода, поэтому вы можете видеть, что boo() никогда не вызывается.

1 голос
/ 04 июня 2011

Re " Я не знал, что искать "

Вам не нужно искать при наличии индекса:

Перейдите на домашнюю страницу Python . Нажмите последовательно

  • ДОКУМЕНТАЦИЯ
  • Текущие документы
  • индекс (он находится в верхнем правом углу)
  • A

Прокрутите вниз, пока не увидите

and
    bitwise
    operator

Вы не хотите bitwise, нажмите operator.

Если вы работаете в Windows, у вас есть руководства на вашем компьютере с достаточно приятным графическим интерфейсом. Проверьте панели Содержание / Указатель / Поиск / Избранное в верхнем левом углу.

1 голос
/ 04 июня 2011

В документации Python говорится, что and и or имеют короткое замыкание, поэтому нет, var2 == getSomeValue() не будет оцениваться, если var равно false.

1 голос
/ 03 июня 2011

Оценка getSomeValue не будет оцениваться:

var = False
if var and foo():
   print "here"
else:
   print "there"

def foo():
   print "In foo"
   return False
...