#创建一个迭代器
#注意 迭代器不是独立存在的,需要一个可迭代对象做‘嫁衣’
l_data=[1,2,3,4,5]
print(l_data)
print(type(l_data))
#通过iter函数生成 python的内置方法/函数
new_iter=iter(l_data)
print(type(new_iter))
print(new_iter)
#通过__iter__()数据类型/对象的特殊方法 转化成迭代器
new_magic=l_data.__iter__()
print(new_magic)
#使用next()提取数据 python的内置函数
print(next(new_magic))
for y in new_magic:
print(y)
#一个最直接的生成器
def gen_num():
yield 1 #调用一个返回一个
yield 2 #再次调用再返回
yield 3 #以此类推
yield 4 #以此类推
yield 'hello'
my_gen=gen_num()#注意这里一定要先赋值给变量,不能直接操作,简单理解就是生成器需要一个‘仓库’
print(my_gen)
print(next(my_gen))
# 生成器具有可迭代对象迭代器的特征,但是可控性、规则性更强
# 可以使用next,可以被for
for x in my_gen:
print(x)
#以逻辑模式打造一个生成器
def gen_num():
n=[1,2,3]
for i in n:
yield i #yield返回一次 会阻塞当前循环,直到生成器再次被调用才会放行继续执行
print('new start') #终止的位置在这里
my_num=gen_num()
for z in my_num:
print(z)
#无限数据的生成器--生成器的价值之一
#先看函数运行逻辑 遇到return就结束
def hello():
print('python')
return 'good'
print(hello())
def unlimited():
n = 0
while True:
yield n
n=n+1
print('我是yield后面的小弟')
nums = unlimited()
print(next(nums))
#通过元组+推导式构建生成器
my_gen=(x for x in range(10))
print(my_gen)
for n in my_gen:
print(n)
#如何一口气把迭代器或生成器里的数据都提取出来
l_data=[1,2,3,4]
new_data=iter(l_data)
print(list(new_data))
#如何释放迭代器中的内存
n_data=[1,2,3,4]
new_data = iter(n_data)
#这里我们做一个删除动作,释放掉n_data的内存
del n_data
#观察n_data是否存在
print(n_data)
实操演示:迭代器与生成器
最新推荐文章于 2024-10-27 11:29:42 发布