Python 进阶语法六 —— 三元运算符
2016-11-29 10:03
344 查看
三元运算符
三元运算符通常在Python⾥被称为条件表达式, 这些表达式基于真(true)/假(not)的条件判断, 在Python 2.4 以上才有了三元操作。 下⾯是⼀个伪代码和例⼦:伪代码:
如果条件为真, 返回真 否则返回假
condition_is_true if condition else condition_is_false
例⼦:
is_fat = True state = "fat" if is_fat else "not fat"
它允许⽤简单的⼀⾏快速判断, ⽽不是使⽤复杂的多⾏if语句。 这在⼤多数时候⾮常有⽤, ⽽且可以使代码简单可维护。另⼀个晦涩⼀点的⽤法⽐较少见, 它使⽤了元组, 请继续看:
伪代码:
(返回假, 返回真)[真或假]
(if_test_is_false, if_test_is_true)[test]
例⼦:
fat = True fitness = ("skinny", "fat")[fat] print("Ali is ", fitness)
#输出: Ali is fat ('Ali is ', 'fat')
这之所以能正常⼯作, 是因为在Python中, True等于1, ⽽False等于0, 这就相当于在元组中使⽤0和1来选取数据。
上⾯的例⼦没有被⼴泛使⽤,⽽且Python玩家⼀般不喜欢那样,因为没有Python味⼉(Pythonic)。 这样的⽤法很容易把真正的数据与true/false弄混。
另外⼀个不使⽤元组条件表达式的缘故是因为在元组中会把两个条件都执⾏,⽽ ifelse 的条件表达式不会这样。例如:
condition = True print(2 if condition else 1/0) #输出 print((1/0, 2)[condition]) #输出ZeroDivisionError异常 2 --------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-3-01c997a992d1> in <module>() 2 print(2 if condition else 1/0) 3 #输出 ----> 4 print((1/0, 2)[condition]) 5 #输出ZeroDivisionError异常 ZeroDivisionError: integer division or modulo by zero
这是因为在元组中是先建数据, 然后⽤True(1)/False(0)来索引到数据。 ⽽if-else条件表达式遵循普通的if-else逻辑树, 因此, 如果逻辑中的条件异常, 或者是重计算型( 计算较久) 的情况下, 最好尽量避免使⽤元组条件表达式。
相关文章推荐
- Python进阶(三)Python语法
- 十分钟学习Python的进阶语法
- python进阶之内置函数和语法糖触发魔法方法
- Python进阶(三)——Python语法
- Python3入门与进阶笔记(七):高级语法
- Python 进阶语法八 —— global 和 return
- 十分钟学习Python的进阶语法
- Python进阶(三)——Python语法
- Python进阶语法
- Python 进阶语法
- Python进阶(三)——Python语法
- Python进阶语法
- Python进阶语法二
- Python 进阶语法七 —— 装饰器
- Python进阶语法 五 —— set(集合)
- 十分钟学习Python的进阶语法
- Python 进阶语法三——生成器
- Python进阶(三)——Python语法
- Python进阶With语法