Python与数据分析

Python3.8的海象算子

2020-01-31  本文已影响0人  清梦载星河

摘自机器之心

前几个月发布的 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))]
上一篇 下一篇

猜你喜欢

热点阅读