高阶函数和闭包

一、高阶函数

  --高阶函数形成条件:

    --函数作为参数传递  注意:不带括号

    --函数作为返回值返回  注意:不带括号

    例子:filter(lamda i : i % 3==0, list), sort(key = len, list)

二、匿名函数

  lamda函数,当函数体内容较简单且不希望给函数命名时用到匿名函数

  --公式:lamda 参数项目 :返回值(不需要写return)如:lamda i : i+1,表示所有的 i 加1操作。

三、闭包

  --当函数作为返回值返回时,可以形成闭包。当有些数据不希望在全局中被访问或者希望保护数据安全时应用。

  --闭包的三个必要条件

    --函数嵌套

    --把内部函数作为返回值返回(不需要加括号)

    --内部函数必须要用到外部函数的变量  

  例子:求  列表中所有元素的平均值

def my_avg():  

       arr = []  

  def average(n):

    arr.append(n)  

  return sum(arr)/len(arr)

  return average

averge = my_avg()

averge(10) 

四、装饰器

   --  装饰器的本质:传入一个旧的函数,然后对旧函数进行改造,然后返回一个新的函数。需要一个函数去包装旧函数,包装完之后还必须要返回这个新的函数,所以再嵌套一个函数把这个新函数返回了。因此总共有三层函数:

最外层函数:

  新函数

    旧函数

   --格式:def f_out(old_func):

          new _func(*args, **args):

          装饰1(代码块)

          res = old_func (*args, **args)

          装饰2(代码块)

          return res

        return new_func     

   --常用用法:

    --@f_out

    old_func()  

猜你喜欢

转载自www.cnblogs.com/henji1266/p/12003303.html