feat: python
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
# namedtuple是Python标准库collections模块中的一个工厂函数,用于创建具名元组。它允许你像访问对象的属性一样访问元组元素,主要作用是提高代码的可读性和可维护性。
|
||||
|
||||
# 2.1 主要特点:
|
||||
# 具名访问:可以通过属性名访问元组元素
|
||||
# 索引访问:仍然支持传统的索引访问方式
|
||||
# 不可变性:与普通元组一样,创建后不可修改
|
||||
# 内存效率:比普通类更节省内存
|
||||
# 自描述性:通过字段名提供更好的代码可读性
|
||||
"""
|
||||
from collections import namedtuple
|
||||
|
||||
Point = namedtuple("Point", ["x", "y"])
|
||||
p1 = Point(10, 20)
|
||||
# 通过.的方式访问
|
||||
print(p1.x) # 10
|
||||
# 像普通元组一样通过索引访问元素
|
||||
print(p1[0]) # 10
|
||||
|
||||
|
||||
# 多种创建方式
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
# 方式1:使用列表定义字段
|
||||
Person1 = namedtuple("Person", ["name", "age", "city"])
|
||||
# 创建Person具名元组类
|
||||
person1 = Person1("Alice", 25, "New York")
|
||||
# 创建Person实例
|
||||
print(f"方式1 - 列表定义: {person1}")
|
||||
# 打印方式1的结果
|
||||
|
||||
# 方式2:使用字符串定义字段(空格分隔)
|
||||
Person2 = namedtuple("Person", "name age city")
|
||||
# 创建Person具名元组类
|
||||
person2 = Person2("Bob", 30, "London")
|
||||
# 创建Person实例
|
||||
print(f"方式2 - 字符串定义: {person2}")
|
||||
# 打印方式2的结果
|
||||
|
||||
# 方式3:使用字符串定义字段(逗号分隔)
|
||||
Person3 = namedtuple("Person", "name, age, city")
|
||||
# 创建Person具名元组类
|
||||
person3 = Person3("Charlie", 35, "Tokyo")
|
||||
# 创建Person实例
|
||||
print(f"方式3 - 逗号分隔: {person3}")
|
||||
# 打印方式3的结果
|
||||
|
||||
# 方式4:使用元组定义字段
|
||||
Person4 = namedtuple("Person", ("name", "age", "city"))
|
||||
# 创建Person具名元组类
|
||||
person4 = Person4("David", 28, "Paris")
|
||||
# 创建Person实例
|
||||
print(f"方式4 - 元组定义: {person4}")
|
||||
# 打印方式4的结果
|
||||
|
||||
# 打印功能验证标题
|
||||
for i, person in enumerate([person1, person2, person3, person4], 1):
|
||||
# 遍历所有person对象
|
||||
print(f"方式{i} - 姓名: {person.name}, 年龄: {person.age}, 城市: {person.city}")
|
||||
# 打印每个person的属性
|
||||
"""
|
||||
|
||||
# namedtuple的高级功能
|
||||
# 获取字段信息
|
||||
# 类型转换(如转为字典)
|
||||
# 字段值替换,创建并返回一个新的对象
|
||||
# 从字典创建实例
|
||||
# 解包
|
||||
# 迭代以
|
||||
# 类型检查等
|
||||
# 导入namedtuple,可以创建带字段名的元组类型
|
||||
from collections import namedtuple
|
||||
|
||||
# 定义一个Person具名元组类,包含4个字段:name, age, city, job
|
||||
Person = namedtuple("Person", ["name", "age", "city", "job"])
|
||||
|
||||
# 功能1:获取字段信息
|
||||
print("1. 字段信息:")
|
||||
# 打印Person类型的所有字段名
|
||||
print(f" 字段名: {Person._fields}")
|
||||
# 打印字段数量(长度)
|
||||
print(f" 字段数量: {len(Person._fields)}")
|
||||
|
||||
# 功能2:转换为字典
|
||||
print("\n2. 转换为字典:")
|
||||
# 创建一个Person实例,包含姓名、年龄、城市和职业
|
||||
person = Person("Alice", 25, "New York", "Engineer")
|
||||
# 将Person实例转换为字典
|
||||
person_dict = person._asdict()
|
||||
# 打印原始Person对象
|
||||
print(f" 原始对象: {person}")
|
||||
# 打印转换后的字典
|
||||
print(f" 转换后字典: {person_dict}")
|
||||
|
||||
# 功能3:替换字段值
|
||||
print("\n3. 替换字段值:")
|
||||
print(f" 原始对象: {person}")
|
||||
# 使用_replace方法,替换age和city字段,生成新的Person对象
|
||||
new_person = person._replace(age=26, city="Boston")
|
||||
# 打印替换字段后的新对象
|
||||
print(f" 替换后对象: {new_person}")
|
||||
|
||||
# 功能4:从字典创建
|
||||
print("\n4. 从字典创建:")
|
||||
# 定义一个字典,包含Person的所有字段信息
|
||||
person_data = {"name": "Bob", "age": 30, "city": "London", "job": "Designer"}
|
||||
# 使用**运算符,把字典内容作为参数传递,创建Person对象
|
||||
person_from_dict = Person(**person_data)
|
||||
# 打印从字典创建的Person对象
|
||||
print(f" 从字典创建: {person_from_dict}")
|
||||
|
||||
# 功能5:解包操作
|
||||
print("\n5. 解包操作:")
|
||||
# 对person对象进行解包,分别赋值给name, age, city, job变量
|
||||
name, age, city, job = person
|
||||
# 打印解包后的结果
|
||||
print(f" 解包结果: name={name}, age={age}, city={city}, job={job}")
|
||||
|
||||
# 功能6:迭代操作
|
||||
print("\n6. 迭代操作:")
|
||||
print(" 迭代结果:", end=" ")
|
||||
for field in person:
|
||||
print(field, end=" ")
|
||||
# 打印换行
|
||||
print()
|
||||
|
||||
# 功能7:类型检查
|
||||
print("\n7. 类型检查:")
|
||||
# 打印person对象的实际类型
|
||||
print(f" 对象类型: {type(person)}")
|
||||
# 检查person是否属于内置tuple类型
|
||||
print(f" 是否为元组: {isinstance(person, tuple)}")
|
||||
# 检查person是否属于Person类型
|
||||
print(f" 是否为Person类型: {isinstance(person, Person)}")
|
||||
|
||||
|
||||
# join
|
||||
# 生成器表达式
|
||||
numbers = [1, 2, 3, 4, 5]
|
||||
# 将数字转换为字符串后连接
|
||||
numbers_joined = ", ".join(str(num) for num in numbers)
|
||||
print("数字列表连接:", numbers_joined)
|
||||
|
||||
|
||||
words = ["hello", "world", "python"]
|
||||
# 将单词转换为大写后连接
|
||||
upper_joined = " ".join(word.upper() for word in words)
|
||||
print("大写单词连接:", upper_joined)
|
||||
Reference in New Issue
Block a user