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)

闭包:引用了外部自由变量的函数
自由变量:不在当前闭包函数定义的变量
特性:自由变量会和闭包函数同时存在

参考:https://zhuanlan.zhihu.com/p/453787908

posted @ 2022-08-19 15:53  aleiyoy  阅读(18)  评论(0编辑  收藏  举报