装饰器

装饰器属于python高级语法,吉多创始的装饰器也是很精妙,通常我们会把装饰器称作语法糖。就好比,一颗树原本只有树叶和枝叉。

但是装上一些小饰品之后就变成了圣诞树。装饰器也是一样,他能给原本的函数添加一些功能,使函数在不改变原本代码的基础上具有不同的功能。

装饰器装饰前的函数是由闭包参数func指向,而装饰后的函数指向闭包的内部函数。道德上装饰器,装饰完的函数,在执行的时候不会去更改原先函数的返回值。

下面例举几个装饰器的例子:

# 无参,无返回

def set(func):

    def inner_set():

        print('添加功能')

        func()

    return inner_set

@set

def test():

    print(1)

test()

#  无参,有返回

def set(func):

    def inner_set():

        print('添加功能')

        return func()

    return inner_set

@set

def test():

    return 1

print(test())

# 有参,无返回

def set(func):

    def inner_set(*args, **kwargs):

        print('添加功能')

        func(*args, **kwargs)

    return inner_set

@set

#  相当于test = set(test)

def test(*args, **kwargs):

    print('h', args)

    print('b', kwargs)

test(1, 2, a=1, b=2)

# 有参,有返回

def set(func):

    def inner_set(*args, **kwargs):

        print('添加功能')

        return func(*args, **kwargs)

    return inner_set

@set

def test(*args, **kwargs):

    print(args)

    print(kwargs)

test(1,2,a=3,b=4)

#  万能装饰器

def set(func):

    def inner_set(*args, **kwargs):

        print('添加功能')

        return func(*args, **kwargs)

    return inner_set

@set

def test(*args, **kwargs):

    print('test')

    return 100

print(test())

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 装饰是为函数和类指定管理代码的一种方式.装饰器本身的形式是处理其他的可调用对象的可调用的对象。 函数装饰器在函数定...
    低吟浅唱1990阅读 1,711评论 0 0
  • 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个办法就是把内裤改造一下,...
    chen_000阅读 5,158评论 0 3
  • Python装饰器的高级用法(翻译) 原文地址https://www.codementor.io/python/t...
    城南道阅读 10,237评论 1 22
  • 0. 概念 理解:在 函数名 以及 函数体 不改变 的前提下,给函数 扩展 一些 额外代码@装饰器def 被装饰函...
    qianranow阅读 1,868评论 1 3
  • “暴击”一词源于网游,游戏一方受到对手的袭击,顿时失血至1/3,我们称受到暴击,如果用于生活中,以同义词替换,可以...
    醉雨聽月阅读 6,164评论 0 0

友情链接更多精彩内容