生成器

Posted wxl1025

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成器相关的知识,希望对你有一定的参考价值。

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'pythoni期' 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)))

以上是关于生成器的主要内容,如果未能解决你的问题,请参考以下文章

python 生成器:生成器基础生成器表达式

python 生成器:生成器基础生成器表达式

生成器和生成器表达式

Python-生成器

生成器 生成器函数

python列表生成器与生成器