George Boole神奇的将逻辑变成了代数,使之可以演算,因此,被叫做布尔代数.而and和or是布尔代数其中的2个符号.
比如
>>False and 2 False >>True and 2 2 >>1 and 1 1
比如电商,顾客要买东西,通过多条件筛选,数据存在mongodb,属性有价格/品牌/尺寸/颜色.
用户可能不设置或设置多个筛选条件,我们要一一判断.
按照一般的写法,应该是:
queryexr = {} if price: queryexr.update({'p':price}) if brand: queryexr.update({'b':brand}) if size: queryexr.update({'s':size}) if color: queryexr.update({'c':color}) dp.collection.find(queryexr)太多if了,看着头痛,使用and_or大法:
price and queryexr.update({'p':price}) brand and queryexr.update({'b':brand}) size and queryexr.update({'s':size}) color and queryexr.update({'c':color})
c语言中有三目条件符 <condition> ? <expression1> : <expression2>
python可以通过<expression1> if <condition> else <expression2>来达到同样目的
另外, python还可以使用and_or大法, <condition> and <expression1> or <expression2>
怎么理解这句表达式呢?
比如 age>=18 and ‘adult‘ or ‘kid‘.
等价于 ((age>=18 and ‘adult‘) or ‘kid‘), 其中<condition>是age>=18.
如果<condition>为True, (age>=18 and ‘adult‘)的结果是‘adult‘, (‘adult‘ or ‘kid‘)的结果是‘adult‘,所以整条式子结果是‘adult‘
如果<condition>为False,(age>=18 and ‘adult‘)的结果是False, (False or ‘kid‘)的结果是‘kid‘, 所以整条式子结果是‘kid‘
PS. python这两种实现三目条件符的风格可能有点易混淆,总结就是,如果用if...else...大法,<condition>是在if后面;如果用and_or大法,<condition>在最前面,顺序跟c风格的三目运算符一致.
原文地址:http://blog.csdn.net/handsomekang/article/details/41315977