3 ways of Y?X:Z in python
C和java中的 A=Y?X:Z;到了python中有3中写法。
python中and和or运算符总会返回lhs或者rhs。所以有了在2.5版本之前常见的方式:
a=((X and Y) or Z) #前提,Y为真。
分析:
如果X为真,则(X and Y)返回Y,(Y or Z)也是返回Y;
如果X为假,则(X and Y)返回X,(X or Z)返回Z。
到了2.5版本后增加了bool布尔值的概念,所以可以这样用bool(value)函数:
A=[Z,Y][bool(X)]
bool(value)总会返回True或者False,这在python中等价于1或者0。
2.5版本同时新增了一个语法:
A=Y if X else Z
所以说python中有3中方式,第一种在2.5版本之前的代码中非常多见,同样的还有:
A=X or Y or Z or None
返回[X, Y, Z]中第一个不为None的值,如果全为None,则返回None。
参见:Learning Python 3rd 第12章。
同时推荐Learning Python这本书,别看讲的都是基础知识。但python生来就是和c/java不一样的,读了才知道同样的实现原来可以更python。对于想以python做母语的童鞋,那更非这本书莫数啦。