python基础-函数式编程
概念:
- 电脑运算视作数学上的函数计算
- 高阶函数:map,reduce,filter
- 无副作用,相同的参数调用时钟产生同样的结果
闭包Closure
为什么为出现闭包?
我们想要在函数外部获取函数内部的局部变量,但是python由是 自下而上的链式作用域,所以不行,那么用相反的思想,f1函数内部再创建一个函数f2,f2就可以访问f1的局部变量,像这样
def f1():
n=999
def f2():
print(n)
外部函数返回内部函数的引用,那么就可以在全局中访问f1的局部变量了。
用途
- ① 可以读取函数内部的变量,
- ②让这些变量的值始终保持在内存中。
例子:
def cache(func):
store = {} # 外部自由变量
@wraps(func)
def _ (n): # 闭包函数
if n in store:
return store[n]
else:
ret = func(n)
store[n] = ret
return ret
return _
def f(n):
if n<=1:
return 1
return f(n-1) + f(n-2)
闭包:引用了外部自由变量的函数
自由变量:不在当前闭包函数定义的变量
特性:自由变量会和闭包函数同时存在