Python 3 cookbook 学习笔记(一)

全书链接:https://python3-cookbook.readthedocs.io/zh_CN/latest/index.html

最近在看这本书,感觉知识点挺丰富,结合个人理解和需要,整理并记录下学习点。

1.1 解压分解序列

通过赋值操作可以实现对可迭代对象的解压分解。

# 分解元组, 得到 x = 4, y = 5
x,y = (4,5)

# 分解列表
name, shares, price, date = [ 'ACME', 50, 91.1, (2012, 12, 21) ]

# 分解字符串
a, b, c, d, e = 'Hello'

注意:被赋值变量个数与可迭代对象元素个数要匹配,否则会报错;若只想解压部分值赋值给变量,可采用如下方式:

data = [ 'ACME', 50, 91.1, (2012, 12, 21) ]
_, shares, price, _ = data

通过单下划线变量来占位,但最终这些变量会被丢掉不使用。

1.2 单星号标记变量

刚提到,若变量个数与可迭代对象元素个数不匹配会报错。倘若可迭代对象中元素个数过多,想提取的变量只有特定几个,该如何实现?

在要被赋值的变量前用单星号进行标记,表示该变量为可变变量,其被赋值内容将由其它变量赋值操作决定,剩余元素会以列表的形式赋值给该可变变量。

record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212')
name, email, *phone_numbers = record
# name = 'Dave'
# email = 'dave@example.com'
# phone_numbers = ['773-555-1212', '847-555-1212']

注意,星标的可变变量类型是列表,即使可迭代对象中对应的元素为空,也将以空列表的形式赋值给该变量。

1.3 固定大小的队列

collections 模块中的 deque(maxlen=N) 可以构造一个固定大小为 N 的队列,当第 N+1 个元素加入时,队列会移除队列中旧元素维持队列大小,在该队列两端插入或删除元素的时间复杂度都是 O(1)。

from collections import deque

q = deque(maxlen = 3)
q.append(1)
q.append(2)
q.append(3)
q.append(4)
q.append(5)
print(q)
# 输出:deque([3, 4, 5], maxlen=3)

该队列除了通过 append() 和 pop() 在尾端增删元素,还可以通过 appendleft(n) 和 popleft() 在队列开头增删元素。

# 左侧加入 100,得到 [100,3,4]
q.appendleft(100)
# 右侧移除一个元素,得到 [100,3]
q.pop()
# 左侧移除一个元素,得到[3]
q.popleft()
print(q)
# 输出:deque([3], maxlen=3)

注意,当队列已满时,通过 appendleft(n) 在队列左侧继续添加元素,则队列将会移除最右侧元素;若通过 append(n) 在最右侧添加元素时,则移除最左侧的元素。

该译本中的描述:“当新的元素加入并且这个队列已满的时候, 最老的元素会自动被移除掉”有误导,已经通过 GitHub Issue 进行反馈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值