冰与火之歌:Python的三元表达式

Posted 善良超锅锅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冰与火之歌:Python的三元表达式相关的知识,希望对你有一定的参考价值。

我不知道为什么,Python这么优雅的语言居然不支持三元运算符,也就意味着无法像C语言一样直接使用conditon?a:b来返回a或b。我感觉我对Python的喜爱受到了挑战。我不喜欢这种感觉。经过上网搜索和自行实验,我终于找到了三元表达式的替代方法。
方法一:a if condition else b 如果condition为True,返回a;否则,返回b。 例如,下面的例子根据条件输出'冰'或者'火'
   
    
     >>> '冰' if 3 > 2 else '火'
    
    
     '冰'
    
    
     >>> '冰' if 3 < 2 else '火'
    
    
     '火'
    
    
     >>> 
    
   

方法二:利用and or短路运算的特点 and运算时,例如a and b,如果a为False就不再判断b的值。or运算时,例如a or b,如果a为True就不再判断b的值。 假设表达式为:condition and a or b。如果condition为True,会接着判断a,如果a等同True,就返回a的值。如果a等同False,就计算b,返回b的值。如果你觉得有点绕,直接看下面的例子。 eg.下面的例子根据条件输出不同的字符:
    
     
      >>> 3 > 2 and '冰' or '火'
     
     
      '冰'
     
     
      >>> 3 < 2 and '血' or '沙'
     
     
      '沙'
     
    

但这种方法有个坑,如果a为"",即空串,对它作真假值判断时会返回False,与我们的假设不符。 例如,下面我们希望3>2时输出一个空串,然而却事与愿违。
    
     
      >>> 3 > 2 and '' or '火'
     
     
      '火'
     
     
      >>> 
     
    
我们想要一个空串,然而却造成火灾。
这种方法看起来挺优雅,看在它优雅的份上,能不能补救一下呢? 当然,机制的网友找到了修补的方法,那就是把a和b用列表包起来。因为即使包含空串元素的列表,其表达式依然等同True。 eg.上面的例子包裹后变成下面这幅德行:
   
    
     >>> (3 > 2 and [''] or ['火'])[0]
    
    
     ''
    
   
可以看到,这种方法是多么地丑陋。构造了两个列表不说,最后还得依赖下标运算把想要的值取出来。

所以推荐使用第一种方法。比较好理解,也没有坑。

最后,请原谅我做了一回标题党。毕竟生活本无趣,我只想加入点色彩。

以上是关于冰与火之歌:Python的三元表达式的主要内容,如果未能解决你的问题,请参考以下文章

求冰与火之歌:权力的游戏第一季 迅雷高清 中文未删减版种子下载

求美剧冰与火之歌权力的游戏第一季720P种子

急求冰与火之歌:权力的游戏 第一季高清完整版下载,谢谢!!

iOS冰与火之歌

2021 — 冰与火之歌

开源与安全的“冰与火之歌”