python装饰器

mac2022-06-30  118

装饰器原理

闭包及性质

函数的嵌套内嵌函数可访问外层函数的变量

装饰器实现

函数作为参数传递到装饰函数中利用闭包特性,对需装饰的函数进行装饰返回装饰结束的函数“ @ ”为装饰器的语法糖

普通装饰器

适用于给已有的代码添加一点新功能

有一个回家函数 go_home

def go_home(): print("回家了!!!") go_home() >>>回家了!!!

在回家之前去搞个苹果

def get_apple(func): def f(): print("买了个苹果!") func() return f @get_apple def go_home(): print("回家了!!!") go_home() >>>买了个苹果! >>>回家了!!!

装饰带返回值的函数

有一个回家函数 go_home

def go_home(): return "回家了!!!" ret = go_home() print(ret) >>>回家了!!!

在回家之前去搞个苹果

def get_apple(func): def f(): print("买了个苹果!") ret = func() return ret return f @get_apple def go_home(): return "回家了!!!" ret = go_home() print(ret) >>>买了个苹果! >>>回家了!!!

装饰带参数的函数

有一个回家函数 go_home

def go_home(mood): print(mood+"的回家了!!!") go_home(“高高兴兴”) >>>高高兴兴的回家了!!!

在回家之前去搞个苹果

def get_apple(func): def f(*args, **kwargs): print("买了个苹果!") func(*args, **kwargs) return f @get_apple def go_home(mood): print(mood+"的回家了!!!") go_home(“高高兴兴”) >>>买了个苹果! >>>高高兴兴的回家了!!!

带参数的装饰器

面对不同的函数装饰效果需要不同,就可以给装器加上参数 def get_apple(apple="苹果"): def f1(func): def f2(): print("买了个"+apple) func() return f2 return f1 @get_apple("红红的苹果") def go_home(): print("回家了!!!") @get_apple("烂苹果") def gift(): print("送给坏人!!!") go_home() gift() >>>买了个红红的苹果 >>>回家了!!! >>>买了个烂苹果 >>>送给坏人!!!

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

对函数加装多个功能 def flower(func): def f(): print("买朵玫瑰") func() return f def get_apple(func): def f(): print("买个苹果") func() return f @flower @get_apple def go_home(): print("回家送给对象!") go_home() >>>买朵玫瑰 >>>买个苹果 >>>回家送给对象!

转载于:https://www.cnblogs.com/QX-Tang/p/11523416.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)