Python3.8对可迭代解包的改进及用法详解

  • Post category:Python

Python3.8对可迭代解包的改进及用法详解

在Python3.8中,对于可迭代对象的解包语法进行了改进。在该版本中,可以使用星号操作符*可以在解包时获取剩下的所有元素,同时在解包时也可以使用下划线_代替不需要的元素。

传统的可迭代解包

我们先来看一下传统的可迭代解包的写法,在Python3.7及之前的版本中都可以使用这种写法。

假如我们有一个长度为3的元组,我们可以使用以下代码进行解包:

a, b, c = (1, 2, 3)

这样,变量a、b、c分别被分配了值1、2、3。

使用星号操作符

在Python3.8中,可以在解包时使用星号操作符*获取剩下的所有元素。

假如我们有一个长度为5的元组,我们只需要获取前两个元素及后面的所有元素,我们可以使用以下代码进行解包:

a, b, *c = (1, 2, 3, 4, 5)

这样,变量a、b分别被分配了值1、2,变量c则是一个包含后面所有元素(3、4、5)的列表。

如果我们只需要获取后面三个元素,我们可以这样写:

*a, b, c, d = (1, 2, 3, 4, 5)

这样,变量a则是一个包含前面所有元素(1、2、3)的列表,变量b、c、d分别被分配了值3、4、5。

使用下划线代替不需要的元素

在解包时,还可以使用下划线_代替不需要的元素。

假如我们有一个长度为4的元组,我们只需要获取前两个元素,可以使用以下代码进行解包:

a, b, _, _ = (1, 2, 3, 4)

这样,变量a、b分别被分配了值1、2,而下划线代表的元素则被忽略。

示例

下面是两个示例,用来展示在Python3.8中对可迭代解包的改进:

示例1:获取多个返回值并忽略不需要的元素

假如我们在一个函数中获取了多个返回值,但只需要其中的几个,并且有一些返回值是不需要的。在Python3.8及更高版本中,我们可以使用下划线代替不需要的元素。例如:

def get_profile():
    return '张三', 20, '北京', '男', '12345678901', 'zhangsan@example.com'

name, age, _, _, phone, email = get_profile()
print(name)    # 输出:张三
print(age)     # 输出:20
print(phone)   # 输出:12345678901
print(email)   # 输出:zhangsan@example.com

示例2:将列表中的前几项与最后一项合并

假如我们有一个长度为5的列表,我们想将它的前两个元素和最后一个元素合并起来。在Python3.8及更高版本中,我们可以使用星号操作符*获取剩下的所有元素,然后再将列表进行合并。例如:

a = [1, 2, 3, 4, 5]
b = [*a[:2], *a[-1:]]
print(b)   # 输出:[1, 2, 5]

在这个示例中,我们先使用切片获取了列表中的前两个元素和最后一个元素,然后使用星号操作符*获取了中间的元素,最终将它们合并成了一个新的列表。