如何使用 Python 三元运算符

已发表: 2023-01-04

本指南将教您如何在 Python 中使用三元运算符。 您将学习语法并编写几个示例以了解其工作原理。

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

接下来,我们将编写一些示例,然后学习如何使用 Python 元组和字典来模拟 Python 的三元运算符的行为。 最后,我们将回顾一些您应该更喜欢使用三元运算符的用例。

让我们开始!

Python 中的 If-Else 语句:回顾

您可以通过启动 Python REPL 或在 Geekflare 的在线 Python 编辑器中进行编码。

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

 if condition: # do this else: # do this

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

下面是一个示例,其中根据energy值是否小于或等于零为game_over变量分配布尔值。

  • 如果energy <= 0game_overTrue
  • 否则, game_over为 False。

以下代码片段显示了如何使用 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-三元运算符-1

Python 有一个三元运算符,它的工作方式很像 C 和 C++ 等语言中的三元条件运算符。 使用它的一般语法如下:

 expression1 if condition else expression2

让我们解析上面的语法:

  • condition :要检查的条件。
  • expression1 :要评估条件是否为 True 的表达式。
  • expression2 :条件为假时要评估的表达式。

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

三元运算ex1

综上所述,我们使用 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 (as numVisits = 10 which is > 7)

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

用 Python 元组模拟三元运算符

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

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

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

  • bool(0)False的。
  • bool(<any non-zero integer>)返回True
 >>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True

类似地,当将布尔值转换为整数时,我们有以下内容:

 >>> int(True) 1 >>> int(False) 0

将类型转换和索引放在一起,我们可以执行以下操作:

  • 元组中索引 0 处的元素: conditionFalse时要使用的值。
  • 元组中索引为 1 的元素: conditionTrue时要使用的值。

使用以上内容,我们有以下内容:

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

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

用 Python 字典模拟三元运算符

您可以将TrueFalse设置为字典的键。 您可以将expression1expression2分别设置为键TrueFalse对应的值。

 some_dict = {True: expression1, False: expression2 }

下一步你要怎么做? 现在,如果您使用some_dict[condition] ,如果conditionTrue ,则计算对应于True键的expression1 。 当conditionFalse时,将对expression2进行求值。

让我们(再次)编写discount_perc示例,但这次使用 Python 字典。

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

此处, numVisits = 10大于 7。因此,条件numVisits > 7True 。 因此discount_dict[numVisits > 7]的计算结果为discount_dict[True] ,其值为 20。

你应该总是使用 Python 三元运算符吗?

你应该一直使用 Python 三元运算符吗

到目前为止,我们已经学习了如何使用三元运算符。 但是我们应该总是使用三元运算符吗? 好吧,三元运算符可能不是所有用例的最佳选择。 当您应该更喜欢使用三元运算符而不是 if-else 语句时,本节将进行分解。 我们还将介绍何时应该考虑使用 if-else 语句而不是三元运算符。

比 If-Else 块更简洁

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

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

 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'}")
 # sample output 0 is even 56 is even 6 is even 53 is odd 62 is even 7 is odd 8 is even 77 is odd 41 is odd 94 is even

三元运算符需要 Else 子句

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

但是,如果energy大于零,则永远不会初始化game_over变量。 因此,如果您尝试访问game_over变量,将会遇到错误。

 energy = 5 if energy <= 0: game_over = True print(f"Is the game over? {game_over}")
 Traceback (most recent call last): File "ternary_op.py", line 39, in <module> print(f"Is the game over? {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"Is the game over? {game_over}")

但是,当使用与上述等效的 Python 三元运算符时,else 子句不是可选的。 三元运算符要求在conditionFalse时计算表达式。

 game_over = True if energy <= 0 else False

如果您通过删除 else 部分将上面的内容更改为game_over = True if energy <= 0 ,您将遇到语法错误,如下所示:

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

要检查多个条件,请使用 If-Else 语句

考虑这个例子:一组编码面试问题中的每个问题都有一个相关的难度分数。 根据这个分数,我们为特定问题分配三个难度级别之一:简单、中等或困难。 假设我们有以下内容:

分数难度级别
小于 10 简单
10 到 20 之间中等的
大于20 难的

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

 score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium

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

 expression1 if condition1 else expression2 if condition2 else expression3

虽然简洁,但阅读和解析有点困难。 下图显示了在这种情况下控制流是如何发生的。

三元运算符示例

以下代码片段显示了使用 if-else 语句的等效实现。 正如所见,控制流更容易理解,代码也更易读。

 if score < 10: difficulty_level="easy" elif 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 语句代替三元运算符,尤其是当您需要链接多个条件时。

接下来,学习查看有关 Python 中等于和不等于运算符的教程。