1. 三元运算符的定义
- Python中的三元运算符是一种简洁的if-else表达式,它允许我们在一行代码中根据条件选择两个可能的结果。
- 三元运算符在处理简单条件逻辑时非常有用,能够使代码更加简洁。
2. 三元运算符的语法
- 三元运算符的语法如下:
value_if_true if condition else value_if_false
# 三元运算符相当于下面的条件语句
if condition:
value_if_true
else:
value_if_false
- condition是判断条件,true_expression 和 false_expression 是两个表达式,用 if…else… 连接。
- 如果 condition 成立(结果为真),就执行 true_expression,并把 true_expression 的结果作为整个表达式的结果。
- 如果 condition 不成立(结果为假),就执行 false_expression,并把 false_expression 的结果作为整个表达式的结果。
- Python中的三元运算符是用 if 和 else 连接,不像Java等语言中是用问号和冒号连接。
3. 三元运算符的使用
3.1 用于 if 语句简化
三元表达式可以将简单的 if 语句 缩减为一行代码。
# 根据输入的年龄,判断是否成年?
age = int(input('请输入您的年龄:'))
if age >= 18:
cn = '成年'
else:
cn = '未成年'
print('您是{}人'.format(cn))
# 根据输入的年龄,判断是否成年?
age = int(input('请输入您的年龄:'))
cn = '成年' if age >= 18 else '未成年'
print('您是{}人'.format(cn))
3.2 返回多条语句
# 根据输入的年龄,判断是否成年?
age = int(input('请输入您的年龄:'))
cn = '成年','大于或等于18岁' if age >= 18 else '未成年'
print(cn) # ('成年', '大于或等于18岁')或未成年
代码返回一个元组,内容为 ('成年', '大于或等于18')
,这里一定注意不要使用分号;,否则只返回第一个语句的结果。
3.3 在函数内部使用三元表达式
有些简单的判定逻辑,可以直接使用三元表达式简化,例如判断传入参数是否为偶数。
def even_num(num):
return True if num % 2 == 0 else False
3.4 三元表达式用于列表推导式
在列表推导式知识点中,也存在三元表达式的落地应用,例如下述代码。
li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 列表推导式
ret1 = [i for i in li if i % 2 == 0]
print(ret1) # [2, 4, 6, 8, 10]
# 三元运算符表达式
ret2 = [i if i % 2 == 0 else None for i in li]
print(ret2) # [None, 2, None, 4, None, 6, None, 8, None, 10]
三元运算表达式经常与列表推导式结合使用,是Python中两个高级的特性强强联合,写出来的代码非常优雅。当然,还可以举一反三地将三元运算表达式与字典推导式和集合推导式等组合使用。
3.5 嵌套的三元运算符
Python 条件表达式可以嵌套使用,但是建议最多嵌套两层,而且是在代码简单的情况下,具体编码如下所示,你需要重点学习下述问题。
在嵌套的时候,还需要注意 if 和 else 配对问题。
num = int(input('请输入数字:'))
print('负数') if str(num)[0] == '-' else (print('大于等于100') if num >= 100 else print('小于100的正数'))
上面这行代码是一个嵌套的三元运算表达式,其中第一个 else 后面的语句是一个完整的三元运算语句,被作为一个整体当作外层三元运算表达式中的 false_expression ,如下图所示。
3.6 三元表达式与 lambda
有时候可以将三元表达式与 lambda 进行结合,让代码变得更加简洁。
示例:声明一个函数,返回较大值
def max(a, b):
if a > b:
ret = a
else:
ret = b
return ret
r = max(5, 6)
print(r)
由于上述代码非常简单,可以直接使用 lambda 匿名函数实现。
max = lambda a, b: a if a > b else b
r = max(10, 15)
print(r)
4. 三元运算符的优缺点
优点:
- 简洁性:三元运算符可以使代码更加简洁,减少代码行数,提高代码的可读性。
- 高效性:由于三元运算符只进行一次条件判断,所以在某些情况下,它可以比if-else语句更加高效。
缺点:
- 可读性:对于一些复杂的逻辑或需要多个条件判断的情况,使用三元运算符会使代码变得难以阅读和理解。
- 错误处理:如果条件判断出错,可能会导致程序行为异常。因此,在使用三元运算符时,应确保条件判断的正确性,并进行适当的错误处理。
- 嵌套问题:尽量避免在三元运算符中嵌套其他条件判断,这会使代码变得难以阅读和理解。
综上所述,三元运算符的优缺点要视具体情况而定。在处理简单条件逻辑时,使用三元运算符可以使代码更加简洁高效;但在处理复杂逻辑或需要多个条件判断的情况下,应优先考虑使用if-else语句,以确保代码的可读性和可维护性。