博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
装饰器
阅读量:6086 次
发布时间:2019-06-20

本文共 1358 字,大约阅读时间需要 4 分钟。

装饰器

本质:闭包函数(嵌套函数,内部函数会调用外部函数的变量,延长了外部函数巨变变量的生存时间)

功能:在不改变函数调用的情况下,在函数前后添加功能

原则:开放封闭原则(开放:对扩张开放,封闭:对修改封闭)

例子:

def wrapper(func):

  def inner(*args,**kwargs) :
#    扩张功能代码
    ret = func(*args,**kwargs)
#    扩张功能代码
    return ret
  return inner
@wrapper      #   func = wrapper(func)
def func(a) :
  print(a+':hello python')
  return a

func('JB')

 

带参数的装饰器

  在原装饰函数外层再嵌套一层函数,使得装饰函数可以传入参数

例子

import time def timer_outer(flag) : def timer(func) : def inner(*args,**kwargs) : if flag : start = time.time() ret =func(*args,**kwargs) end = time.time() print(end -start) return ret else : ret =func(*args,**kwargs) return ret return inner return timer @timer_outer(True) #timer_outer(True) 执行返回的就是 timer def func() : time.sleep(5) print('hello python') func()

多个装饰器装饰同一个函数

执行顺序:装饰从下层往上层执行

例子

def wrapper1(func) : def inner1(*args,**kwargs) : print('wrapper1','before func') ret = func(*args,**kwargs) print('wrapper1','end func') return ret return inner1 def wrapper2(func) : def inner2(*args,**kwargs) : print('wrapper2','before func') ret = func(*args,**kwargs) print('wrapper2','end func') return ret return inner2 # 执行顺序: wrapper1装饰func,wrapper2装饰wrapper1装饰后函数 @wrapper2 # func = wrapper2(func) 此时func存储的是inner1的地址,装饰的是inner1函数 @wrapper1 # func = wrapper1(func) 执行结束后 func = inner1 def func() : print('***f***') func()
 

 

转载于:https://www.cnblogs.com/dengke-hu/p/9707707.html

你可能感兴趣的文章
Go方法
查看>>
Dapper丶DapperExtention,以及AbpDapper之间的关系,
查看>>
搞IT的同学们,你们在哪个等级__那些年发过的帖子
查看>>
且谈语音搜索
查看>>
MySQL数据库导入导出常用命令
查看>>
低版本Samba无法挂载
查看>>
Telegraf+Influxdb+Grafana构建监控平台
查看>>
使用excel 展现数据库内容
查看>>
C#方法拓展
查看>>
MySql.Data.dll的版本
查看>>
Linux系统磁盘管理
查看>>
hdu 2191 (多重背包+二进制优化)
查看>>
home.php
查看>>
neo4j---删除关系和节点
查看>>
redis分布式锁redisson
查看>>
什么样的企业可以称之为初创企业?
查看>>
Python爬虫之BeautifulSoup
查看>>
《HTML 5与CSS 3权威指南(第3版·下册)》——第20章 使用选择器在页面中插入内容...
查看>>
如何判断自己适不适合做程序员?这几个特点了解一下
查看>>
newinstance()和new有什么区别
查看>>