Другие объяснили, как оценивается выражение, о котором вы спрашиваете.Важно знать, что если первый операнд оператора «и» оценивается как ложный, второй никогда не оценивается, потому что результат «и» всегда ложен, если один операнд ложен, и если вы знаете первыйоперанд ложен, тогда все «и» ложно, и вам не нужно оценивать второе.Это называется «короткое замыкание» и применяется к «или», а также к «и» (за исключением того, что «или» всегда истинно, когда любой операнд имеет значение «истина», поэтому второй операнд оценивается только тогда, когда первый операнд имеет значение «ложь»).
Другая вещь, которую вам нужно знать, это то, что результатом всей операции «и» является значение последнего оцененного операнда.Поскольку вещи, отличные от буквальных констант True и False, считаются логически истинными или ложными, этот факт (в сочетании с коротким замыканием) можно использовать в качестве замены операторов «если» в некоторых ситуациях, и вы иногда увидите, что он используется таким образом,
Например, "x или y" оценивается как x, если x истинно, но в y, если x ложно.Иногда это используется для предоставления значений по умолчанию для пропущенных значений:
name = raw_input("Enter your name: ") or "dude"
print "Hello, %s!" % name
Если вы ничего не вводите в приглашении, просто нажмите Enter, возвращаемое значение raw_input - пустая строка, "", котораясчитается ложным.Поскольку левая ветвь «или» ложна, она не закорачивается, а правая ветвь оценивается, поэтому результатом «или» является «чувак».Если вы введете значение в приглашении, правая ветвь никогда не будет оценена из-за короткого замыкания, и поэтому значение «или» будет тем, что вы ввели.
Многие люди считают, что нужно использовать Booleanоператоры, таким образом, в плохом стиле, теперь, когда в Python есть «x, если y еще z», но это конкретное использование кажется мне достаточно читабельным.(Но это только об одном!) «Значение это или то, если оно пустое».Сравните это со следующим:
name = raw_input("Enter your name: ")
name = name if name else "dude"
print "Hello, %s!" % name