装饰器

在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

posted @ 2018-03-18 17:13  kailicard  阅读(209)  评论(1编辑  收藏  举报