如何使用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 <= 0
,game_over
为True
。 - 否则,
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有一个类似于C和C++等语言中的ternary conditional operator的三元运算符。使用它的一般语法如下:
expression1 if condition else expression2
我们来解析一下上述语法:
condition
:要检查的条件。expression1
:如果条件为True,则要计算的表达式。expression2
:如果条件为False,则要计算的表达式。
现在,我们将从if-else版本的代码中确定expression1
、expression2
和condition
应该是什么。
把它们放在一起,我们有以下使用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的教程。