练习27(生成器)

本文介绍了如何使用生成器函数和生成器表达式创建迭代器,探讨了yield与return的区别,并展示了生成器在内存效率和实例中的优势。通过实例演示了send与next的用法,以及生成器在高效编程中的应用,包括衣物编号生成和函数的灵活性比较。
摘要由CSDN通过智能技术生成

练习27


# 生成器: 就是自用python代码写的迭代器,生成器的本质就是迭代器
# l1 = [1,2,3]
# iter1 = iter(l1)

# 用以下俩种方式构建一个生成器:
# 1. 通过生成器函数
# 2. 生成器表达式


# 生成器函数:
    # 函数
# def func1(x):
#     x += 1
#     return x
# func1(5) # 函数的执行命令,并接收函数的返回值
# print(func1((5)))

    # 生成器函数:
# def func1(x):
#     x += 1
#     print(111)
#     print(111)
#     print(111)
#     print(111)
#     print(111)
#     yield x
#     print(222)
#     yield 'alex'
# g_obj= func1(5) # 生成器函数对象
# print(g_obj) # <generator object func1 at 0x000001D1E888FB30>
#
# print(g_obj.__next__())
# print(g_obj.__next__())

# 一个netx 对应一个 yield
# yield 将值返回给 生成器对象.__netx__()

# yield return 区别
# return 结束函数,给函数的执行者返回值
# yield 不会结束函数,一个netx对应一个yield,给生成器对象.__netx__()返回值

# 迭代器函数 vs 生成器函数
# 区别1: 自定制区别
# l1 = [1,2,3,4,5]
# l1.__iter__()

# def func1(x):
#     x += 1
#     yield x
#     x += 3
#     yield x
#     x += 5
#     yield x
# g1 = func1(5)
# print(g1.__next__())
# print(g1.__next__())
# print(g1.__next__())

# 区别1: 内存级别的区别
# 迭代器是需要可迭代对象进行转化. 可迭代对象非常占内存
# 生成器直接创建,不需要转化,从本质就节省内存

# def func1():
#     for i in range(10000):
#         yield i
# g1 = func1()
# for i in range(50):
#     print(g1.__next__())

# send 与 next

# def func1():
#     # print(1)
#     count = yield 6
#     print(count)
#     # print(2)
#     count1 = yield 7
#     print(count1)
#     # print(3)
#     yield 8
#
# g = func1()
# next(g)
# # g.send('alex')
# g.send('alex')
# g.send('taibai')
# g.send('taibai')

# send 与 next 一样,也是对生成器取值(执行一个yield)的方法
# send 可以给上一个yield传值
# 第一次取值永远都是next (.__netx__())
# 最后一个yield 永远也得不到send传的值

# 实例: 生成器的一些好处

# def cloth1(n):
#     for i in range(n+1):
#         print('衣服%s号' % i)
# cloth1(10000)
# 
# def cloth2(n):
#     for i in range(1,n+1):
#         yield '衣服%s号' % i
# g = cloth2(10000)
# for i in range(50):
#     print(g.__next__())
# for i in range(50):
#     print(g.__next__())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值