zoukankan      html  css  js  c++  java
  • 第七篇 装饰器

    第九篇 装饰器

     
     

    一 什么是装饰器

    器即函数

    装饰即修饰,意指为其他函数添加新功能

    装饰器定义:本质就是函数,功能是为其他函数添加新功能

     

    二 装饰器需要遵循的原则

    1.不修改被装饰函数的源代码(开放封闭原则)

    2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式

     

    三 实现装饰器知识储备

    装饰器=高阶函数+函数嵌套+闭包

     

    四高阶函数

    高阶函数定义:
    1.函数接收的参数是一个函数名

    2.函数的返回值是一个函数名

    3.满足上述条件任意一个,都可称之为高阶函数

    高阶函数总结
    1.函数接收的参数是一个函数名
      作用:在不修改函数源代码的前提下,为函数添加新功能,
      不足:会改变函数的调用方式
    2.函数的返回值是一个函数名
      作用:不修改函数的调用方式
      不足:不能添加新功能

     

    五 函数嵌套

    复制代码
     1 def father(name):
     2     print('from father %s' %name)
     3     def son():
     4         print('from son')
     5         def grandson():
     6             print('from grandson')
     7         grandson()
     8     son()
     9 
    10 father('林海峰')
    复制代码
     

    六 闭包

    复制代码
     1 '''
     2 闭包:在一个作用域里放入定义变量,相当于打了一个包
     3 '''
     4 def father(name):
     5     def son():
     6         # name='alex'
     7         print('我爸爸是 [%s]' %name)
     8         def grandson():
     9             # name='wupeiqi'
    10             print('我爷爷是 [%s]' %name)
    11         grandson()
    12     son()
    13 
    14 father('林海峰')
    复制代码
     

    七 无参装饰器

    无参装饰器=高级函数+函数嵌套

    基本框架

    1 #这就是一个实现一个装饰器最基本的架子
    2 def timer(func):
    3     def wrapper():
    4         func()
    5     return wrapper

    加上参数

    1 def timer(func):
    2     def wrapper(*args,**kwargs):
    3         func(*args,**kwargs)
    4     return wrapper

    加上功能

    复制代码
    1 import time
    2 def timer(func):
    3     def wrapper(*args,**kwargs):
    4         start_time=time.time()
    5         func(*args,**kwargs)
    6         stop_time=time.time()
    7         print('函数[%s],运行时间是[%s]' %(func,stop_time-start_time))
    8     return wrapper
    复制代码

    加上返回值

    复制代码
    1 import time
    2 def timer(func):
    3     def wrapper(*args,**kwargs):
    4         start_time=time.time()
    5         res=func(*args,**kwargs)
    6         stop_time=time.time()
    7         print('函数[%s],运行时间是[%s]' %(func,stop_time-start_time))
    8         return res
    9     return wrapper
    复制代码

    使用装饰器

    复制代码
    1 def cal(array):
    2     res=0
    3     for i in array:
    4         res+=i
    5     return res
    6 
    7 cal=timer(cal)
    8 cal(range(10))
    复制代码

    语法糖@

    复制代码
    1 @timer  #@timer就等同于cal=timer(cal)
    2 def cal(array):
    3     res=0
    4     for i in array:
    5         res+=i
    6     return res
    7 
    8 cal(range(10))
    复制代码
     

     

  • 相关阅读:
    093孤荷凌寒自学第179天区块链093天Dapp048
    092孤荷凌寒自学第178天区块链092Dapp047
    091孤荷凌寒自学第177天区块链091天Dapp046
    090孤荷凌寒自学第180天区块链090天Dapp045
    089孤荷凌寒自学第175天区块链089天Dapp044
    088孤荷凌寒自学第174天区块链088天Dapp043
    087孤荷凌寒自学第173天区块链087天Dapp042
    孤荷凌寒自学第172天区块链086天Dapp041
    孤荷凌寒自学第171天区块链085天Dapp040
    iOS开发——高级篇——内存分析,Instruments
  • 原文地址:https://www.cnblogs.com/zatzsr98/p/7049758.html
Copyright © 2011-2022 走看看