装饰器

#装饰器:本质是函数,装饰其他函数,添加附加功能
#原则: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()
原文地址:https://www.cnblogs.com/jesse-gong/p/7698727.html