下面内容是自己的一些理解,不保证正确性
一:迭代器
使用场景: 当对象特别大时,使用迭代器,因为使用迭代器时,不是全部加载到内存中。并且用迭代器时,用完就不存在了。
迭代器代码示例:
import sys
a = [1,2,3,5,88,7,8,9,10,11,12,14]
b = iter(a)
print(next(b))
print(next(b))
print(next(b))
print(next(b))
import sys
a = [1,2,3,5,88,7,8,9,10,11,12,14]
b = iter(a)
while True:
try:
print(next(b))
except StopIteration:
sys.exit()
使用for循环遍历迭代器:
import sys
a = [1,2,3,5,88,7,8,9,10,11,12,14]
b = iter(a)
for i in b:
print(i)
定义一个迭代器,必须有 __ iter__的申明:
class MyIter:
def __init__(self, m):
self.data = m
self.length = len(m)
self.index = -1
def __iter__(self):
return self
def __next__(self):
if self.index < self.length-1:
self.index += 1
else:
raise StopIteration
return self.data[self.index]
————————————————
版权声明:本文为CSDN博主「Jairoguo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Jairoguo/article/details/104483824
二: 生成器
列表推导式与生成器表达式的区别在于,生成器表达式更省内存
生成器表达式与列表推导式的写法几乎一摸一样,将列表推导式的[]换成()就是生成器表达式,生成器表达式也有循环模式和筛选模式,多层循环构建。
##列表推倒式
l = [i for i in range(1,11)]
print(l)
##生成器
l = (i for i in range(1,11))
print(l)
for i in l:
print(i)
1.生成器是一个不断产生值的函数,包含yield语句的函数是一个生成器
2.生成器每次产生一个值后,该函数将被冻结,不在执行未完成的语句,直到被再次唤醒后在从刚才的位置继续执行,产生下一个值,如此循环往复,每次只计算生成一个值
3.yield通常配合for循环使用,为for循环源源不断的每次一个的输出值
生成器就是拿一个,用完就删;列表是全部拿完再处理。
def gen(n):
for i in range(n):
yield i ** 2
for i in gen(1000):
print(i)