高阶函数,嵌套函数,装饰器

独自空忆成欢 提交于 2020-03-08 06:16:10

高阶函数、嵌套函数、装饰器

其实这三种都是函数,运用高阶函数和嵌套函数就能写出装饰器

装饰器的主要作用,是不修改原有函数代码,不改变原有函数调用方式,增加原有函数功能的一种函数,两种原则缺一不可。

举例:

import time

def timer(fun):
      def  decorery():
            start_time=time.time()
            fun()
            stop_time=time.time()
            print("the fun time :%s"%(stop_time-start_time))
      return decorery

@timer
def text()
       time.sleep(2)
       print("in the text")
text()

 timer就是一个装饰器,在没有改变text的代码及调用方式的情况下,为text增加了计算时间的功能。

这里有有几个问题,

一、如果text参数,而且参数个数不固定,怎么解决

那么久需要在decorery函数上面增加不固定形式参数。

decorery(*args,**kwars)

后面的调用把参数加入:

fun(*args,**kwars)

二、如果text有返回值

那么decorery就也需要返回值,return fun(*args,**kwars)

三、如果装饰器需要参数来增加装饰器的功能,怎么传递参数

这个就需要多一层函数嵌套:

import time


def timer(typee):
      def  caks(fun)
           if type=="local":
               def  decorery(*args,**kwars):
                    start_time=time.time()
                    fun(*args,**kwars)
                    stop_time=time.time()
                    print("the fun time :%s"%(stop_time-start_time))
                 return decorery
            else:
                  print("do nothing")
     return caks

@timer(type="local")
def text()
       time.sleep(2)
       print("in the text")
text()    

  这样就达到了传递参数的目的

 

其实,装饰器能达到目的,主要是运用了:

1、返回值可以是函数

2、函数也是变量,可以通过赋值给其他变量,然后通过变量加()来调用这个函数

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!