一、装饰器
定义:本质是函数,(装饰其他函数)就是为其它函数添加附加功能
原则:1、不能修改被装饰的函数的源代码
2、不能修改被装饰的函数的调用方式
实现装饰器知识储备:
1、函数及“变量”
2、高阶函数
a、把一个函数名当做实参传给另一个函数(在不修改被装饰器函数源代码的情况下为其添加新功能)
b、返回值中包含函数名
3、嵌套函数
高阶函数+嵌套函数 = 装饰器
延迟3秒
import time def test1(): time.sleep(3) print('in the test1') test1()#延迟3秒
例一:装饰器
def bar (): print("in the bar") def foo (): print ("in the foo") bar() foo()
例二:
def deco(func): start_time = time.time() func() return func stop_time = time.time() print ("in func run time is %s" %(stop_time-start_time)) return deco
def foo (): print("in the foo") bar() def bar(): print("in the bar") foo()
例三:
import time def timer(func): def deco (*args, **kwargs): start_time = time.time() func(*args, **kwargs) stop_time = time.time() print("in func run time is %s" %(stop_time- start_time)) return deco @timer #等于test1 = timer(test1) def test1(): time.sleep(3) print('in the test1') test1() @timer def test2(name,age): time.sleep(3) print("in the :",name age) test2('liudong',23)
例四:终极装饰器
user,passwd = 'liudong','123' def auth (auth_type): print("auth_func:",auth_type) def outer_wrapper(func): def wrapper(*args, **kwargs): print("wrapper func args:", *args, **kwargs) if auth_type == "local": username = input("Username:").strip() password = input("Password:").strip() if user == username and passwd == password: print("