命名元组的利弊
益处:命名元组避免在频繁使用索引定位元素(eg: nums[1], nums[5]) 的过程中,致使代码可读性差的问题,可利用key 值直接定位数据。
弊端:类比于字典(可变数据类型),字典同样支持通过key 值定位元素,不同之处在于命令元组数据类型仍为元组不支持修改(不可变数据类型),虽可利用namedtuple类方法_replace实现修改,但本质是新开辟一片内存创建数据来实现的,不支持修改操作会大量浪费资源,数据量较大时影响性能。
ps:当然,益处、弊端是基于应用场景出发的,所以坏事不会一直是坏事,好事没别沾沾自喜~~~哈哈哈哈
- 使用示例:
from collections import namedtuple
# 创建一个类,类名为AccountInfo,元组里面包含两列信息,分别是‘name’,‘password’
AccountInfo = namedtuple("AccountInfo", ["name", "password"])
# 实例化对象
root_account = AccountInfo('root','westos')
print(root_account)
print(root_account.name)
print(root_account.password)
# 类属性_fields包含这个类所有字段名的元组
print(root_account._fields)
执行结果:
2. 案例_云主机管理系统
项目背景: 腾讯云服务器 CVM(Cloud Virtual Machine)是腾讯云提供的可扩展的计算服务。使用 CVM 避免了使用传统服务器时需要预估资源用量及前期投入,帮助您在短时间内快速启动任意数量的云服务器并即时部署应用程序。腾讯云 CVM 支持用户自定义一切资源:CPU、内存、硬盘、网络、安全等等,并可以在需求发生变化时轻松地调整它们。
需求:
******************************************
***************云主机管理系统 ****************
******************************************
1). 添加云主机
2). 删除云主机
3). 修改云主机
4). 查看云主机
0). 退出系统
******************************************
知识点:命名元组namedtuple + 可视化工具prettytable + 循环控制 + 分支流程控制
from collections import namedtuple
from prettytable import PrettyTable
prompt = '''
******************************************
***************云主机管理系统 ****************
******************************************
1). 添加云主机
2). 删除云主机
3). 修改云主机
4). 查看云主机
0). 退出系统
请用户输入操作编号>>
'''
def manager_cloud_host():
# 0. 定义列表host_db 存储主机Host,定义命名元组Host 存储不同主机及其配置
host_db = []
id = 0
Host = namedtuple("Host", ["id", "IPv4", "disk", "memory", "name"])
while True:
key = input(prompt)
# 1.添加云主机
if key == "1":
print("添加云主机".center(40, "*"))
id += 1
IPv4 = input('主机IP(eg: 192.168.25.254)>> ')
disk = input('硬盘大小(eg: 400G)>> ')
memory = input('内存大小(eg: 8G)>> ')
name = input('主机别名(eg: web Server)>> ')
# 将命名元组添加至列表中
host_db.append(Host(id=id, IPv4=IPv4, disk=disk, memory=memory, name=name))
print("成功添加云主机...")
# 2. 删除云主机,依id 号确定主机并删除
elif key == "2":
print("删除云主机".center(40, "*"))
del_id = int(input("输入删除数据的id>> "))
for host in host_db:
if del_id == host.id:
host_db.remove(host)
print("成功删除id=%d的云主机..." % del_id)
break
else:
print("删除失败,没有id=%d的云主机" % del_id)
# 3. 修改元主机,即对命名元组进行修改,不支持
elif key == "3":
# 修改操作不做要求,因为利用命名元组存储主机信息的机制虽可利用类方法_replace实现修改,但不支持此操作会大量浪费资源,影响性能
pass
# 4. 查看所有云主机,遍历列表,利用prettytable实现“好看的”数据可视化
elif key == "4":
print("查看云主机".center(40, "*"))
# 创建表头,并定义表头信息和格式
hosts_table = PrettyTable(field_names=["Id", "IPv4", "Disk", "Memory", "Name"])
for host in host_db:
# 添加一行数据
hosts_table.add_row(host)
print(hosts_table)
elif key == "0":
exit(0)
else:
print("请输入正确编号>> ")
if __name__ == "__main__":
manager_cloud_host()
执行结果: