码迷,mamicode.com
首页 > 编程语言 > 详细

python note 12 生成器

时间:2019-04-22 22:39:33      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:min   pytho   执行函数   append   none   for   return   UNC   int   

1、生成器函数

# 函数中如果有yield 这个函数就是生成器函数. 生成器函数() 获取的是生成器. 这个时候不执行函数
# yield: 相当于return 可以返回数据. 但是yield不会彻底中断函数. 分段执行函数.
# gen.__next__() 执行函数. 执行到下一个yield.
# gen.__next__() 继续执行函数到下一个yield.

不用生成器可能导致内存不够

def order():
    lst = []
    for i in range(10000):
        lst.append("衣服"+str(i))
    return lst
ll = order()
print(ll)

使用生成器逐个输出

def order():
    for i in range(10000):
        yield "衣服"+str(i)
g = order() # 获取生成器
mingwei = g.__next__()
print(mingwei)
#输出衣服0
zhaoyining = g.__next__()
print(zhaoyining)
#输出衣服1

2、send()用法

# send() 和__next__()是一样的. 可以执行到下一个yield, 可以给上一个yield位置传值

def func():
    print("我是第一个段")
    a = yield 123
    print(a)
    print("石可心是第二段")
    b = yield 456
    print(b) 
    print("赵一宁是第三段")
    c = yield 789
    print(c)
    print("刘伟是最后一个段")
    yield 79  # 最后收尾一定是yield,否则会报错
g = func()
print(g.__next__())#没有上一个yield 所以不能使用send() 开头必须是__next__()
print(g.send("煎饼果子"))#赋值给a
print(g.__next__())
print(g.__next__())
#我是第一个段
#123
#煎饼果子
#石可心是第二段
#456
#None
#赵一宁是第三段
#789
#None
#刘伟是最后一个段
#79

 

def eat():
    print("我吃什么啊")
    a =  yield  "馒头"
    print("a=",a)
    b =  yield  "鸡蛋灌饼"
    print("b=",b)
    c =  yield  "韭菜盒子"
    print("c=",c)
    yield  "GAME OVER"
gen = eat()      # 获取生成器
ret1 = gen. __next__()
print(ret1) # 馒头
ret2 = gen.send("胡辣汤")
print(ret2)
ret3 = gen.send("狗粮")
print(ret3)
ret4 = gen.send( "猫粮")
print(ret4)
#我吃什么啊
#馒头
#a= 胡辣汤
#鸡蛋灌饼
#b= 狗粮
#韭菜盒子
#c= 猫粮
#GAME OVER

# for的内部一定有__next__()

def func():
    yield 1
    yield 13
    yield 26
    yield 88
    yield 46
    yield 100
for i in func(): # for的内部一定有__next__()
    print(i)
print(list(func())) # 内部都有__next__()

 

python note 12 生成器

标签:min   pytho   执行函数   append   none   for   return   UNC   int   

原文地址:https://www.cnblogs.com/alifetimelove/p/10753379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!