tricks about and-or in python

看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的远算都是从左往右。

写完鸟》!《

 

posted @ 2013-07-09 16:24  lianw  阅读(213)  评论(0编辑  收藏  举报