мне было интересно, почему
True and []
возвращает [] вместо ложногоВыход Истинные и []
Является ли выражение синтаксический сахар?
мне было интересно, почему
True and []
возвращает [] вместо ложногоВыход Истинные и []
Является ли выражение синтаксический сахар?
Ответ найден на 5.10. Boolean Expressions:
Выражение
x and y
сначала вычисляет х; если x является ложным, его значение возвращается; в противном случае вычисляется y и возвращается полученное значение.
Этот синтаксический сахар иногда используется в качестве ternary operator в Python
C++: someVar = someCondition ? valueIfTrue : valueIfFalse;
Python: someVar = someCondition and valueIfTrue or valueIfFalse
Edit: Оказывается, согласно комментариям :), это является одним из основной ловушки в Python и должно быть заменено
someVar = valueIfTrue if condition else valueIfFalse
Обратите внимание, что они не эквивалентны, в версии python есть gotcha: Если 'valueIfTrue' оценивает значение' False', будет возвращено значение 'valueIfFalse', будет ли' someCondition' 'True' или' False' , Используйте 'someVar = valueIfTrue, если someCondition else valueIfFalse' вместо этого, чтобы избежать этой ловушки. –
Не работает, если значение valueIfTrue оценивается значением False. Тогда лучше использовать 'valueIfTrue, если someCondition else valueIfFalse' (начиная с 2.5). BTW: '? : 'первоначально происходит от C, а не от C++. – glglgl
1. Это не синтаксический сахар. Это просто ... синтаксис. (иначе: что это за сахар?). 2. 'a и b или c' в Python НЕПРАВИЛЬНО. Он мог бы оценить 'c', когда вы этого не хотели. – Celada
очень хороший вопрос, я никогда не знал. У меня уже есть планы этой применимости в некоторых аспектах моего кода, где True situaion потребовалось бы вернуть пустой список. Вы видите, что строка False и [], она возвращает false. nice .. :) –