为什么学习装饰器:
- 行业需求:涉及 python 技术栈,面试常见题
- 使用需求:优化代码可读性,可维护性
未带参装饰器
1 # 第一步:定义两个函数,一个内函数,一个外函数 2 def pre(func): 3 def inner(): 4 # 第二步:在内函数添加装饰器的逻辑 5 print('Tom said:') 6 # 第六步:添加被装饰函数的执行步骤 7 func() 8 print('seeyou') 9 # 第三步:把内函数的函数对象return 出去 10 return inner 11 12 # 第四步:装饰器的使用 13 @pre #等同于 fun0 = pre(fun0) 14 def func0(): 15 print('hello,Python') 16 17 func0() 18 19 ''' 20 执行结果: 21 Tom said: 22 hello,Python 23 seeyou 24 '''
被装饰函数参数不固定
1 #被装饰函数参数不固定 2 #*args:可变参数,**kwargs:关键字可变参数 3 4 def pre(func): 5 def inner(*args,**kwargs): 6 print('Tom said:') 7 func(*args,**kwargs) 8 return inner 9 10 @pre 11 def func1(name1,name2): 12 print(f"hello {name1},I am {name2}") 13 # print('hello,%s,I am %s!'%(name1,name2)) 14 15 @pre 16 def func2(name1): 17 print(f"seeyou {name1}") 18 19 func1('Lily','Tom') 20 func2('lily') 21 22 ''' 23 执行结果: 24 Tom said: 25 hello Lily,I am Tom 26 Tom said: 27 seeyou lily 28 '''
装饰函数携带参数
1 #装饰函数携带参数 2 #*args:可变参数,**kwargs:关键字可变参数 3 4 def pre_args(name): 5 def pre(func): 6 def innerinner(*args,**kwargs): 7 print(f"{name} said:") 8 func(*args,**kwargs) 9 return innerinner 10 return pre 11 12 @pre_args('Tom') 13 def func1(name1,name2): 14 print(f"hello {name1},I am {name2}") 15 16 @pre_args('Jack') 17 def func2(name1): 18 print(f"seeyou {name1}") 19 20 func1('Lily','Tom') 21 func2('lily') 22 23 ''' 24 执行结果: 25 Tom said: 26 hello Lily,I am Tom 27 Jack said: 28 seeyou lily 29 '''
笔记2023-04-19