闭包:将函数作为返回值返回
实例1:
def say(word):
def name(name):
print(word,name)
return name
hi = say('你好')
hi('小明') #你好 小明
bye=say('再见')
hi('小明') #再见 小明
实例2:
def func():
res = []
def put(x):
res.append(x)
def get():
return res
return put,get
p,g = func()
p(1)
p(2)
print("当前res值:",g()) #当前res值: [1, 2]
p(3)
p(4)
print("当前res值:",g()) #当前res值: [1, 2, 3, 4]
yield关键字可以将函数执行的中间结果返回但是不结束程序。
实例:
def func(n):
i=0
while i<n:
yield i
i +=1
for i in func(10):
print(i)
yield关键字的作用就是把一个函数变成了一个generator(生成器)
关于实现斐波那契的几种比较:
第一种:
def fab(max):
n,a,b=0,0,1
while n<max:
print(b)
a,b=b,a+b
n=n+1
fab(5)
注意:以上直接在函数中打印数字会导致该函数可复用性变差
第二种:
def fab(max):
n,a,b=0,0,1
L=[]
while n<max:
L.append(b)
a,b=b,a+b
n=n+1
return L
for i in fab(5):
print(i)
第二种函数在运行中占用的内存会随着参数max的增大而增大
第三种:
def fab(max):
n,a,b=0,0,1
while n<max:
yield(b)
a,b=b,a+b
n=n+1
for i in fab(5):
print(i)
第三种比较合理!