Python三目运算符and or和if else以及注意事项

2019-02-14 10:26:42   Python
  Python  

Python三目运算符and or和if else以及注意事项

前言:

用过Java、PHP、cpp等语言的朋友应该都见过 condition ? result1 : result2 吧,那么Python中是否也可以这样用呢?按照习惯,第一次写的时候,想当然的这样写了。然后呢?然后就没有然后了... Python中可以用 if 和else 或者 and 和or 来实现同样的效果

if else 写法

result1 if condition else result2

In [31]: '爱过' if True else '恨着'
Out[31]: '爱过'

In [32]: '爱过' if False else '恨着'
Out[32]: '恨着'

In [33]: '爱过' if 1 else '恨着'
Out[33]: '爱过'

In [34]: '爱过' if 0 else '恨着'
Out[34]: '恨着'

and or 写法

condition and result1 or result2

In [35]: True and '爱过' or '恨着'
Out[35]: '爱过'

In [36]: False and '爱过' or '恨着'
Out[36]: '恨着'

In [37]: 1 and '爱过' or '恨着'
Out[37]: '爱过'

In [38]: 0 and '爱过' or '恨着'
Out[38]: '恨着'

注:使用and和or的时候要注意,如果要取的and后面的结果本身就是个被Python认定为False的值,例如空字符串''和0的时候就会使这个表达式得到错误的结果。那么如何避免这个问题呢?最简单的方法就是:(and or 我们分手吧!)使用第一种if else的方法。如果你偏爱写起来很帅的and or,那你就得用如下的方式,规避这些‘False’值了

# 会引起错误的表达
In [39]: True and '' or 'idiot'
Out[39]: 'idiot'

In [40]: True and 0 or 'idiot'
Out[40]: 'idiot'

# 修正后的表达
In [41]: (True and [''] or ['idiot'])[0]
Out[41]: ''

In [42]: (True and [0] or ['idiot'])[0]
Out[42]: 0

解释一下,原理很简单,如果把它变成一个list或者变成一个tuple就不会被认定为False值了,但是使用tuple的时候要注意是(u'',)而不是(u''),后者会被Python认定为非tuple而是值的类型,所以定义tuple的时候如果只有一个值,一定要披上羊皮喔(加逗号),让它看起来像个tuple。

可喜可贺,可口可乐,完

vien.tech版权所有,允许转载,但转载请注明出处和原文链接: https://vien.tech/article/10
欢迎小伙伴们在下方评论区留言 ~ O(∩_∩)O
文章对我有帮助, 点此请博主吃包辣条 ~ O(∩_∩)O

猜你喜欢


评论

There are no comments yet.
未登录

登录后即可发表评论

登录或注册