装饰器本质是函数,为其他函数添加附加功能。
原则:1、不能修改被装饰函数的源代码。2、不能修改被装饰函数的调用方式
装饰器由高阶函数与嵌套函数组成。
在以上函数中要增加一个新的功能:统计时间功能。那么就用到装饰器了,如下:
以上执行结果就有了新增的功能。
以下为一个扩展,以下为三个函数,执行两个函数用到的装饰器为一个,但是功能却不同
#!/usr/bin/env python #-*- coding:utf-8 -*- #Author: Tony Cabel import time user='cab' passw='123' def auth(type): def outside(func): def deco(*args,**kwargs): if type == 'local': use=input('Username: ') passwd=input('Password: ') if user==use and passw==passwd: print('Welcome %s'%use) func(*args,**kwargs) else: exit("good bye") elif type == 'ldap': print('Fuck off') return deco return outside def index(): print('This is the index page') @auth('local') def home(*args): print('This is the home page') @auth(type='ldap') def bbs(*args): print('This is the bbs page') index() home() bbs()