1、装饰器(函数)
功能:装饰其他函数、为其他函数添加附加功能。
原则:1、不能修改被装饰函数的源代码
2、不能修改被装饰原函数的调用方式
ps:函数即变量,高阶函数+嵌套函数
1.1函数即变量
def logger(): pass def test1(): pass def test2(): pass
def logger(): pass def test1(): pass def test2(): pass
1.2、高阶函数:1、把一个函数名当实参传给另一个函数(不修改函数源代码,增加功能)
def logger(): pass def test(func): func() print(func) test(logger)
或2、返回值中包含函数名(不修改函数的调用方式)
def logger(): pass def test(func): func() return func test(logger)
1.3、嵌套函数( 函数体内声明函数)
def foo(): print('in the foo') def bar(): print('in the bar')
1.4、修饰器
不完全版:
import time def timmer(func): def deco(): start_time=time.time() func() stop_time=time.time() print("the func run time is %s"%(stop_time-start_time)) return deco def test1(): time.sleep(1) print('in the test1') stop_time = time.time() test1=timmer(test1) test1()
无参数版
import time def timmer(func): def deco(): start_time=time.time() func() stop_time=time.time() print("the func run time is %s"%(stop_time-start_time)) return deco @timmer #test1=timmer(test1) def test1(): time.sleep(1) print('in the test1') stop_time = time.time() test1()
有参数可用版
1 import time 2 3 def timmer(func): 4 def warpper(*args,**kwargs): 5 start_time=time.time() 6 func() 7 stop_time=time.time() 8 print('the func run time is %s'%(stop_time-start_time)) 9 return warpper 10 11 @timmer #test1=timmer(test1) 12 def test1(): 13 time.sleep(3) 14 print('in the test1')
终极版
1 user,password='xiaochun','123' 2 def auth(auth_type): 3 print('auth_type',auth_type) 4 def outwrapper(func): 5 def wrapper(*args,**kwargs): 6 if auth_type=='local': 7 username=input("username:") 8 passwd=input("password:") 9 if user==username and passwd==password: 10 print('\033[32;1mUser has logied\033[0m') 11 return func(*args,**kwargs) 12 else: 13 print('\033[41;1mInvalid user\033[0m') 14 else : 15 print('用ldcp登陆') 16 return wrapper 17 return outwrapper 18 def index(): 19 print('welcome to index page') 20 21 @auth(auth_type='ldap')#home=aut 22 def bbs(): 23 print('welcome to bbs') 24 25 @auth(auth_type='local') 26 def home(): 27 print('welcome to home') 28 return 'from home' 29 30 index() 31 home() 32 bbs()