Python中的and和or

第一次看到pythonandor的运行结果的时候觉得很诧异,惊呼:“怎么会这样?”,再一想想觉得也还挺不错的

and

python中的and运算将返回第一个为假的值,如果全为真则返回最后一个值。下面看例子:

>>> a = 1
>>> b = []
>>> c = '123'
>>> d = {'name':'an'}
>>> a and c and d# 全为真返回最后一个值
{'name': 'an'}
>>>
>>> a and b and c and d# 返回第一个为假的值
[]
>>>

or

python中的ro运算返回第一个为真的值,全为假则返回最后一个值。下面看例子:

>>> a = 1
>>> b = []
>>> c = '123'
>>> d = {'name':'an'}
>>> e = None
>>> b or e or a or c# 返回第一个为真的值
1
>>>
>>> e or b# 返回最后一个值
[]
>>>

问号表达式

之前一直用的C/C++,刚开始使用python的时候很不习惯,比如:python没有switch...case语句,python没有问号表达式。python的问号表达式是可以通过and、or和[]/()配合实现的,如下:

>>> a = 1
>>> (a > 0) and '+' or '-'
'+'
>>>

先是(a > 0)返回True,再与’+’进行and运算,两个都为真,返回最后一个值(‘+’),再与’-’进行or运算,返回第一个为真的值(‘+’)。再看返回第二个的情况:

>>> a = -1
>>> (a > 0) and '+' or '-'
'-'
>>>

你可能已经注意到了,当and与or中间的元素为逻辑假的时候就始终返回or后面的表达式了,这个地方还需要用到[False]或者(False,)均为真的特性将上述问号表达式改写成(expression and [ValueWhileTrue] or [ValueWhileFalse])[0]或者(expression and (ValueWhileTrue,) or (ValueWhileFalse,))[0]注意:表达式中的逗号不能少,如下:

>>> a = 0
>>> (a == 0) and '' or 'not zero'
'not zero'# 返回第二个值,与期望的不一致
>>>

按照上面的方法进行改写,工作正确

>>> a = 0
>>> ((a == 0) and [''] or ['not zero'])[0]
''
>>> a = 0
>>> ((a == 0) and ('',) or ('not zero',))[0]
''
>>>

当然,代码最重要的是可读性,所以还是不推荐这样做,哪怕这样“很酷”!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值