函数退出之后还能保留状态,闭包或者全局变量或者生成器
定义一个生成器,用yield代替return
def counter():
i=0
while i<=5:
yield i #每次执行到这里的时候,生成一个数据,暂停并保留状态
i+=1
counter()
<generator object counter at 0x000001FEB4005A80>
#说明counter是个生成器了
#以下在交互页面实现
for i in counter(): #像调用函数一样调用,counter()生成器每次调用时提供一个数据
print(i)
0
1
2
3
4
5
def fib():
back1,back2=0,1
while True:
yield back1
back1,back2=back2,back1+back2
f=fib()
next(f)
0
next(f)
1
next(f)
1
next(f)
2
next(f)
3
next(f)
5
#生成器实现斐波拉契数列
生成器表达式
(i**2 for i in range(10))
<generator object <genexpr> at 0x000001FEB40065E0>
t=(i**2 for i in range(10))
next(t)
0
next(t)
1
next(t)
4
next(t)
9
next(t)
16
for i in t:
print(i)
25
36
49
64
81