装饰器:在不改变函数原代码的前提下扩展函数功能。
1、被装饰的函数带固定参数:
#!/usr/bin/env python #_*_ coding:utf-8 _*_ #encoding=utf-8 #created by xkq #date: 2018 def login(func): def wrapper(arg):#只接受一个参数 print("login verify................") return func(arg) return wrapper @login#login(hello)->wrapper内存地址 def hello(arg): print("hello %s"%arg) hello('xkq')#login(hello)->wrapper('xkq')->print->hello('xkq') #-----------result———— #login verify................ #hello xkq
2、被装饰的函数参数不固定:
#!/usr/bin/env python #_*_ coding:utf-8 _*_ #encoding=utf-8 #created by xkq #date: 2018 def login(func): def wrapper(*args,**kwagrs):#可接受任意多个参数 print("login verify2................") return func(*args,**kwagrs) return wrapper @login def introduce(name,sex='man'): print("My name is %s, sex:%s"%(name,sex)) @login def introduce2(name,age,sex='man'): print("My name is %s, age:%s, sex:%s"%(name,age,sex)) introduce('xkq') introduce('qq','girl') introduce2('xkq',18) introduce2('qq',18,'girl') #---------result----------- #login verify2................ #My name is xkq, sex:man #login verify2................ #My name is qq, sex:girl #login verify2................ #My name is xkq, age:18, sex:man #login verify2................ #My name is qq, age:18, sex:girl