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)