装饰器
在python面试过程之中,装饰器是面试的必经之路。
在我们使用函数的过程之中,我们有可能遇下面的情况,就是在定义函数的过程之中定义了相同的函数,造成的结果是我们使用时会产生覆盖
Def test():
print("-----1------")
Def test():
print("-----2-----")
Test()
但是在开发中,我们要尽量避免函数名相同
写代码的过程之中要遵循开放封闭原则
封闭:针对以实现的功能模块
开放:对扩展开发
小需求:某创业公司有n个部门,一个平台,平台开发完成,各个部门之间不能互相调用
错误做法:
def w1(func):
def inner():
print("-----正在验证----")
func()
return inner
def f1():
print("-----1-----")
def f2():
print("-----2------")
innerFunc = w1(f1)
innerFunc()
在上述代码中,我们使用innerFunc()函数完成,不符合开发的需求。
此时用到装饰器,装饰器的使用如下:
def w1(func):
print("----正在装饰1----")
def inner():
print("----正在验证权限1----")
func()
return inner
def w2(func):
print("----正在装饰2----")
def inner():
print("----正在验证权限2----")
func()
return inner
@w1
@w2
def f1():
print("----正在验证----")
f1()
def func(funcname):
print("----func---1---")
def func_in():
print("----func_in---1---")
funcname()
print("----func_in---2---")
print("----func---2---")
return func_in
@func
def test():
print("ax1a21x3a")
test()
def func(funcname):
print("----func---1---")
def func_in(*args,**kwargs):
print("----func_in---1---")
funcname(*args,**kwargs)
print("----func_in---2---")
print("----func---2---")
return func_in
@func
def test(a,b,c):
print("----test----a=%d,b=%d,c=%d,d=%d---",(a,b,c))
test(11,22,33)
不定长参数的处理,我们需要用到*args和**kwargs