首页 > 编程语言 >【学习笔记】Python 装饰器

【学习笔记】Python 装饰器

时间:2024-05-10 19:25:29浏览次数:28  
标签:function 函数 Python some 笔记 wrapper 装饰 decorator

装饰器是 Python 中一种非常强大的语法特性,它允许你在不改变函数代码的情况下,动态地增加功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。下面是 Python 装饰器的基本语法:

def decorator_function(original_function):
    def wrapper_function(*args, **kwargs):
        # 在调用原始函数之前的任何操作
        print("Do something before the original function")
        result = original_function(*args, **kwargs)  # 调用原始函数
        # 在调用原始函数之后的任何操作
        print("Do something after the original function")
        return result
    return wrapper_function

@decorator_function
def some_function():
    print("Original function")

some_function()

这段代码中,decorator_function 是一个装饰器函数,它接受一个原始函数 original_function 作为参数,并返回一个内部函数 wrapper_function。在 wrapper_function 内部,我们可以添加一些额外的功能,然后调用原始函数。

@decorator_function 这行代码就是应用装饰器的语法糖。它等同于 some_function = decorator_function(some_function),它告诉 Python 使用 decorator_function 来装饰 some_function

当你调用 some_function() 时,实际上是调用了 wrapper_function(),而 wrapper_function() 又会调用原始的 some_function(),并且在调用前后做一些额外的事情。

装饰器也可以带参数,这样就可以根据不同的参数定制装饰器的行为。


上面的内容是关于函数装饰的,我们还有类装饰的语法。

标签:function,函数,Python,some,笔记,wrapper,装饰,decorator
From: https://www.cnblogs.com/yspm/p/18185132/PythonDecoratorNotes

相关文章

  • ETL中如何执行Python脚本
    Python的解读Python 是一种高级、通用的编程语言,由荷兰程序员吉多·范罗苏姆(Guido van Rossum)于1990年代初设计并发布。Python的设计哲学强调代码的可读性和简洁性,它的语法清晰且表达力强,使得开发者能够以更少的代码行数表达复杂的概念。这使得Python成为了编程入门者的理想选......
  • Python进阶之多态和鸭子类型
    【一】多态【1】什么是多态多态指的是一类事物有多种形态【2】示例#动物有多种形态:人、狗、猪等importabc#总的类:动物classAnimal(metaclass=abc.ABCMeta):@abc.abstractmethoddeftalk(self):pass#动物的一类:人classPeople(Animal):......
  • Python进阶之绑定方法和非绑定方法
    【一】绑定方法和非绑定方法介绍【1】绑定方法绑定给谁,谁来调用就自动将它本身当作第一个参数传入(1)绑定到类的方法用classmethod装饰器装饰的方法为类量身定制类.boud_method(),自动将类当作第一个参数传入其实对象也可调用,但仍将类当作第一个参数传入(2)绑定到对象的方......
  • Python进阶之反射
    【一】什么是反射反射是一种程序可以访问、检测和修改其本身状态或行为的能力在Python中,反射主要指通过字符串的形式操作对象的属性python中的一切事物都是对象,都可以使用反射【二】反射方法getattr(object,key):获取对象的属性值,如果属性不存在,可提供默认值hasattr(ob......
  • Python进阶之内置方法
    【一】内置方法引入__init__ :初始化对象时触发__del__ :删除类时触发__new__ :构造类时触发__str__ :str函数或者print函数触发__repr__ :repr或者交互式解释器触发__doc__ :打印类内的注释内容__enter__ :打开文档触发__exit__ :关闭文档触发__getattr__:访问不存在的属......
  • python 实现类重载(类似C#的类重载,但是远不如C#的类重载好用)
    pipinstallmultipledispatch-ihttps://mirrors.aliyun.com/pypi/simplefrommultipledispatchimportdispatchclassMyClass:ab=11234def__init__(self):self.aa=1@dispatch()defcalculate(self):self.aa=1111......
  • 分享一个使用python调用websocket获取实时行情数据的方法
    这个站点可以获取:外汇、国际期货、国内期货、贵金属、能源、虚拟货币、股指期货、美股、台股、港股、印度股、A股、ETF等以下是Python的连接demo,可以参考下。同时也支持其他后端语言的连接,PHP、Java等。获取品种地址:http://39.107.99.235:1008/market/market.phpimportj......
  • WIN10的BUG:语言栏快捷键重启丢失的问题(解决笔记)
    这个问题据说已存在多年,但一直没有解决:crtl+shift+del导致切换语言的热键丢失-MicrosoftCommunity经过下文的引导,发现真存在这个可能性,参照下文的方法解决W10修改输入法快捷键及快捷键BUG解决-知乎(zhihu.com)在我的电脑中是这样设置的:而这个“美式键盘”的快捷方式每次......
  • Python进阶之抽象类
    【一】什么是抽象类与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化【二】为什么要有抽象类如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据......
  • Python进阶之封装
    【一】面向对象的三大特性面向对象的三大特性:封装、继承、多态其中最重要的就是封装,封装就是将数据和功能整合到一起我们可以对封装在类和对象中的属性进行访问的控制,有隐藏的和开发的接口【1】什么是封装封装是对具体对象的一种抽象封装就是将某些数据和功能隐藏起来,只......