python基础 - namedtuple和enum

Python附带⼀个模块,它包含许多容器数据类型,名字叫作collections。
我们将讨论的是:

  • namedtuple
  • enum.Enum (包含在Python 3.4以上)

另外还有defaultdict、counter、deque很常用不在赘述。

1、namedtuple

⼀个元组是⼀个不可变的列表,你可以存储⼀个数据的序列,它和命名元组(namedtuples)⾮常像,但有⼏个关键的不同。
主要相似点是都不像列表,你不能修改元组中的数据。为了获取元组中的数据,你需要使⽤整数作为索引:

man = ('Ali', 30)
print(man[0])
## 输出: Ali

那namedtuples是什么呢?它把元组变成⼀个针对简单任务的容器。你不必使⽤整数索引来访问⼀个namedtuples的数据。你可以像字典(dict)⼀样访问namedtuples,但namedtuples是不可变的。

from collections import namedtuple
Animal = namedtuple('Animal', 'name age type')
perry = Animal(name="perry", age=31, type="cat")
print(perry)
## 输出: Animal(name='perry', age=31, type='cat')
print(perry.name)
## 输出: 'perry'

以上可以看到,可以⽤名字来访问namedtuple中的数据。⼀个命名元组(namedtuple)有两个必需的参数。它们是元组名称和字段名称
在上⾯的例⼦中,我们的元组名称是Animal,字段名称是'name','age'和'type'。
不必使⽤整数索引来访问⼀个命名元组,这让你的代码更易于维护。⽽且,namedtuple的每个实例没有对象字典,所以它们很轻量,与普通的元组⽐,并不需要更多的内存。这使得它们⽐字典更快。然⽽,要记住它是⼀个元组,属性值在namedtuple中是不可变的,所以下⾯的代码不能⼯作: 

from collections import namedtuple
Animal = namedtuple('Animal', 'name age type')
perry = Animal(name="perry", age=31, type="cat")
perry.age = 42
## 输出:
## Traceback (most recent call last):
## File "", line 1, in
## AttributeError: can't set attribute

你应该使⽤命名元组来让代码⾃注释,它们向后兼容于普通的元组,这意味着你可以既使⽤整数索引,也可以使⽤名称来访问namedtuple:

from collections import namedtuple
Animal = namedtuple('Animal', 'name age type')
perry = Animal(name="perry", age=31, type="cat")
print(perry[0])
## 输出: perry

最后,你可以将⼀个命名元组转换为字典,⽅法如下:

from collections import namedtuple
Animal = namedtuple('Animal', 'name age type')
perry = Animal(name="Perry", age=31, type="cat")
print(perry._asdict())
## 输出: OrderedDict([('name', 'Perry'), ('age', 31), ... 

2、Enum 

另⼀个有⽤的容器是枚举对象,它属于enum模块,存在于Python 3.4以上版本中。Enums(枚举类型)基本上是⼀种组织各种东
西的⽅式。
让我们回顾⼀下上⼀个'Animal'命名元组的例⼦。它有⼀个type字段,问题是,type是⼀个字符串。那么问题来了,万⼀程序员输⼊了Cat,因为他按到了Shift键,或者输⼊了'CAT',甚⾄'kitten'?
枚举可以帮助我们避免这个问题,通过不使⽤字符串。考虑以下这个例⼦:

from collections import namedtuple
from enum import Enum
class Species(Enum):
    cat = 1
    dog = 2
    horse = 3
    aardvark = 4
    butterfly = 5
    owl = 6
    platypus = 7
    dragon = 8
    unicorn = 9
    # 依次类推

Animal = namedtuple('Animal', 'name age type')
perry = Animal(name="Perry", age=31, type=Species.cat)
drogon = Animal(name="Drogon", age=4, type=Species.dragon)
tom = Animal(name="Tom", age=75, type=Species.cat)
charlie = Animal(name="Charlie", age=2, type=Species.kitten)

 现在,我们进⾏⼀些测试:

print(charlie.type == tom.type)
# True
print(charlie.type)
# <Species.cat: 1>

这样就没那么容易错误,我们必须更明确,⽽且我们应该只使⽤定义后的枚举类型。
有三种⽅法访问枚举数据,例如以下⽅法都可以获取到'cat'的值:

  • Species(1)
  • Species['cat']
  • Species.cat

摘自:《python进阶》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,可以使用python-docx库来操作Word文档,包括创建表格和设置表格样式。以下是一个简单的示例代码: ```python from docx import Document from docx.enum.table import WD_TABLE_ALIGNMENT from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.shared import Cm # 创建文档对象 document = Document() # 添加表格 table = document.add_table(rows=3, cols=3) # 设置表格对齐方式 table.alignment = WD_TABLE_ALIGNMENT.CENTER # 设置表格样式 table.style = 'Table Grid' # 设置表格列宽 table.columns[0].width = Cm(4) table.columns[1].width = Cm(6) table.columns[2].width = Cm(8) # 设置表格内容 table.cell(0, 0).text = '姓名' table.cell(0, 1).text = '年龄' table.cell(0, 2).text = '城市' table.cell(1, 0).text = '张三' table.cell(1, 1).text = '25' table.cell(1, 2).text = '北京' table.cell(2, 0).text = '李四' table.cell(2, 1).text = '30' table.cell(2, 2).text = '上海' # 对齐表格内容 for row in table.rows: for cell in row.cells: paragraphs = cell.paragraphs for paragraph in paragraphs: paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER # 保存文档 document.save('example.docx') ``` 在上面的示例代码中,我们首先导入了需要使用的库。然后,我们创建了一个新的Word文档对象,并添加了一个3行3列的表格。接下来,我们设置了表格的对齐方式和样式,以及每一列的宽度。然后,我们填充了表格的内容,并对齐了表格中的文本。最后,我们保存了文档。 这只是一个简单的示例,您可以根据需要进行更改和扩展。有关更多信息,请参阅python-docx库的文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值