欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

学习14.总结# 装饰器

程序员文章站 2022-03-06 10:32:26
装饰器 函数嵌套 闭包 low版装饰器 被装饰得函数能够接受参数 高级 被装饰得函数返回值 标准版 装饰器 ......

装饰器

装饰器 作用在不修改源码及调用方式前提下额外增加一些功能
开放封闭原则

函数嵌套

def func():
    def foo():
        print(1)
    return foo
func()()

闭包

def func(a):
    def foo():
        print(a)
    return foo
func(1)()

low版装饰器

def func(a):
    def foo():
        print(a)
    return foo


def f1():
    print("这是一个f1")

f1 = func(f1)
f1()

被装饰得函数能够接受参数

def func(a):
    def foo(*args,**kwargs):
        a(*args,**kwargs)

    return foo

def f1(*args,**kwargs):
    print(f"这是一个{args}")

f1 = func(f1)
f1(1,2,3,34,4,5)

高级

def func(a):
    def foo(*args,**kwargs):
        a(*args,**kwargs)

    return foo

@func
def f1(*args,**kwargs):
    print(f"这是一个{args}")

f1(1,2,3,34,4,5)

被装饰得函数返回值

def func(a):
    def foo(*args,**kwargs):
        ret = a(*args,**kwargs)
        return ret
    return foo

@func
def f1(*args,**kwargs):
    print(f"这是一个{args}")
    return "我可以返回了"
f1(1,2,3,34,4,5)

标准版 装饰器

def func(a):  # a是要被装饰的函数名
    def foo(*args, **kwargs):
        "装饰之前的操作"
        ret = a(*args, **kwargs)
        "装饰之后的操作"
        return ret

    return foo


@func
def f1(*args, **kwargs):
    print(f"这是一个{args}")
    return "我可以返回了"


f1(1, 2, 3, 34, 4, 5)