“Python 海象运算符”,正式名称为赋值表达式运算符,是在 Python 3.8 中引入的。它由冒号后跟等号表示:=
.
Python 社区将其称为“海象运算符”,因为它类似于海象的一双眼睛和獠牙。
对海象操作员的需求
在引入海象运算符之前,Python 开发人员必须在一行中为变量赋值,并在下一行中使用它们进行比较。
这通常会导致为简单操作编写多行代码。
# Python code without using the walrus operator
value = 10
if value > 5:
print(value)
Output
10
在此代码片段中,我们必须编写两行来分配值,然后将其用于比较。
海象运算符允许开发人员在同一表达式中分配和使用变量。
Walrus 运算符的语法
海象运算符的语法相对简单。它涉及一个变量,一个海象运算符:=
,和一个表达式。
请记住将赋值表达式括在括号中。
# Using the walrus operator to assign a value and return it
(value := 10)
Output
10
在这种情况下,海象运算符分配值10
to value
并且还返回值10
。但是,请记住,与标准赋值运算符不同,您不能在独立语句中使用此运算符=
.
在 If 语句和 While 循环中使用
海象运算符可用于if
声明和while
循环使代码更加简洁。以下是如何使用 walrus 运算符if
声明。
input_value = "Hello"
if (value := len(input_value)) > 4:
print(f"The length of the string is {value}")
Output:
The length of the string is 5
在此示例中,海象运算符用于分配input_value
to value
并将其与4
在同一条线上。
由于字符串“Hello”的长度为5
,大于4
,消息被打印。
您还可以使用 walrus 运算符while
循环使代码更加简洁:
# Reading a user input until a non-empty string is entered
while (value := input("Enter a non-empty string: ")) == "":
print("The string is empty.")
print(f"The non-empty string is '{value}'")
Output:
Enter a non-empty string:
The string is empty.
Enter a non-empty string: Hello
The non-empty string is 'Hello'
在此示例中,海象运算符用于分配input("Enter a non-empty string: ")
to value
并将其与空字符串进行比较""
.
只要用户输入空字符串,循环就会继续执行。
一旦输入非空字符串,它就会跳出循环并打印非空字符串。
在列表推导式中使用
在 Python 中使用列表推导式时,海象运算符非常方便。这允许在列表推导式中进行更复杂的计算,而无需多次调用函数。
import random
numbers = [number for _ in range(10) if (number := random.randint(1, 20)) % 2 == 0]
print(numbers)
Output
[10, 14, 6, 16, 10]
在此示例中,海象运算符分配的值是random.randint(1, 20)
to number
并检查是否均匀。如果是,则会将该号码添加到列表中。这会产生一个随机偶数列表。
具有数据结构的海象运算符
海象运算符可以有效地与 Python 的数据结构(如列表、集合和字典)一起使用,也可以用于这些数据结构的理解。
# Using walrus operator with a list in a dictionary
numbers = [5, 3, 7, 1, 2, 8, 6, 4]
description = {
"max": (num_max := max(numbers)),
"min": (num_min := min(numbers)),
}
print(description)
Output:
{
'max': 8,
'min': 1
}
在此示例中,海象运算符用于分配最大值和最小值numbers
列出变量num_max
and num_min
在字典理解范围内。
何时使用、何时不使用
虽然海象运算符具有许多优点,但应谨慎使用。它最适合使用它可以使代码更加简洁而不牺牲可读性的情况。
例如,当需要在同一行中分配和使用变量时(例如在条件或列表推导式中),它会很有用。
另一方面,它可能不适合复杂的表达式,因为它会使代码难以阅读和理解。
类似地,在需要独立赋值的情况下,传统的赋值运算符=
应该使用 walrus 运算符代替。
兼容性和版本支持
海象运算符是 Python 3.8 中引入的新运算符。因此,它在 3.8 之前的 Python 版本中不可用。
对于新项目或保证在 Python 3.8 或更高版本上运行的项目,只要可以提高代码的清晰度和简洁性,请随意使用 walrus 运算符。
如果您正在开发的项目需要支持较旧的 Python 版本,则应避免使用 walrus 运算符或使用新语法重写代码。
从传统 Python 语法过渡的技巧
通过以下提示,可以很简单地从传统 Python 语法过渡到使用海象运算符:
- 开始在简单的用例中使用海象运算符,例如
if
条件或while
loops.
- 逐渐转向更高级的用途,例如列表理解和函数调用。
- 始终考虑代码的可读性。如果海象运算符的使用使您的代码难以阅读,那么最好坚持使用传统语法。
Resource:https://docs.python.org/3/whatsnew/3.8.html