python基础第二十三章:装饰器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python基础第二十三章:装饰器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3058字,纯文字阅读大概需要5分钟。
内容图文
装饰器
装饰器:本质上是个函数,在不改变原函数代码的情况下为函数添加功能
装饰器实际上就是一个闭包函数
常用于:权限验证,用户登陆注册
装饰器分类:普通装饰器
装饰带有参数的函数(定长,不定长)
装饰带有返回值的函数
带有参数的装饰器(不同函数不同效果)
把类作为装饰器(后面讲)
装饰类(后面讲)
普通装饰器方法1
def xdl(func): #装饰器
def inner(): #是未来装饰后的函数
print('上学打卡')
func() #func是原函数,是bj_work函数,sh_work函数
print('放学打卡')
return inner
#北京的打卡函数 (原函数)
def bj_work():
print('开始北京的一天学习')
bj_work=xdl(bj_work) #bi_work函数==inner函数
bj_work()
#上海的打卡时间
def sh_work():
print('开始上海的一天学习')
sh_work=xdl(sh_work)
sh_work()
会输出:
上学打卡
开始北京的一天学习
放学打卡
上学打卡
开始上海的一天学习
放学打卡
普通装饰器方法2
@语法:加上@系统会自动把下面的函数当成参数传递到装饰器中,从下到上
@符又被称为语法糖
def xdl(func): #装饰器
def inner(): #是未来装饰后的函数
print('上学打卡')
func() #func是原函数,是hz_work函数
print('放学打卡')
return inner
@xdl
def hz_work():
print('开始杭州的一天学习')
hz_work()
会输出:
上学打卡
开始杭州的一天学习
放学打卡
加上@系统会自动把下面的函数当成参数传递到装饰器中,从下到上
def out_1(func):
def inner():
print('开始打卡1')
func()
print('放学打卡1')
return inner
def out_2(func):
def inner():
print('开始打卡2')
func()
print('放学打卡2')
return inner
@out_1
@out_2
def xqgz():
print('开始各个小区的一天学习')
xqgz()
会输出:
开始打卡1
开始打卡2
开始各个小区的一天学习
放学打卡2
放学打卡1
#带有参数(定长)的装饰器 inner()中的参数一定要与func()中的参数一样,可以不跟sz_work()中的参数一样
def xdl(func):
def inner(n,s):
print('上学打卡')
func(n,s)
print('放学打卡')
return inner
@xdl
def sz_work(name,sex):
print('开始深圳的一天学习')
sz_work('深圳','城市')
会输出:
上学打卡
开始深圳的一天学习
放学打卡
#带有参数(不定长)的装饰器 inner()中的参数一定要与func()中的参数一样,可以不跟sz_work()中的参数一样
def xdl(func):
def inner(*a,**k):
print('上学打卡')
func(*a,**k)
print('放学打卡')
return inner
@xdl
def sz_work(*arge,**kwargs):
print(arge,kwargs,'开始深圳的一天学习')
sz_work('深圳','城市',waihao='世界之窗')
会输出:
上学打卡
('深圳', '城市') {'waihao': '世界之窗'} 开始深圳的一天学习
放学打卡
#带有返回值的装饰器
def xdl(func):
def inner():
print('开始打卡')
zhuangtai=func()
print('放学打卡')
return zhuangtai
return inner
@xdl
def work():
print('开始工作')
return '工作结束'
res=work()
print(res)
会输出:
开始打卡
开始工作
放学打卡
工作结束
带有参数的装饰器(不同函数有不同效果)
def wai_out(city):#只是一个壳子
def out(func): #真实的装饰器
def inner():
if city=='上海':
print('开始打卡')
func()
print('放学打卡')
elif city=='北京':
print('北京不上课')
return inner
return out
@wai_out('上海')
def sh_work():
print('开始上海一天的学习')
sh_work()
print('===============')
@wai_out('北京')
def bj_work():
print('开始北京一天的学习')
bj_work()
内容总结
以上是互联网集市为您收集整理的python基础第二十三章:装饰器全部内容,希望文章能够帮你解决python基础第二十三章:装饰器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。