前言:
用过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。
可喜可贺,可口可乐,完
viencoding.com版权所有,允许转载,但转载请注明出处和原文链接: https://viencoding.com/article/10