您的位置:首页 > 编程语言 > Python开发

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逻辑树, 因此, 如果逻辑中的条件异常, 或者是重计算型( 计算较久) 的情况下, 最好尽量避免使⽤元组条件表达式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: