如何使用Python三元运算符

这篇指南将教你如何在Python中使用三元运算符。你将学习语法并编写几个例子来理解它的工作原理。

我们将首先回顾一下if-else条件语句的工作原理,然后学习如何使用三元运算符编写等效的表达式。

接下来,我们将编写几个例子,然后学习如何使用Python元组和字典来模拟Python的三元运算符的行为。最后,我们将回顾一些使用三元运算符的情况。

让我们开始吧!

Python中的if-else语句:回顾

你可以通过启动Python REPL或使用Geekflare’s online Python editor在其中编写代码。

Python中if-else语句的通用语法如下:

if condition:
    # do this
else:
    # do this

在上面的代码片段中,condition表示要检查的条件。如果条件计算结果为True,则触发if块。如果条件计算结果为False,则执行else块中的语句。

下面是一个示例,其中根据energy的值是否小于或等于零,将game_over变量赋予布尔值。

  • 如果energy <= 0game_overTrue
  • 否则,game_overFalse

以下代码片段展示了如何使用if-else条件语句实现这一点:

energy = -1

if energy <= 0:
    game_over = True
else:
    game_over = False

print(game_over)
# True

在这个例子中,energy是-1,小于0。所以game_over是True。

Python三元运算符:语法和例子

Python有一个类似于C和C++等语言中的ternary conditional operator的三元运算符。使用它的一般语法如下:

expression1 if condition else expression2

我们来解析一下上述语法:

  • condition:要检查的条件。
  • expression1:如果条件为True,则要计算的表达式。
  • expression2:如果条件为False,则要计算的表达式。

现在,我们将从if-else版本的代码中确定expression1expression2condition应该是什么。

把它们放在一起,我们有以下使用Python的三元运算符的代码。

game_over = True if energy <= 0 else False
print(game_over)
# True

我们再编写另一个例子。假设你经营一家书店,并根据读者过去一年内的到访频率给予折扣。

numVisits表示到访次数。

  • 如果numVisits > 7,折扣百分比discount_perc为20。
  • 否则,discount_perc为5。

我们使用三元运算符为discount_perc变量赋值。

numVisits = 10

discount_perc = 20 if numVisits > 7 else 5

print(discount_perc)
# 20 (因为numVisits = 10大于7)

接下来,我们将学习如何使用Python元组和字典来模拟三元运算符。

使用Python元组模拟三元运算符

像Python中的所有可迭代对象一样,元组遵循零索引。所以如果元组中有两个元素,tuple_name[0]表示元组中的第一个元素,tuple_name[1]表示元组中的第二个元素。

Python中的基本数据类型是整数、浮点数、字符串和布尔值。Python支持类型转换,可以用另一种数据类型的等效表示来表示特定的数据类型。

启动Python REPL并运行以下示例。如果尝试将整数转换为布尔值,会注意到以下几点:

– bool(0)为False。
– bool(任何非零整数)返回True。

同样,当将布尔值转换为整数时,我们有以下情况:

– int(True)为1。
– int(False)为0。

将类型转换和索引组合在一起,我们可以这样做:

– 元组中索引为0的元素:当条件为False时使用的值。
– 元组中索引为1的元素:当条件为True时使用的值。

利用以上内容,我们可以得到以下结果:

“`
numVisits = 10
discount_perc = (5,20)[numVisits > 7] discount_perc
# 20
“`

在这里,条件`numVisits > 7`为True,因为numVisits为10。因为int(True)为1,所以discount_perc的值为20,即索引为1的元素。

使用Python字典模拟三元运算符

可以将True和False设置为字典的键。并且可以将expression1和expression2设置为相应的键True和False的值。

接下来该怎么办?现在,如果使用`some_dict[condition]`,如果条件为True,则计算与键True相对应的expression1;如果条件为False,则计算与键False相对应的expression2。

让我们使用Python字典重新编写discount_perc的示例。

“`
numVisits = 10
discount_dict = {True: 20, False:5}
discount_perc = discount_dict[numVisits > 7] discount_perc
# 20
“`

在这里,numVisits = 10大于7。因此,条件numVisits > 7为True。所以discount_dict[numVisits > 7]计算为discount_dict[True],即值20。

你应该始终使用Python的三元运算符吗?

到目前为止,我们已经学习了如何使用三元运算符。但是,我们应该始终使用三元运算符吗?嗯,三元运算符可能不是所有用例的最佳选择。本节将介绍在何时应该优先使用三元运算符而不是if-else语句。我们还将介绍在何时应该考虑使用if-else语句而不是三元运算符。

比if-else块更简洁

如前所述,在Python中,三元运算符表达式比if-else语句更简洁。因此,您可以使用它来检查条件并根据需要条件地评估表达式。

在以下示例中,nums是一个包含100个随机生成整数的列表。对于这100个数字中的每一个,我们检查它是奇数还是偶数。并且此评估内联发生在f-string内。

“`
import random

nums = [random.choice(range(100)) for i in range(10)]

for num in nums:
print(f”{num} is {‘even' if num%2==0 else ‘odd'}”)
“`

三元运算符需要有else子句

当使用if-else条件语句时,else子句是可选的。举个例子,如果能量下降到小于等于零的值,game_over变量设置为True。

然而,如果能量大于零,game_over变量将不会被初始化。所以,如果你试图访问game_over变量,就会出现错误。

energy = 5
if energy <= 0:
    game_over = True

print(f"游戏结束了吗?{game_over}")
Traceback (most recent call last):
  File "ternary_op.py", line 39, in 
    print(f"游戏结束了吗?{game_over}")
NameError: name 'game_over' is not defined

解决这个问题的一种方法是将game_over初始值设为False,并在能量水平小于等于零时更新为True。

energy = 5
game_over = False
if energy <= 0:
    game_over1 = True

print(f"游戏结束了吗?{game_over}")

然而,当使用上述等价的Python三元运算符时,else子句是不可选的。三元运算符要求在条件为False时计算表达式。

game_over = True if energy <= 0 else False

如果将上述代码修改为game_over = True if energy <= 0,删除else部分,则会出现语法错误,如下所示:

File "ternary_op.py", line 42
    game_over = True if energy <= 0
                                  ^
SyntaxError: invalid syntax

使用if-else语句来检查多个条件

考虑以下例子: 在一组编程面试问题中,每个问题都有一个相关的难度评分。根据这个评分,我们将easy、medium或hard中的一个难度级别分配给一个特定的问题。假设我们有以下内容:

评分 难度级别
小于10 easy
10到20之间 medium
大于20 hard

给定难度评分,你可以使用Python三元运算符获得其难度级别,如下所示:

score = 12

difficulty_level = "easy" if score  20 else "medium"

print(difficulty_level)
# medium

上述代码块中的三元运算符表达式的形式如下:

expression1 if condition1 else expression2 if condition2 else expression3

尽管简洁,但这种写法有点难以阅读和解析。下面的图片展示了控制流程是如何发生的。

下面的代码段展示了使用if-else语句的等价实现。可以看到,控制流程更容易理解,代码更易读。

if score  20:
    difficulty_level="hard"
else:
    difficulty_level="medium"

print(difficulty_level)

因此,当有多个条件时,应该使用if-else语句而不是三元运算符。这样可以确保代码易于阅读和理解。

此外,当需要根据条件是真还是假来执行多个语句时,应该考虑使用if-else语句。

结论

这里是对您在本教程中学到的内容的回顾。

  • 在Python中,三元操作符的用法如下:expression1 if condition else expression2
  • 您可以使用Python元组和字典模拟三元操作符的行为。
  • 虽然三元操作符可以作为if-else语句块的更简洁的替代方案,但您应确保代码可读性。为了提高代码的可读性,您可以使用if-else语句而不是三元操作符,特别是当您需要链接多个条件时。

接下来,请查看有关equal and not equal operators in Python的教程。

类似文章