实操演示:迭代器与生成器

#创建一个迭代器
#注意 迭代器不是独立存在的,需要一个可迭代对象做‘嫁衣’
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值