python 中的装饰器
2021/11/12 22:09:56
本文主要是介绍python 中的装饰器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在写程序时,有时可能需要对某个函数增加些新的功能,但是又不能改原函数,这时,我们就需要用python里的装饰器来原函数增加新功能而不修改原函数。
推荐一篇好的博客nudt_qxx
-----------------------------------------------------------------------------分割线-------------------------------------------------------------------------------------------------------
总之python里的装饰器就是在不修改原函数的前提下,对原函数增添一些新的功能,这样就提高了程序的可扩展性。
#python 的装饰器 def test(func): def function(): print("1111~~~") func() print("aaaa~~~2222") return function @test def digtest(): pass if __name__=='__main__': digtest() """ 1111~~~ aaaa~~~2222 """
这是一个简单的函数装饰器,我们对digtest函数增加了新的功能,使得digtest函数可以输出打印。而test就是digtest的装饰器,装饰器参数是函数,且它的返回值也是一个函数,装饰器的传入的参数是要增添新功能的原函数,而它的返回值则是增添了新功能的新的函数。对于要修改的原函数,我们要在原函数的前面加上@(装饰器的函数名)
装饰器还可以对多个参数或者不定多个参数的原函数增加
def test(func): def function(*args,**kwargs): func(*args,**kwargs) print("function~~~acg") return function @test def digtest1(a,b): print("%d"%(a*b)) print("digtest1~~~acg") @test def digtest2(a,b,c,d): print("%d"%(a+b+c+d)) print("digtest2~~~acg") if __name__=='__main__': digtest1(2,3) digtest2(1,2,3,4) """ 6 digtest1~~~acg function~~~acg 10 digtest2~~~acg function~~~acg """
对*args ,**kwargs 不熟悉的可以去看一下这篇博客辰兮要努力
一个原函数可以有多个装饰器
def test1(func): def function(): func() print("aaaa~~~2233") return function def test2(func): def function(): func() print("bbbb~~~2233") return function @test1 @test2 def digtest(): print("cccc~~~2233") if __name__=='__main__': digtest() """ cccc~~~2233 bbbb~~~2233 aaaa~~~2233 """
当原函数有多个装饰器时,各个装饰器和原函数的执行顺序为
def test1(func): def func1(): print("1111") func() print("aaaa") return func1 def test2(func): def func2(): print("2222") func() print("bbbb") return func2 def test3(func): def func3(): print("3333") func() print("cccc") return func3 """如果修饰器修改的新函数功能在原函数功能的上面,则执行时按照修饰器的@表示顺序从上到下的执行,然后再执行原函数,反之如果修饰器修改的新函数的功能在原函数的下面,则执行时按照修饰器的@表示顺序从下到到上的执行,然后再执行原函数""" @test3 @test2 @test1 def test(): print("dddd") if __name__=='__main__': test() """ 3333 2222 1111 dddd aaaa bbbb cccc """
这篇关于python 中的装饰器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器