Python cookbook笔记——可迭代对象的分解

1.将序列分解为单独的变量

1.1序列的分解

1)简单赋值操作即可实现序列的分解,要求是变量总数和结构要与序列相吻合

2)不仅仅是元组或者列表,只要对象恰好是可迭代的,就可以执行分解操作(如字符串、文件、迭代器、生成器)

3)分解操作时,有时候不需要某些值,可以选用一个用不到的变量名(常用 _ 或 ign )来作为要丢弃的值的名称(ign表示ignored)

p = (4, 5)
x, y = p
print(x, y)

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

s = 'Hello'
a, b, c, d, e = s
print(a, b)

1.2从任意长度的可迭代对象中分解元素

"  *表达式 " 的应用

*修饰的变量可以位于列表的第一个位置,最后一个位置或者是中间位置

也可以用*表达式来丢弃好几个值  如 *_

records = [
('foo', 1, 2),
('bar', 'hello'),
('foo', 3, 4)
]


def do_foo(x, y):
print('foo', x, y)


def do_bar(s):
print('bar', s)


for tag, *args in records:
if tag == 'foo':
do_foo(*args)
elif tag == 'bar':
do_bar(*args)

保留最后的N个元素(应用 collections.deque)

from collections import deque


def search(lines, pattern, history=5):
previous_lines = deque(maxlen=history)
for line in lines:
if pattern in line:
yield line, previous_lines
previous_lines.append(line)


# Example use a file
if __name__ == '__main__':
with open('class_study.py') as fobj:
for line, prevlines in search(fobj, 'print', 5):
for pline in prevlines:
print(pline, end=' ')
print(line, end=' ')
print('-'*20)
原文地址:https://www.cnblogs.com/QiLF/p/9318904.html