首页 / PYTHON / python 装饰器
python 装饰器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python 装饰器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2239字,纯文字阅读大概需要4分钟。
内容图文
![python 装饰器](/upload/InfoBanner/zyjiaocheng/738/be8d1d4fcb9c4fd7b72b5a6002b53308.jpg)
装饰器:在不修改函数源代码的基础上,添加函数功能
例如:
1 def log_time(func): # 此函数的作用时接受被修饰的函数的引用test,然后被内部函数使用 2 def make_decorater(): 3 print('现在开始装饰') 4 func() 5 print('现在结束装饰') 6 return make_decorater # log_time()被调用后,运行此函数返回make_decorater()函数的引用make_decorater 7 8 @log_time # 此行代码等同于,test=log_time(test)=make_decorater 9 def test(): 10 print('我是被装饰的函数') 11 test() # test()=make_decorater()
当被装饰的函数有形参时:
def log_time(func): def make_decorater(*args,**kwargs): # 接受调用语句的实参,在下面传递给被装饰函数(原函数) print('现在开始装饰') test_func = func(*args,**kwargs) # 如果在这里return,则下面的代码无法执行,所以引用并在下面返回 print('现在结束装饰') return test_func # 因为被装饰函数里有return,所以需要给调用语句(test(2))一个返回,又因为test_func = func(*args,**kwargs)已经调用了被装饰函数,这里就不用带()调用了,区别在于运行顺序的不同。 return make_decorater @log_time def test(num): print('我是被装饰的函数') return num+1 a = test(2) # test(2)=make_decorater(2) print(a)
当@装饰器后有参数时:
def get_parameter(*args,**kwargs): # 工厂函数,用来接受@get_parameter('index.html/')的'index.html/' def log_time(func): def make_decorater(): print(args,kwargs) print('现在开始装饰') func() print('现在结束装饰') return make_decorater return log_time @get_parameter('index.html/') def test(): print('我是被装饰的函数') # return num+1 test() # test()=make_decorater()
两个装饰器同时修饰一个函数(重点看执行顺序):
def log_time1(func): def make_decorater(*args,**kwargs): print('1现在开始装饰') test_func = func(*args,**kwargs) print('1现在结束装饰') return test_func return make_decorater def log_time2(func): def make_decorater(*args,**kwargs): # 接受调用语句的实参,在下面传递给被装饰函数(原函数) print('2现在开始装饰') test_func = func(*args,**kwargs) # 如果在这里return,则下面的代码无法执行,所以引用并在下面返回 print('2现在结束装饰') return test_func # 因为被装饰函数里有return,所以需要给调用语句(test(2))一个返回,又因为test_func = func(*args,**kwargs)已经调用了被装饰函数,这里就不用带()调用了,区别在于运行顺序的不同。 return make_decorater @log_time1 @log_time2 def test(num): print('我是被装饰的函数') return num+1 a = test(2) # test(2)=make_decorater(2) print(a)
内容总结
以上是互联网集市为您收集整理的python 装饰器全部内容,希望文章能够帮你解决python 装饰器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。