生成器

1,生成器:就是自己用python写的迭代器,生产器的本质就是迭代器
    用以下两种方式构建生成器
  • 通过生成器
  • 生成器表达式
函数
def fun():
    x += 1
    return x
fun() #函数的执行命名,并接受函数返回值
 
def fun1():
    x += 1
    yield x
g = fun1()  #生成器函数对象
g.__next__() #调用 
 
#一个next对应一个 yield
#yield 将返回给生成器对象__next__()
 
return and yield
return 结束函数, 给函数执行者返回值
yield 不会结束函数, 一个next对象一个yield给生成器对象__.next__()返回值
 
区别:
    1:内存级别的区别
    2:迭代器是需要可迭代对象转化, 可迭代对象是非常占内存的
    3:生成器直接创建, 不需要转化, 从本质就节省内存。
 
 
send 与 yield 
def fun():
    print(1)
    yield 1
    print(2)
    yield 2
g = fun()
g.send('alex')
#send 与 next 一样, 也是对生成器取值(执行一个yield)的方法
#send 可以给上一个yield传值
#第一次永远都是next
#最后一个yield永远也得不到send传的值
 
 
列表推到式:一行代码搞定你需要的任何列表
#循环模式 [变量 (加工后的变量) for ]
lis = [i for i in range(1,101)]
#筛选模式[变量 (加工后的变量) for i in name if 条件]
列表推导式:
    优点:一行解决 , 方便
    缺点:容易着迷, 不易排错, 不超过太刻意用
#列表推到式不能解决所有列表的问题,不要刻意去用
 
生成器表达式:将列表推到式的[] 换成()即可。
G = (i for i in range(1,10000000000000))
每次只取一个值
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/leiwenxuan/p/9507453.html