详解Python 记录、结构体和纯数据对象

  • Post category:Python

Python 记录、结构体和纯数据对象 使用方法攻略

在 Python 中,有多种方式可以表示结构化数据。其中包括记录、结构体和纯数据对象。本文将详细介绍这三种数据结构的定义、使用和区别。

记录

记录是由一系列键值对组成的数据结构。在 Python 中,记录通常使用 dict 类型来表示。

定义记录的语法为:

my_record = {
    "key1": value1,
    "key2": value2,
    ...
}

其中,key1ke2 等表示记录的键,value1value2 等表示记录的值。

我们也可以使用 dict() 内置函数创建记录:

my_record = dict(key1=value1, key2=value2, ...)

读取记录的值时,可以使用 [] 运算符:

print(my_record["key1"])  # 输出 value1

更新记录的值时,可以直接使用赋值运算符:

my_record["key1"] = new_value1

下面是一个简单的示例:

address_book = {
    "Alice": "alice@example.com",
    "Bob": "bob@example.com",
    "Charlie": "charlie@example.com"
}

# 读取 Alice 的邮箱
print(address_book["Alice"])

# 更新 Bob 的邮箱
address_book["Bob"] = "bob@newexample.com"

# 输出所有记录
for name, email in address_book.items():
    print(f"{name} 的邮箱是 {email}")

输出结果为:

alice@example.com
Alice 的邮箱是 alice@example.com
Bob 的邮箱是 bob@newexample.com
Charlie 的邮箱是 charlie@example.com

结构体

结构体是一种自定义数据类型,用于表示多个不同类型的数据。在 Python 中,可以使用 namedtuple 来定义结构体。

定义结构体的语法为:

from collections import namedtuple

MyStruct = namedtuple("MyStruct", ["field1", "field2", ...])

其中,MyStruct 是结构体的名称,["field1", "field2", ...] 是结构体的字段名。

创建结构体实例时,需要为每个字段提供一个值:

my_struct = MyStruct(value1, value2, ...)

读取结构体的字段值时,可以使用 . 运算符:

print(my_struct.field1)  # 输出 value1

下面是一个简单的示例:

from collections import namedtuple

Person = namedtuple("Person", ["name", "age", "gender"])

# 创建两个 Person 实例
alice = Person(name="Alice", age=25, gender="female")
bob = Person(name="Bob", age=30, gender="male")

# 输出 Alice 和 Bob 的信息
print(f"{alice.name} {alice.age} {alice.gender}")
print(f"{bob.name} {bob.age} {bob.gender}")

输出结果为:

Alice 25 female
Bob 30 male

纯数据对象

纯数据对象是一种只包含数据而不包含任何方法的对象。在 Python 中,可以使用 object() 内置函数来创建纯数据对象。

定义纯数据对象的语法为:

my_object = object()

我们可以使用 setattr() 函数来给纯数据对象动态添加属性:

my_object = object()
setattr(my_object, "field1", value1)

# 读取属性值
print(my_object.field1)

下面是一个简单的示例:

class Rectangle:
    pass

# 创建两个 Rectangle 实例
rect1 = Rectangle()
rect2 = Rectangle()

# 为 rect1 动态添加属性
setattr(rect1, "width", 5)
setattr(rect1, "height", 10)

# 为 rect2 动态添加属性
setattr(rect2, "width", 3)
setattr(rect2, "height", 6)

# 计算面积并输出
area1 = rect1.width * rect1.height
area2 = rect2.width * rect2.height
print(area1, area2)

输出结果为:

50 18

总结

本文介绍了 Python 中三种常用的结构化数据类型:记录、结构体和纯数据对象。记录使用 dict 类型表示,结构体使用 namedtuple 类型表示,纯数据对象使用 object() 类型表示。它们分别适用于不同的场景,选择合适的数据类型能够使代码更加清晰易懂。