Python中or和and运算的返回值问题
文章目录
机缘巧合之下发现Python的or
和and
运算后的返回值居然不是bool
类型。
1 | >>> 'yes' or 'no' |
显然,x and y and z and ...
运算遇到第一个布尔值为假的变量返回,如果没有则返回最后一个变量,x or y or z or ...
运算遇到第一个布尔值为真的变量返回,如果没有也返回最后一个变量。
在我们的认知中,一般逻辑运算的结果就只有True
和False
,而Python逻辑运算这样的特性对我们Python编程有什么样的影响呢?
在判断逻辑运算的结果方面,绝不能采用is True
或== True
等判断方式(当然,这样也是十分不Pythonic的,相信这样干的人几乎没有吧)。
这样的特性还可以改写一些Python的三目运算,比如
1 | a = b if b else c |
同样,你也可以根据and
运算返回特性简写一些代码,不赘述。
这个特性还可以很好解决一些代码风格问题,比如
一般来说,不推荐让list
,dict
等这样的可变对象作为Python函数的默认参数,那么如果你想让这两个可变对象做参数默认值又不想违反这个代码风格要怎么办呢?
1 | def func(arg=[]): |
这样就充分解决了风格的统一问题,实际上类似这样利用Python逻辑运算返回值特性的写法,在Django代码中也有大量使用。