标签:表达 closed 分享图片 -- result 生成器 pre 内存 字符
迭代器:不依赖索引的迭代取值方式
可迭代对象:内置有__iter__方法对象
迭代器对象:执行可迭代对象__iter__()方法得到的返回值
迭代器对象内置有__next__()方法和__iter()方法
有索引的数据类型:字符串,列表,元祖
没有索引:字典,集合,文件
dic = {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘} dic_iter = dic.__iter__() print(dic_iter.__next__())
for循环的底层运行机制:
迭代器的优缺点:
优点:
1.不依赖于索引取值
2.节省内存
缺点:
1.只能取一次值,除非重新得到新的迭代器对象
-----------------------------------------------------------------------------------------------------------------
生成器:自定义迭代器的方式。在函数内有yield关键字,得到一个返回值为生成器对象。
def f1(): print(‘first‘) yield 1 print(‘second‘) yield 2 print(‘third‘) yield g=f1() result=g.__next__() print(result)
模拟一个range函数
def my_range(x, y, step=1):
while x < y:
yield x
x += step
else:
print(‘exception‘)
for item in my_range(1, 10, 2):
print(item)
总结yield:
1.自定义迭代器的方式
2.和return,都有返回值,return只能返回一次
生成器表达式:节省内存
代码1:
l1 = [‘a‘, ‘b‘, ‘c‘, ‘d‘] l2 = (i for i in l1 if i != ‘a‘) print(next(l2))
代码2:获取文件中最长一行的字符数
with open(‘a3.log‘, mode=‘rt‘, encoding=‘utf-8‘) as f: print(max(len(i) for i in f))
标签:表达 closed 分享图片 -- result 生成器 pre 内存 字符
原文地址:https://www.cnblogs.com/cooky/p/9419920.html