摘自机器之心
前几个月发布的 Python 3.8 包含了一项重要的新功能,即海象算子。如果合理运用,该算子能有效地提升 Python 程序的执行效率。本文将对海象算子的作用和效果进行介绍,并会通过示例演示其使用方法和不适用的场景。
海象算子(Walrus Operator),或称命名表达式算子,符号为":=
"。
海象算子
海象算子能为表达式中的一个变量赋值。先看看一段代码:
# code 0.0:
countries = ["Indea", "USA", "France", "Germany"]
if len(countries) < 5:
print("Length of countries is " + len(countries))
在上面的代码中,我们调用了两次len()
函数,那么可以避免重复计算吗?我们做一下改进:
# code 0.1:
country_size = len(countries)
if country_size < 5:
print("Length of countries is " + country_size)
还有改进的空间吗?可以不用单独一行来给country_size
赋值吗?
# code 0.2:
if country_size := len(countries) < 5 :
print("Length of countries is " + country_size)
这里就用到了海象算子,可以在if
语句中直接执行声明和赋值操作。
2. 代码行数和复杂度的平衡
先看一段示例代码:
# code 1.0:
powers = [get_count(), get_count()**2, get_count()**3]
def get_count():
"Fetches count of records from a database"
上面的示例代码是通过多次调用一个高成本函数get_count()
来填充一个列表。常用做法就是先将函数返回结果赋值给一个变量,然后直接操作变量来填充列表。现在可以用海象算子直接声明赋值变量。
# code 1.1:
powers = [result := get_count(), result**2,result**3]
def get_count():
"Fetches count of records from a database"
从code1.1的示例代码中可看出,海象算子可以减少代码行数和降低代码的复杂度。
3. 解决理解低效的问题
# code 2.0:
employees = []
for id in employee_ids:
employee = fetch_employee(id)
if employee:
employees.append(employee)
上述代码基于一个条件填充列表,需要多次循环。我们可以使用海象算子进行简化:
employees = [ result for id in employeee_ids if (result := fetch_employee(id))]
网友评论