返回顶部
首页 > 资讯 > 后端开发 > Python >Python装饰器的使用方法是什么
  • 653
分享到

Python装饰器的使用方法是什么

2023-06-16 03:06:08 653人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容主要讲解“python装饰器的使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python装饰器的使用方法是什么”吧!1. 什么是装饰器对于受到封装的原函数比如f来说,装饰器

本篇内容主要讲解“python装饰器的使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Python装饰器的使用方法是什么”吧!

1. 什么是装饰器

对于受到封装的原函数比如f来说,装饰器能够在f函数执行前或者执行后分别运行一些代码。

2. 装饰器的结构

装饰器也是一个函数,它装饰原函数f或类cls后,再返回一个函数g

装饰一个函数:

def decorator(f):   # 定义要返回的函数   def g():     print('函数f执行前的动作')     f()     print('函数f执行后的动作')   return g

装饰一个类:

def decorator(cls):   # 定义要返回的函数   def g():     print('类cls执行前的动作')     f()     print('类cls执行后的动作')   return g

使用装饰器很简单,@+自定义装饰器 装饰要想装饰的函数。

3. 为什么要这样

要想理解装饰器为什么要有这种结构,要首先想明白装饰器的目标是什么。

它的价值在于为原函数f增加一些行为,前提必须不能破坏函数f,所以肯定不能改变f的内部结构,所以只能在调用f前后定义一些行为。

同时,装饰器函数decorator返回值又是什么?你可以思考下,返回一个函数是再好不过的了,它包装了原函数f.

4. 装饰一个函数

printStar函数接收一个函数f,返回值也是一个函数,所以满足装饰器的结构要求,所以printStar是一个装饰器。

def printStar(f):     def g():         print('*'*20)         f()         print('*'*20)     return g

printStar装饰器实现f函数执行前、后各打印20个*字符。

使用printStar:

@printStar def f():     print('hello world')

调用:

if __name__ == '__main__':    ### 改变函数功能    f()

打印结果:

******************** hello world ********************

可以很方便的装饰要想装饰的其他函数,如下:

@printStar def g():     print('welcome to Python')

5. 装饰一个类

除了可以装饰函数f外,还可以装饰类cls,两者原理都是一样的。

下面给出一个装饰器实现单例模式的例子,所谓单例就是类只有唯一实例,不能有第二个。

def singleton(cls):    instance = {}     def get_instance(*args, **kwargs):        if cls not in instance:            instance[cls] = cls(*args, **kwargs)        return instance[cls]    return get_instance

定义字典instance,键值对分别为类和实例,这样确保只cls()一次。

使用装饰器singleton修饰类:

@singleton class CorePoint:    pass

测试

if __name__ == '__main__':    ### 改变类的功能    c1 = CorePoint()    c2 = CorePoint()    print(c1 is c2) # True

6. 装饰器层叠

上面原函数f不仅能被一个装饰器修饰,还能被n多个装饰器修饰。

下面再定义一个装饰器printLine,被修饰函数执行前后打印20个:

def printLine(f):     def g():         print('-'*20)         f()         print('-'*20)     return g

使用上文定义好的printStar和printLine同时装饰函数f:

@printStar @printLine def f():     print('hello world')

此时再调用函数f:

if __name__ == '__main__':    ### 改变函数功能    f()

打印结果:

******************** -------------------- hello world -------------------- ********************

f被装饰后,先打印*,再打印 -

层叠多一层,原函数f就变强大一层。使用装饰器,还能实现功能抽离,进一步实现松耦合。

7. 温馨提醒

打印原函数f的名字__name__,结果为f

In [1]: def f():     ...:     pass   In [4]: f.__name__                                                               Out[4]: 'f'

但是,被装饰后函数名字f变为g,这不是我们希望的!

@printStar def f():   pass  f() f.__name__ # g

Python提供的解决方案:使用functools模块中的wraps装饰器:

from functools import wraps  def printStar(f):     @wraps(f)     def g():         print('*'*20)         f()         print('*'*20)     return g

此时再打印被装饰后f的名字,显示f,正常!

到此,相信大家对“Python装饰器的使用方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Python装饰器的使用方法是什么

