python生成器推导式_python 生成器、生成器函数、推导式、生成器表达式

一、生成器

生成器的本质就是迭代器

生成器的特点和迭代器一样,取值方式和迭代器一样。(__next__(),send():给上一个yield传值)

生成器一般由生成器函数或者生成器表达是来创建

二、生成器函数

和普通函数没有区别。里面yield 的函数就是生成器函数

生成器函数在执行的时候,默认不会执行函数体,返回生成器

通过生成器的__next__() 分段执行这个函数

def fun():

print("aaaa")

yield 1 #返回数据

print("bbbb")

yield 2

gen = fun() #拿到生成器

gen.__next__() #执行函数,执行到下一个yield

gen.__next__() #继续执行,执行到下一个yield

send() 给上一个yield 传值,不能在开头(没有上一个yield),最后一个yield也不能用send()

def eat():

print("菜单")

a = yield "馒头"

print('a=',a)

b = yield "鸡蛋灌饼"

print('b=', b)

c = yield "手抓饼"

print('c=',c)

yield 'end'

gen =eat()

ret1 = gen.__next__()

print(ret1)

ret2 = gen.send("胡辣汤")

print(ret2)

ret3 = gen.send("小米粥")

print(ret3)

ret4 = gen.send("豆腐脑")

print(ret4)

三、推导式

1.列表推导式 [结果 for循环 条件筛选]

lis = [i for i in range(10)]

print(lis)

2.字典推导式 [k:v for循环 条件筛选]

di = {"1":"aaa","2":"bbb","3":"ccc"}

dic = {j:i for i,j in di.items()}

print(dic)

3.集合推导式 {k for循环 条件}

li = [2,3,5,3,1,8,9,4,5]

se = {el for el in li}

print(se)

四、生成器表达式

(结果 for循环 条件)

特点:

1.惰性机制

2.只能向前

3.节省内存

def fun():

print(111)

yield 222

g = fun()

g1 = (i for i in g)

g2 = (j for j in g1)

print(list(g)) #111 [222]

print(list(g1)) #[]

print(list(g2)) #[]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值