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)
'''