Python 条件表达式


在 Python 中,有一种特殊的表达式 - 条件表达式(也被称为条件运算符,或者三元运算符),其语法规则如下:

<expr1> if <condition> else <expr2>

这与前面分享的 if 语句形式不同,因为它不是指导程序执行流程的控制结构,而更像是定义表达式的运算符。

这种语法看起来很奇怪,条件在表达式的中间!!!它首先会评估 <condition>,如果为 True,则表达式求值为 <expr1>;否则,表达式求值为 <expr2>

在 Python 2.5 之前,关于条件表达式的语法形式有很多讨论(参考:PEP 308),除了像 C++ 中的 <condition> ? <expr1> : <expr2> 形式之外,还有很多其他形式的变体,但 Guido 最终选择了一种令人惊讶的(也就是现在用到的)语法。

事实上,在其他的编程语言中,这种形式的表达式通常被称为三元运算符,这可能就是 Python 的条件表达式有时也被称为三元运算符的原因。

1

常用方式

条件表达式的常见用途是变量的选择性赋值。

例如,表示一个人是成年人还是未成年。如果用传统的 if 语句表示,是下面这样:

age = 12
if age < 18:
    s = 'minor'
else:
    s = 'adult'

但如果用条件表达式的话,将会更加简短,也会更加易读:

s = 'minor' if age < 18 else 'adult'

注意:条件表达式的行为在语法上于其他表达式类似,它可以用作更长的表达式的一部分。

2

优先级

实际上,条件表达式的优先级低于所有其他运算符,因此需要使用括号对其进行分组。

考虑下面这段代码:

x = 2
y = 5
z = 1 + x if x > y else y + 2
print(z)

运行程序,你会发现结果是 7,而不是 8。这是因为 + 运算符比条件表达式绑定得更紧密,因此首先计算 1 + x 和 y + 2,然后才计算条件表达式,相当于:

z = (1 + x) if x > y else (y + 2)

如果要先计算条件表达式,则需要使用括号将其括起来:

z = 1 + (x if x > y else y) + 2

这样以来,首先会评估 (x if x > y else y),结果是 y,即 5,因此 z 被赋值为 1 + 5 + 2 = 8。

如果要将条件表达式作为复杂表达式的一部分,那么最好用括号括起来(即使不需要),这样会更加可读。

3

短路运算

和复合逻辑表达式一样,条件表达式也使用的短路运算。如果条件表达式的某些部分不需要计算,则不会进行计算。

在表达式 <expr1> if <condition> else <expr2> 中:

  • 如果 <condition> 为 True,则返回 <expr1><expr2> 不计算。

  • 如果 <condition> 为 False,则返回 <expr2><expr1> 不计算。

要验证这一点,可以使用一些特殊的手段:

x = 2 if True else 1/0

y = 1/0 if False else 5

我们知道,除数不能为 0,一旦为 0 的话,Python 就会抛出 ZeroDivisionError 异常。

但在这两种情况下,并没有引发任何异常,这说明了 1/0 这一项并没有被评估。

4

替代 if/elif/else

条件表达式也可以链接在一起,作为一种替代 if/elif/else 的结构。

例如,有一段这样的代码:

x = 2
if x == 1:
    s = 'p'
elif x == 2:
    s = 'y'
elif x == 3:
    s = 't'   
else:
    s = 'h'

如果用条件表达式表示,则可以写成这样:

x = 2
s = ('p' if (x == 1) else 
     'y' if (x == 2) else
     't' if (x == 3) else
     'h'
    )

看到这里,也许你会有一个疑问:执行顺序是从左到右,还是从右到左呢?在一些其他的编程语言中,有一个所谓的右结合性,即:从右到左依次判断再求出最后的 s。

用事实说话,和上面一样,还是用特殊手段来验证这一点:

s = ('p' if (x == 1) else 
     'y' if (x == 2) else
     't' if (x == 3/0) else
     'h'
    )

运行程序,你会发现并没有异常产生,这就说明了不会评估 3/0 这一项,因此执行顺序是从左到右

·END·
 

高效程序员

谈天 · 说地 · 侃代码 · 开车

长按识别二维码,解锁更多精彩内容

### 回答1Python 中的条件表达式又称为三元表达式,由三个操作数组成,格式如下: ``` x if condition else y ``` 其中,`condition` 为条件表达式,如果该表达式的值为 `True`,则返回 `x` 的值,否则返回 `y` 的值。 例如: ``` x = 5 y = 10 max_num = x if x > y else y print(max_num) # 输出 10 ``` 在上面的例子中,如果 `x` 大于 `y`,则 `max_num` 的值为 `x` 的值 5,否则 `max_num` 的值为 `y` 的值 10。 ### 回答2Python条件表达式又被称为三元操作符,它是一种简洁而方便的表达式形式,可以在一行代码中实现简单的条件判断。 Python条件表达式的一般形式是:`result = true_value if condition else false_value`。 其中,`condition`是一个布尔表达式,如果`condition`为真,则返回`true_value`,否则返回`false_value`。 举个例子来说明,比如我们需要根据一个数字的正负来判断它的绝对值,可以使用条件表达式实现: ```Python num = -5 abs_value = num if num >= 0 else -num print(abs_value) # 输出:5 ``` 在上面的代码中,我们首先对变量`num`进行判断,如果`num`大于等于0,则返回`num`的值,即正数;如果`num`小于0,则返回`-num`,即绝对值。最后将结果赋给变量`abs_value`并打印出来。 条件表达式在简单的条件判断中非常有用,可以大大简化代码的书写,提高代码的可读性和简洁性。但需要注意的是,条件表达式不适合用于复杂的条件判断,可以使用传统的if-else语句来处理复杂情况。 ### 回答3: Python中的条件表达式是一种简洁的语法结构,用于在一行代码中表示一个条件判断的结果。 条件表达式的一般形式为:value_if_true if condition else value_if_false。 其中,condition是一个布尔表达式,如果为真,则返回value_if_true;否则,返回value_if_false。 这种语法结构的好处是能够通过一行代码完成简单的条件判断,避免了写if-else语句时的冗余。 例如,我们希望根据一个数的正负情况返回相应的结果,可以使用条件表达式: result = "正数" if num > 0 else "负数" 在这个例子中,如果num大于0条件表达式的结果为"正数",否则为"负数"。 除了简洁性外,条件表达式还具有其他特点,比如可以嵌套使用: result = "正数" if num > 0 else ("负数" if num < 0 else "零") 这个表达式根据num的值来返回"正数"、"负数"或"零",并且在多个条件判断时也能保持代码的简洁性。 需要注意的是,条件表达式并不适用于复杂的条件判断,如果条件需要多个判断语句,或者需要执行多个语句块,建议使用if-else语句。 总的来说,Python条件表达式是一种简洁而强大的语法结构,适用于简单的条件判断,能够提高代码的可读性和简洁性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一去丶二三里

有收获,再打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值