Python元组拆包和具名元组解析实例详解
什么是元组拆包和具名元组
Python中的元组(tuple)是不可变的有序序列,在实际开发中,我们有时需要同时获得多个变量的值,可以通过元组拆包的方式来实现。例如:
a, b = 1, 2
这个语句将数字1、2分别赋给a、b两个变量。
具名元组(namedtuple)是Python标准库collections模块中的一个工具类,它让我们可以为元组的每个位置指定一个名称,从而可以通过名称来访问元组中的值。例如:
from collections import namedtuple
Person = namedtuple('Person', ['name', 'age', 'gender'])
p = Person('Tom', 18, 'male')
print(p.name, p.age, p.gender)
这个语句定义了一个名为Person的具名元组,它有三个元素name、age、gender。用p = Person(‘Tom’, 18, ‘male’)命令创建了一个Person类型的对象p,并将其赋值为(‘Tom’, 18, ‘male’)。可以通过p.name、p.age、p.gender来访问对象p中的元素。
元组拆包示例
例1:交换两个变量的值
a, b = 1, 2
a, b = b, a
print(a, b) # 输出2 1
这个示例中,我们首先将1、2赋值给a、b两个变量,然后通过a、b = b、a这一句话来交换它们的值,最后输出a、b的值。
例2:返回多个值
有时候函数需要返回多个值,可以使用元组拆包来实现。例如:
def get_name_and_age():
name, age = 'Tom', 18
return name, age
name, age = get_name_and_age()
print(name, age)
这个示例中,我们定义了一个函数get_name_and_age,它返回名为name、age的两个变量。在函数外部可以通过元组拆包的方式来获得返回值中的变量。
具名元组示例
例1:统计班级成绩
from collections import namedtuple
Student = namedtuple('Student', ['name', 'grade'])
students = [
Student('Tom', 90),
Student('Jerry', 80),
Student('Mike', 95),
Student('Amy', 85),
Student('Jack', 92)
]
total_grade = 0
for student in students:
total_grade += student.grade
mean_grade = total_grade / len(students)
print(mean_grade)
这个示例中,我们定义了一个名为Student的具名元组,它有两个元素name、grade。通过定义students这个列表,每个元素都是Student类型的元组。我们通过遍历students列表来统计班级总分,计算班级平均分,并输出平均分数。(这里未做浮点数保留)
例2:固定关键字参数
在函数中,有时候需要固定一些关键字参数的名称和值,可以使用具名元组来实现。例如:
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
def move_to(p, delta_x, delta_y):
return Point(p.x+delta_x, p.y+delta_y)
p = Point(1, 1)
p = move_to(p, 2, 3)
print(p) # 输出Point(x=3, y=4)
这个示例中,我们首先定义了一个名为Point的具名元组,它有两个元素x、y。我们定义一个move_to函数来移动一个点,其中我们希望固定delta_x、delta_y两个关键字参数的名称和值,并使用具名元组p来存储点的坐标。在move_to函数中,我们通过p.x、p.y来获得点的原始位置,然后使用delta_x、delta_y偏移坐标,最后将结果存储在一个新的具名元组中并返回。