Python:and和or的特殊性质

在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样。但是它们并不返回布尔值,而是返回它们实际进行比较的值之一。

(类似C++里面的&&和||的短路求值)

( 在布尔环境中,0、''、[]、()、{}、None为假;其它任何东西都为真。但是可以在类中定义特定的方法使得类实例的演算值为假。)

and实例:

>>> 'a' and 'b'
'b'
>>> '' and 'b'
''
>>> 'a' and 'b' and 'c'
'c'

从左到右扫描,返回第一个为假的表达式值,无假值则返回最后一个表达式值。

or实例:

>>> 'a' or 'b'
'a'
>>> '' or 'b'
'b'
>>> '' or [] or{}
{}

从左到右扫描,返回第一个为真的表达式值,无真值则返回最后一个表达式值。

and-or搭配:

[python]
  1. >>> a = "betabin"  
  2. >>> b = "python"  
  3. >>> 1 and a or b  
  4. 'betabin'  
  5. >>> 0 and a or b  
  6. 'python'  
<span style="font-size:24px;">>>> a = "betabin"
>>> b = "python"
>>> 1 and a or b
'betabin'
>>> 0 and a or b
'python'</span>

看起来类似于于我们C++中的条件运算符(bool?a:b),是的,当a为true的时候是一样的。但是,当a为false的时候,就明显不同了。

如果坚持要用and-or技巧来实现条件运算符的话,可以用种安全的方法:

[python]
  1. >>> a = ""  
  2. >>> b = "betabin"  
  3. >>> (1 and [a] or [b])[0]  
  4. ''  
<span style="font-size:24px;">>>> a = ""
>>> b = "betabin"
>>> (1 and [a] or [b])[0]
''</span>

就是万能的[],把a为假的可能性给抹杀掉,然后通过[0]再获得(因为要通过[0]获得元素,所以b也得加上[])。

这个and-or技巧主要在lambda中使用。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值