装饰器

Posted

tags:

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

#装饰器:本质是函数,装饰其他函数,添加附加功能
#原则:1.不能修改被装饰的函数的源代码;2.不能修改被装饰的函数的调用方式。
#函数即变量;高阶函数;嵌套函数
 1 import time
 2 def timmer(fuc):   #timmer(test1) fuc == test1
 3     def war(*args,**kwargs):
 4         start_time=time.time()
 5         fuc(*args,**kwargs)      #run  test1()
 6         stop_time=time.time()
 7         print("这是减去的时间%s" %(stop_time-start_time))
 8     return war
 9 
10 @timmer             #test1 = timmer(test1)
11 def test1():
12     time.sleep(3)
13     print(测试)
14 
15 @timmer             #number =timmer(number) number =fuc  number(name,age) = war()
16 def number(name,age):
17     print(number,name,age)
18 
19 number("gdr",2)
20 test1()
#高阶函数
#1.把一个函数名当作实参传给另外一个函数
#2.返回值中包含函数名
 1 def test2():
 2     time.sleep(2)
 3     print(测试--)
 4 
 5 
 6 def test3(a):
 7     print(a)
 8     return a
 9 
10 # test2 = test3(test2)
11 # test2()
#嵌套函数
def foo():
    print("这是一个函数")
    def bar():
        print("这是第二个函数")
    bar()
foo()

#终极装饰器示例

 1 #!/bin/env python
 2 #-*- coding:utf-8 -*-
 3 
 4 user = gdr
 5 passwd = 123456
 6 
 7 def log(auth):
 8     print("auth",auth)
 9     def out_warp(fuc):
10         print("fuc",fuc)
11         def warp(*args,**kwargs):
12             if auth == local:
13                 username = input("请输入你的用户名-->").strip()
14                 password = input("请输入你的密码-->").strip()
15 
16                 if user == username and passwd == password:
17                     #res = fuc(*args,**kwargs)
18                     fuc(*args,**kwargs)
19                     print("你的名字是%s,你的密码是%s" %(username,password))
20                     #return res
21                 else:
22                     print("错误的用户名或密码,退出")
23             else:
24                 print("没有")
25         return warp
26     return out_warp
27 
28 @log(auth="local")
29 def logger():
30     print("登录成功")
31     #return "你大爷"
32 
33 
34 logger()

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

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

装饰器、装饰器类与类装饰器(三)

Python进阶装饰器(Decorator)

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

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

TS之装饰器