复习:迭代器与生成器
迭代器
可迭代协议 含有iter方法都是可迭代的
迭代器协议 含有next和iter的都是迭代器
特点:
节省内存空间
方便逐个取值,一个迭代器只能取值一次
生成器
生成器函数:
含有yield关键字都是生成器函数
生成器函数特点:
调用之后函数内的代码不执行,返回生成器
每次从生成器中取一个值就会执行一段代码,遇到yield就停止
如何从生成器中取值:
for循环:如果没有break会一直取
next:每次只取一个
send:不能用在第一个,取下一个值的时候给上一个位置传一个新的值
数据类型强制转换:会一次性把所有数据都读到内存里
生成器表达式
条件成立想放在生成器中的值 for i in 可迭代的 if 条件
作业讲解
1 处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕
def check_file(filename, aim):
with open(filename, encoding='utf-8') as f:
for i in f:
if aim in i:
yield i
g = check_file('你好', 's')
for i in g:
print(i.strip())
2 写生成器,从文件中读取内容,在每一次读取到的内容之前加上###之后再返回给用户
def check_file(filename):
with open(filename, encoding='utf-8') as f:
for i in f:
yield '###'+i
g = check_file('你好')
for i in g:
print(i.strip())
今日内容
例子:打印进度条
import time
for i in range(0,101):
time.sleep(0.1)
char_num = i//2
per_str = '\r%s%% %s' % (i, '*'*char_num)
print(per_str, end='', flush=True)
内置函数
由于比较多,放在了processon里
https://www.processon.com/view/link/597fcacfe4b08ea3e2454ece
密码:G76Z
面试题
def extendlist(val, list=[]):
list.append(val)
return list
list1 = extendlist(10)
list2 = extendlist(123, [])
list3 = extendlist('a')
print(list1)
print(list2)
print(list3)