python3 生成器实操备忘

#!/usr/bin/env python3
#生成器:
#使用 yield 实现斐波那契数列
def fibonacci(n):
    i,before,after = 0,0,1
    while i < n:
        yield before
        before,after = after,before + after
        i += 1
b = int(input("shuiang:"))
a = fibonacci(b)
print(next(a))
print("干点别的事!")
print(next(a))
'''
for i in a:
    print(i,end=" ")
print()
'''
'''
def func(): #带yield的函数为生成器。yield相当于return.起中断同时记录当前状态的作用!
    print("ok1")
    count = yield 1
    print("ok2")
    print(count)
    yield 2
    print("ok3")
    yield 3

a = func()
print(a)
'''
'''
#send()属性使用,生成器刚开始不能发送send.具有next()作用,同时在开头传递一个值给要执行的函数变量使用!
next(a)  #生成器刚开始不能发送send.
s = a.send("not")  #返回yield 2后面的2!发送的value("not")由前中断点yield 1前的变量接收!
print(s)
'''
'''
#第一种访问方式:
for i in a:
#    i     #循环执行各段语句!
    if i == 2:  #循环执行完第二段后,停止执行!
        break
'''
#第二种访问方式:
'''
s = next(a)
#执行 print("ok1"), yield 1 这两语句,并返回yield后面的值1; 中断同时记录当前状态。
print(s)
s = next(a)
#执行 print("ok2"), yield 2 这两语句,并返回yield后面的值2;
print(s)
'''
'''
def func(x):
    return x**2

a = (func(x) for x in range(5))  # (),a是一个生成器对象。可迭代
print(a)
#访问方式1:for
'''
'''
for i in a:   #节省内存,需要再取,用完释放内存!
    print(i)
'''
'''
#访问方式1:next(方法)
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a))   #超出报错:stopiteration
'''
#列表,集合生成式; ()会变成生成器对象。
'''
a = [x ** 2 for x in range(1, 10)]
b = [x * x for x in range(1, 11) if x % 2 == 0]
c = [m + n for m in 'ABC' for n in '123']
d = {'Java': "99", 'C': "99", 'C++': "99"}
L = [k + '=' + v for k, v in d.items()]
'''
'''
def func(x):
    return x**2
    
a = [func(x) for x in range(10)]  #for x in range(10)是条件,func(x)是操作,结果放入列表
print(a)
'''

posted @ 2019-01-14 10:38  挖坑达人  阅读(2)  评论(0编辑  收藏  举报