2012-01-11 4 views
10

мне было интересно, почему
True and []
возвращает [] вместо ложногоВыход Истинные и []

Является ли выражение синтаксический сахар?

+0

очень хороший вопрос, я никогда не знал. У меня уже есть планы этой применимости в некоторых аспектах моего кода, где True situaion потребовалось бы вернуть пустой список. Вы видите, что строка False и [], она возвращает false. nice .. :) –

ответ

17

Ответ найден на 5.10. Boolean Expressions:

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

2

Этот синтаксический сахар иногда используется в качестве ternary operator в Python

C++: someVar = someCondition ? valueIfTrue : valueIfFalse; 
Python: someVar = someCondition and valueIfTrue or valueIfFalse 

Edit: Оказывается, согласно комментариям :), это является одним из основной ловушки в Python и должно быть заменено

someVar = valueIfTrue if condition else valueIfFalse 
+3

Обратите внимание, что они не эквивалентны, в версии python есть gotcha: Если 'valueIfTrue' оценивает значение' False', будет возвращено значение 'valueIfFalse', будет ли' someCondition' 'True' или' False' , Используйте 'someVar = valueIfTrue, если someCondition else valueIfFalse' вместо этого, чтобы избежать этой ловушки. –

+0

Не работает, если значение valueIfTrue оценивается значением False. Тогда лучше использовать 'valueIfTrue, если someCondition else valueIfFalse' (начиная с 2.5). BTW: '? : 'первоначально происходит от C, а не от C++. – glglgl

+1

1. Это не синтаксический сахар. Это просто ... синтаксис. (иначе: что это за сахар?). 2. 'a и b или c' в Python НЕПРАВИЛЬНО. Он мог бы оценить 'c', когда вы этого не хотели. – Celada

Смежные вопросы