看python多线程那部份的东西时看到一个好玩的东西,因为我也是初学python。所以写在这里加强一下记忆。
关于and
先看个例子:
1 ‘a' and 'b' and 'c' 2 '' and 'b' 3 'a' and 'b'
这个的输出是:
1 'c' 2 '' 3 'b'
解释一下为什么:
在布尔环境中除了0,‘’,{},[],(),None是假以外,其它几乎所有东西的布尔环境都是真。在用and的时候如果所有的布尔环境都是真,那么返回的是最后一个布尔环境为真的值。
如果有一个为假,则返回第一个布尔环境为假的值。
关于 or
1 'a' or 'b' 2 '' or 'b' 3 '' or {} or None
输出:
1 'a' 2 'b' 3 None
同样给出这段输出的解释:
不难发现or的规则和and是类似的:遇到布尔环境为真的立即返回这个值,所以第一个输出是‘a’,而第二个中‘’为假‘b’为真,所以返回的是‘b’。当所有的值的布尔环境都为假时,返回的是最后一个值。
关于and-or
熟悉c语言或者java语言的一定知道三元预算符这个说法,也就是bool?1:0这种形式,其实and-or和这个类似。
来吧,少年,再举个栗子
1 a = 'first' 2 b = 'second' 3 1 and a or b 4 0 and a or b
输出如下:
1 ‘first’ 2 ‘second’
原因是酱紫的:1为真对吧,所以返回的是a;0为假,所以返回的是b。
但四,这里有陷阱!
比如:
1 a = '' 2 b = 'second' 3 1 and a or b
你猜它的输出是什么
没错,你想错了>~~<!
'second'
因为1 and '' 的值为''(还记得前面说过的吗),'' or 'second'的运算结果是‘second’。
所以在用and-or的时候一定要保证a为真。否则会蛋疼的少年!
那么如何规避这种错误的结果呢,《Dive into python》中给出了思路
你可以这样,这样,然后这样>~<(为毛我第一次写博客这么兴奋啊)
1 a = '' 2 b = 'second' 3 (1 and [a] or [b])[0]
因为[a]是一个非空列表,所以[a]一定是真。
最后要说的是and,or,and-or的远算都是从左往右。
写完鸟》!《