Python生成器

生成器:自动实现迭代器功能的,叫生成器

1生成器语法上和函数类似

2自动实现迭代器协议

3状态挂起:使用yield代替返回值,可挂起该生成器函数的状态


 

#生成器函数的send()方法(这个感觉比较重要,放前面了)
def sayHi():
    #用yield代替return,可以返回多个yield
    yield "好1"
    # x = yield 可以接收send传过来的值,赋值给x
    x = yield
    print("yield2 = ",x)
    yield "好3"
hello_python = sayHi()
#打印第1个返回结果yield的值“好1”没问题
print(hello_python.__next__())
#打印第2个返回结果yield的值“None”是为什么呢,因为yield2还没有赋值
print(hello_python.__next__())
#打印第3个返回结果yield的值“好3”没问题,执行send之前第2个yield的值未有值,
# 执行send后,函数从第2个yield后开始执行,于是第2个yield就有了值,并执行到第3个yield值,完成,看不懂多看几遍吧
print(hello_python.send("就你2"))

 

生成器函数:

#生成器函数
def sayHi():
    #用yield代替return,可以返回多个yield
    yield ""
    yield "你们挺好啊"
    yield "你好"
hello_python = sayHi()
print(sayHi().__next__())
print(sayHi().__next__())
print("-" * 50)
print(hello_python.__next__())
print(hello_python.__next__())
print(hello_python.__next__())

生成器三元表达式(多一元都不行)

#生成器三元表达式(多一元都不行)
name = "candy"
name = "james"
#满足结果放前面(一元),条件判断满足(一元),不满足结果放最后面(一元)
res = "Good" if name == "candy" else "bad"
print(res)

生成器表达式:

#生成器表达式(二元即可,但不能超过三元):
l = ("号码:%s" %i for i in range(9))
print(l.__next__())
print(l.__next__())

列表解析(list解析):

#列表list解析(生成器表达式+[]就变成列表解析了?,就是把结果放到list里,如果这个值过大,电脑就会炸)
#结果放前面(一元),过程放中间(一元),条件放后面(三元)
ll = ["号码:%s" %i for i in range(9) if i > 5 ]
print( ll )

 

posted on 2019-05-08 16:10  詹生  阅读(541)  评论(0编辑  收藏  举报

导航