本文链接: https://lsjlt.com/news/282272.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python装饰器的使用方法是什么
    本篇内容主要讲解“Python装饰器的使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python装饰器的使用方法是什么”吧!1. 什么是装饰器对于受到封装的原函数比如f来说,装饰器...
    99+
    2023-06-16
  • 使用Python装饰器方法是什么
    本篇内容主要讲解“使用Python装饰器方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用Python装饰器方法是什么”吧!今天才发现装饰器的另一种用法,下面就先上代码:data_li...
    99+
    2023-06-16
  • Python装饰器的定义和使用方法是什么
    本篇内容主要讲解“Python装饰器的定义和使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python装饰器的定义和使用方法是什么”吧!1.装饰器的定义装饰器:给已有函数增加额外的...
    99+
    2023-06-30
  • Python装饰器的写法是什么
    这篇文章主要讲解了“Python装饰器的写法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python装饰器的写法是什么”吧!Hello,装饰器装饰器本质上是一个Python函数,它可...
    99+
    2023-06-15
  • python @property 装饰器使用方法
    目录一、property的装饰器用法二、举例说明1.不用setter和getter方法的实现2.使用setter和getter的实现,增加温度值输入的限制3.利用property装饰...
    99+
    2024-04-02
  • python中property装饰器的使用方法
    这篇文章主要介绍python中property装饰器的使用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和...
    99+
    2023-06-15
  • Python中的装饰器是什么及怎么使用
    使用环境为: Python 3.6.8什么是装饰器要理解装饰器之前,我们需要了解什么是闭包函数。闭包函数我们简单写个demo,再解释一下什么是闭包函数。def exterFunc(x): def innerFunc(y): re...
    99+
    2023-05-15
    Python
  • Python装饰器常用的创建方式是什么
    这篇文章主要介绍“Python装饰器常用的创建方式是什么”,在日常操作中,相信很多人在Python装饰器常用的创建方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python装饰器常用的创建方式是什么...
    99+
    2023-06-30
  • Python Property装饰器的作用是什么
    本篇内容介绍了“Python Property装饰器的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. property装饰器的...
    99+
    2023-06-15
  • python中装饰器的作用是什么
    本篇内容主要讲解“python中装饰器的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python中装饰器的作用是什么”吧!装饰器的作用就是用一个新函数封装旧函数(是旧函数代码不变的情...
    99+
    2023-06-20
  • Python装饰器的介绍及使用方法
    本篇内容主要讲解“Python装饰器的介绍及使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python装饰器的介绍及使用方法”吧!app = Flask(__name...
    99+
    2023-06-17
  • Python装饰器的使用方法有哪些
    这篇文章主要介绍了Python装饰器的使用方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python装饰器的使用方法有哪些文章都会有所收获,下面我们一起来看看吧。装饰器的价值不言而喻,可以用来增强函数...
    99+
    2023-07-02
  • python中装饰器指的是什么
    这篇文章将为大家详细讲解有关python中装饰器指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其...
    99+
    2023-06-14
  • Python装饰器的应用场景是什么
    今天小编给大家分享一下Python装饰器的应用场景是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。说明装饰本质上是一个P...
    99+
    2023-06-30
  • Python装饰器使用方法全面梳理
    目录1 装饰器背景知识1.1 基本概念1.2 应用场景2 简单的装饰器代码3 使用装饰器记录函数执行次数4 带参数的装饰器5 装饰器处理有返回值的函数1 装饰器背景知识 1.1 基本...
    99+
    2023-01-28
    Python装饰器 Python装饰器使用方法
  • Python中的装饰器是什么以及运作方法介绍
    这篇文章主要介绍“Python中的装饰器是什么以及运作方法介绍”,在日常操作中,相信很多人在Python中的装饰器是什么以及运作方法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的装饰器是什...
    99+
    2023-06-07
  • Python中怎么使用装饰器装饰函数
    这篇文章将为大家详细讲解有关Python中怎么使用装饰器装饰函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。***个函数deco是装饰函数,它的参数就是被装饰的函数对象。我们可以在deco...
    99+
    2023-06-17
  • es6装饰器是什么及怎么使用
    本篇内容介绍了“es6装饰器是什么及怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在es6中,装饰者模式是一种在不改变原类和使用继承...
    99+
    2023-07-04
  • es6装饰器的作用是什么
    这篇文章主要介绍“es6装饰器的作用是什么”,在日常操作中,相信很多人在es6装饰器的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”es6装饰器的作用是什么”的疑惑...
    99+
    2024-04-02
  • Python中的装饰器使用
    目录Python装饰器总结Python装饰器 Python的装饰器是个好东西,它能干很多事情。 但对于新手,它看起来似乎没那么简单。 但事实上,装饰器本身也只是个函数。 import...
    99+
    2022-12-19
    Python装饰器使用 装饰器使用 Python装饰器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作