首先之前学了函数
显示函数的形式:
def fib(max):
n,a,b = 0,0,1
while n < max
print(b)
a,b = b,a+b
n = n+1
return 'done'
f = fib(10)
print(f)
这时候,这一串代码代表一个函数,fib(max)代表一个附带参数的函数 ,并且返回值是done,所以当出现fib(10)时,他就会将参数传给max,然后运行,所以会将所有值打出来,然后print(f)是done。
那么如何将一个函数变成一个生成器呢?
将print(b)改为yield b即可
def fib(max)
n,a,b = 0,0,1
while n<max:
yield b
a,b=b,a+b
n=n+1
return 'done'
f = fib(10)
print(f)
for i in f:
print(i)
这时候就变成一个生成器了,后面的执行结果为:<generator object fib at 0x000000000BAD3AF0>,和一串数。
我们如何调用呢?
一种方法:
print(f.__next__()) ,双下划线。当出现这个的时候,其实是生成器还没有开始运行,然后出现一个运行一步再跳出来。这时候我们可以在运行下一步之前我们进行一些新的功能。比如:
print(f.__next__())
print("------------") print(f.__next__())