初识python: 生成器

生成器定义理解,直接上代码:

#!/user/bin env python
# author:Simple-Sir
# time:20181005
# 生成器
'''
# 列表生成式
a=[i for i in range(10)]
print(a)

def fun_add(a,b):
    return a+b
b = [fun_add(i,j) for i in range(1,4) for j in range(4,7)]
print(b)
'''

'''
生成器: 一边循环一边计算的机制,就叫生成器generator
循环一次,计算一次,不需要先循环完再计算。
生成器只有在调用时才会生成相应的数据,
只记录当前位置的值
只有一个__next__方法 :获取下一个位置的值
'''
'''
# 生成器方式一:列表生成式
a = (i*2 for i in range(10))
print(a.__next__())
'''

'''
# 生成器方式二:函数做生成器
# 斐波拉契数列,除了第一个和第二个外,任意一个数都由前两数相加得到。
def fblq(max):
    n,a,b=0,0,1
    # n=0
    # a=0
    # b=1
    while n<max:
        # print(b)
        yield b # 将函数变成生成器,想要返回的值加yield,yield是一个类似return 的关键字
        a,b = b,a+b
        # 相当于 ==>
        # t = (b,a+b) -->(1,0+1)
        # a=t[0] -->1
        # b=t[1] -->0+1
        # 而不是 a=b,b=a+b
        n += 1
    return '执行完成' #异常消息
f = fblq(10)
print('打印第一个位置值',f.__next__())
print('打印下一个位置值',f.__next__())
print('打印下一个位置值',f.__next__())
print('开始循环打印')
'''

'''
# 循环打印
for i in f:
    print(i)
'''

'''
g = fblq(3)
while True:
    try:
        x=next(g)
        print('g',x)
    except StopIteration as e:
        print('错误信息',e.value)
        break
'''

'''
def scq_f():
    for i in range(5):
        for j in range(5):
            k=i+j
            #print(k)
            yield k #关键点,将函数变成生成器,即将函数保持中断状态
    return '错误信息'
# f = scq_f()
# for i in f:
#     print(i)
f=scq_f()

while True:
    try:
        x=next(f)  # 即:f.__next__()
        print('f',x)
    except StopIteration as e:
        print('错误信息:',e.value) #获取scq_f的return值
break '''

 

posted on 2018-10-20 11:20  Simple-Sir  阅读(192)  评论(0编辑  收藏  举报

导航