这篇是个人python的学习笔记,收集包括但不限于各类书籍和项目中需要使用的纯python知识。
争取每日更新。
1. 序列拆分为独立变量
任何可迭代对象可以通过赋值拆分为独立变量
p = (4, 5)
x, y = p
数量不匹配会报错误
ValueError:need more than xx values to unpack
2. 任意长可迭代对象中分解元素
如果可迭代对象长度大于需要分解出的N个元素,会报分解值过多错误(too many value to unpack),这个时候可以使用 *表达式解决问题
first, *middle, last = range(10)
print(first)
print(*middle)
print(last)
输出:
0
1 2 3 4 5 6 7 8
9
一个递归算法:
def sum_(items):
head, *tail = items
return head + sum_(tail) if tail else head
print(sum_([1, 2, 3, 4, 5]))
输出:
15
3. 使用deque保留最近记录
collections.deque可以模拟简单队列,实现类似功能
from collections import deque
q = deque(maxlen=3)
q.append(1)
q.append(2)
q.append(3)
print(q)
q.append(4)
print(q)
q.appendleft(0)
print(q)
输出
deque([1, 2, 3], maxlen=3)
deque([2, 3, 4], maxlen=3)
deque([0, 2, 3], maxlen=3)
相较于列表更多的操作是支持两端操作,比如添加或者弹出
4. yield的使用
实现yield的函数为生成器
def test():
print("starting:")
i, j = 0, 0
while 1:
print('i=', i)
i += 1
yield i
print('j=', j)
j += 1
yield j
t = test()
print(next(t))
print('-'*5)
print(next(t))
print('-'*5)
print(next(t))
print('-'*5)
print(next(t))
print('-'*5)
print(next(t))
输出:
starting:
i= 0
1
-----
j= 0
1
-----
i= 1
2
-----
j= 1
2
-----
i= 2
3