装饰器
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()
以上是关于装饰器的主要内容,如果未能解决你的问题,请参考以下文章