生成器,推导式,

1.生成器

def func():
print("111")
yield 222
print("333")
yield 444
print(func())


 

 
 

 

 

 

1 def func():
2     print("111")
3     yield 222
4 ret=func()
5 res=ret.__next__()
6 
7 print(res)

这里ret=fun 不会执行函数,拿到的是生成器  有了生成器才可以进行下一个  

1 def cloth():
2     for i in range(0,10000):
3         yield "衣服"+str(i)
4 cl=cloth()
5 print(cl.__next__())
6 print(cl.__next__())
7 print(cl.__next__())

这里为什么要用到生成器呢 以为他的惰性 如果一次性出了全部的数字,那么多的内存会没有地方反而占用更大空间

由于和迭代器一样的属性,用一个出一个才会是最完美的方法

 

 

2.send

 1 def eat():
 2     print("我吃什么啊")
 3     a=yield "馒头"
 4     print("a",a)
 5     b=yield "大饼"
 6     print("b",b)
 7     c=yield  "韭菜盒子"
 8     print("c",c)
 9     yield  "gameover"
10 gen=eat()
11 ret1=gen.__next__()
12 print(ret1)
13 ret2=gen.send("胡辣汤")
14 print(ret2)
15 ret3=gen.send("狗粮")
16 print(ret3)
17 ret4=gen.send("猫粮")
18 print(ret4)

 

send()和__next__() 的区别:

1.send 和next()都是要生成器走向下一次

2.send可以给上一个yield 的位置传递值,不能给最后一个yield 发送值,在第一次执行生成器代码的时候不能使用seng()

3.生成器可以使用for 循环来获取内部元素

 1 def func():
 2     print(111)
 3     yield 222
 4     print(333)
 5     yield 444
 6     print(555)
 7     yield 666
 8 gen = func()
 9 for i in gen:
10     print(i)

 

2.列表推导式

一句话 生成一个列表

语法:[  结果    for 循环   ]

1 lst=[i for  i  in  range(1,15)]
2 print(lst)

生成器表达式

1 gen=(i for i in range(15))
2 print(gen)

 

生成器表达式和列表推导式的语法基本上一样的,只是把[]换成{}

区别:

1.列表推导式比较耗内存,一次加载,生成器表达式几乎不占用内存,

2.得到的值不一样,生成器只有在访问的时候才取值,说白了,你找他要他才给你值,不找他要,是不会执行的

 

转载于:https://www.cnblogs.com/zhangqing979797/p/9469662.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值