python12 生成器

生成器

生成器的本质是迭代器.

生成器的3种创建方法

1.通过生成器函数

2.通过生成器表达式创建生成器

3.通过数据转换

生成器函数:

def func():

    print("我是周杰伦")

    return "昆凌"

    print("我是王力宏")

    return "李云迪"

#return直接返回结果,结束函数的调用,所以我是王力宏就不会打印出来。

yield返回结果,可以让函数分段执行

如果把return改成yield,当前这个函数就是生成器函数

func()  #通过函数func()来创建一个生成器,

print(func())    #generator object func at 0x 000000237B8E0,换成yield后的结果

g = func()             #通过函数func()来创建一个生成器,要使用的话 需要用__next()__来使用。

print(g.__next__())   #我是周杰伦   昆凌

print(g.__next__())   #我是王力宏  李云迪

最后一个yield之后,如果在进行__next__()会报错。

#return直接返回结果,结束函数的调用;yield也是返回结果,可以让函数分段执行

 

send()函数:

def func():

    print(“大渣粥”)

    a =   yield “11”

    print(“狗不理”)

    b =  yield “22”

    print(“大麻花”)

    c =  yield “33”

g = func()

print(g.__next__())    # 大渣粥 11

print(g.send(1))        # 狗不理  22,从上一个yield结束的当前位置接着走,走到下一个yield;把1发送到a=后面,那么a=1

print(g.__next__())   # 大麻花  33,

__next__():让生成器向下执行一次

send():也可以让生成器向下执行一次

#next()可以让生成器向下执行一次

send()也可以让生成器向下执行一次,给上一个yield传一个值,第一个位置不能用send(),必须用next();最后一个也不要用send()传值

 

推倒式

不用推倒式的方法:

lst = [ ]

for i in range(1,15):

    lst.append(i)

print(lst)

采用推倒式的方法:

语法[最终结果(变量) for 变量 in 可迭代对象]

lst = 【‘python%s’ % i for i in range(1,15)】

#[‘python1’,‘python2’,‘python3’,‘python4’。。。‘python14’]

筛选模式:[结果 for 变量 in 可迭代对象 if 条件]

#获取1-100内所有偶数

lst = [i for i in range(1,100) if i % 2 == 0]

print(lst)

#寻找下面名字中有两个带e的人的名字

names=[['Tom','Billy','Jefferson','Steven'],['Alice','Jilly',‘sheery’]]

lst = [name for first in names for name in first if name.count('e') == 2]

print(lst)

 

生成器表达式和列表推倒式的语法基本上是一样的,只是把【】替换成()

gen = (i for i in range(10))

print(gen)  # generator object at 0x00000bb12

for el in gen:

    print(el)  # 0 1 2 3    9

print(list(gen)) #[0,1,2,3    9]

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值