生成器

1.生成器
1.生成器本质就是迭代器,Python社区生成器与迭代器是相同的
唯一区别:生成器是我们用Python代码构建的
2.生成器产生方式
  • 生成器函数
  • 生成器表达式
  • 一些内置函数返回一个生成器
3.生成器函数
只要函数中出现了yield那么它就是生成器函数
def func():
    print(111)
    yield 2
    print(111)
    yield 3
    print(111)
    yield 
    print(111)
    yield 5
ret = func()  # 生成器对象
print(ret)  # <generator object func at 0x0000000001E10F68>
print(next(ret))   #一个next对应一个yield
4.yield与return的区别
return   结束函数,给函数的执行者返回值
yield    不结束函数,对应着给next返回值
#多个值皆通过元祖的形式返回
5.生成器举例
def eat_baozi_gen():
    for i in range(1,2001):
        yield f'{i}号包子'
ret1 = eat_baozi_gen()
print(next(ret1))
print(next(ret1))
...
for i in range(200):
    print(next(ret))
for i in range(200):
    print(next(ret))
6.yield from
将一个可迭代对象的每一个元素返回给next
节省代码,提升效率(代替了for循环)
def func():
    l1 = [1, 2, 3]
    yield l1
ret = func()
print(next(ret))
print(next(ret))
print(next(ret))
7.列表推导式
l1 = []
for i in range(1,101):
    l1.append(i)
print(l1)
列表推导式:一行代码构建一个有规律比较复杂的列表
l1 = [i for i in range(1, 101)]
print(l1)
构建方式:
1.循环模式:[变量(加工后的变量) for 变量 in iterable]
将10以内所有整数的平方写入列表
          print([i**2 for i in range(1, 11)])
100以内所有的偶数写入列表
          print([i for i in range(2, 101, 2)])
从python1期到python100期写入列表
          print([f'python{i}期' for i in range(1, 101)])
2.筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件]
三十以内可以被三整除的数。
          print([i for i in range(1, 31) if i % 3 == 0])      
优点:简单快捷    
缺点:可读性不高,不好排错
8.生成器表达式
与列表推导式相近  =>  循环模式,筛选模式
obj = (i for i in range(5))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
如何触发生成器(迭代器)取值
1.next(obj)
2.for循环
for i in obj:
   print(i)
3.数据转化
print(list(obj))
生成器节省内存
9.字典,集合推导式
与列表推导式相近  =>  循环模式,筛选模式
集合推导式
print({i for i in range(1, 101)})
字典推导式
{0: '小潘', 1: '怼怼哥', 2: '西门大官人'}
li = ['小潘', '蔡徐坤','西门大官人']
dic = {}
for index in range(len(li)):
    dic[index] = li[index]
print(dic)
print({i:l1[i] for i in range(len(li))})

转载于:https://www.cnblogs.com/wxl1025/p/11062481.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值