python 装饰器

Posted u3cc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 装饰器相关的知识,希望对你有一定的参考价值。

Python装饰器

1.装饰器解释

1.1 装饰器它是一个函数,它包含了另一个函数的功能。它用于装饰被包含函数,为被包含的函数添加附加功能。

1.2 装饰器作用于被包含的函数,只有被包含的函数执行时,装饰器才起作用。

2.装饰器代码构成

2.1 函数嵌套(函数中包含另外函数,通俗讲:def 中还有 def )

2.2 高阶函数(返回函数,确切说是返回函数内存地址)

3. 装饰器代码写法

3.1 二层装饰器代码

技术图片
 1 import time
 2 
 3 # 定义装饰器(含两个def,就是所说的函数嵌套)
 4 def packing(func):
 5     print(in the packing)
 6 
 7     def deco(*args, **kwargs):
 8         start_time = time.time()
 9         func(*args, **kwargs)
10         stop_time = time.time()
11         print(the func run , stop_time-start_time)
12     return deco  # 返回函数内存地址(能返回函数内存地址的函数就是高阶函数)
13 
14 
15 @packing     # 等价于 test1 = packing(test1)(取得了deco的内存地址)
16 def test1(name):
17     time.sleep(1)
18     print(int the test1, name)
19 
20 
21 @packing
22 def test2(age, sex):
23     time.sleep(0.3)
24     print(in the test2, age, sex)
25 
26 
27 test1(alex)  # 相当于执行deco() 函数调用,装饰器才起作用
28 test2(17, F)  # 相当于执行deco() 函数调用,装饰器才起作用
View Code

 

3.2 三层装饰器代码

技术图片
 1 usrname = alex
 2 passwd = 123456
 3 def auth(auth_type):
 4     def outpacking(func):
 5         def packing(*args, **kwargs):
 6             if auth_type == local:
 7                 name = input(input your usrname:\n)
 8                 pd = input(input your passowrd:\n)
 9                 if usrname == name and passwd == pd:
10                     print(welcom %s %usrname)
11 
12                 else:
13                     print(\033[31;1minvalid usrname or password\033[0m)
14                     exit()
15             elif auth_type == remote:
16                 print(remote access your account)
17             func(*args, **kwargs)
18         return packing
19     return outpacking
20 
21 def index():
22     print(welcom to the index page)
23 
24 
25 @auth(auth_type=local)
26 def home():
27     print(welcom to home page)
28 
29 @auth(auth_type=remote)
30 def bbs():
31     print(welcom to the bbs page)
32 
33 
34 index()
35 home()
36 bbs()
View Code

 

以上是关于python 装饰器的主要内容,如果未能解决你的问题,请参考以下文章

python 装饰器:装饰器实例类装饰器(装饰函数)

python 装饰器:装饰器实例内置装饰器

python 装饰器:装饰器实例内置装饰器

Python 装饰器和装饰器模式有啥区别?

python 装饰器:装饰器基础装饰器形式,何时执行

理解Python装饰器