《python装饰器》

概论:在python中装饰器相当于一个可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用

    装饰器:在不改变函数调用方法和函数本身的情况下添加新的功能

  使用方法:

      用“着装”举例

 1 # 定义修饰方法
 2 def more_dress(func):
 3     def dress():
 4         func()
 5         print("外面加一件大衣")
 6     return dress
 7 
 8 # 定义被修饰方法
 9 @more_dress  # 修饰
10 def dress_up():
11     print("穿棉背心")
12 
13 if __name__ == '__main__':
14     dress_up()

 显示结果:

    

 

 

对有参函数进行修饰:

一个参数的

如果原函数有参数,那闭包函数必须保持参数个数一致,并且将参数传递给原方法

列如:

 1 # 定义修饰方法
 2 
 3 
 4 def hi(func):
 5     def wrapper(n1):
 6         func(n1)
 7         print(n1)
 8     return wrapper
 9 
10 # 定义被修饰方法
11 
12 
13 @hi  # 修饰
14 def name1(n1):
15     print("hi")
16 
17 
18 if __name__ == '__main__':
19     name1("小钱")

 显示结果:

    

多个参数的 

 1 def hi(func):
 2     def wrapper(*args, **kwargs):
 3         func(*args, **kwargs)
 4         print(*args, **kwargs)
 5     return wrapper
 6 
 7 
 8 # 定义被修饰方法
 9 
10 
11 @hi  # 修饰
12 def name1(n1, n2):
13     print("hi")
14 
15 
16 if __name__ == '__main__':
17     name1("小钱", "小芳")

 

 显示结果:

    

有返回值的

 1 # 定义修饰方法
 2 
 3 def hi(func):
 4     def wrapper():
 5         trs = func()
 6         return trs  # 注意这wrapper函数的返回值
 7 
 8     return wrapper
 9 
10 
11 # 定义被修饰方法
12 
13 @hi  # 修饰
14 def hi():
15     return "Hello"
16 
17 if __name__ == '__main__':
18     test_word = hi()
19     print(test_word)

 显示结果:

    

 

 

 

 

 

   

posted @ 2021-03-30 08:47  enken  阅读(50)  评论(0编辑  收藏  举报