装饰器

闭包:内部函数使用外部函数中的变量,这种情况下就称这是一个闭包。

def f1(b):
    def f2():
        print(b)
    f2()
    return f2
ff=f1('bbb')
ff()
# bbb
# bbb

 

def f1():
    b=10
    def f2():
        return b
    return f2()
print(f1())
# 10

 

装饰器:在不改变函数的调用方式的情况下,给函数的前后添加新的功能。

装饰器的固定结构:

def wrapper(func):
    def inner(*args,**kwargs):
        """被装饰器执行之前要添加的代码"""
        ret=func(*args,**kwargs)
        """被装饰器执行之后要添加的代码"""
        return ret
    return inner

装饰器的例子:

def wrapper(func):
    def inner(*args,**kwargs):
        print('小峰')  # 被装饰器函数执行之前要添加的代码
        ret=func(*args,**kwargs)
        print('小明')  # 被装饰器函数执行之后要添加的代码
        return ret
    return inner
@wrapper
def func(name):
    print('%s好,才是真的好'%(name))
@wrapper
def fun1():
    print()
func('小峰')
print('=='*10)
print(func('小方'))

# 小峰
# 小峰好,才是真的好
# 小明
# ====================
# 小峰
# 小方好,才是真的好
# 小明
# None

概念:开放封闭原则

    开放是指:对扩展是开放的

    封闭是指:对修改是封闭的

 装饰器的升阶:

def wrapper1(func):
    def inner1(*args,**kwargs):
        print('in wrapper 1,before')
        ret = func(*args,**kwargs)   #qqxing
        print('in wrapper 1,after')
        return ret
    return inner1
def wrapper2(func):     #inner1
    def inner2(*args,**kwargs):
        print('in wrapper 2,before')
        ret = func(*args,**kwargs)   #inner1
        print('in wrapper 2,after')
        return ret
    return inner2
@wrapper2
@wrapper1
def qqxing():
    print('qqxing')
qqxing()    #inner2

# in wrapper 2,before
# in wrapper 1,before
# qqxing
# in wrapper 1,after
# in wrapper 2,after

 

posted on 2017-11-02 19:12  卖火柴的嫩火柴  阅读(126)  评论(0编辑  收藏  举报

导航