Python装饰器

简介: 装饰器的简介、装饰器的使用方法、装饰器的好处

一、装饰器的简介

可以在不修改原函数的情况下扩展旧函数得到新函数

为了可以在不修改源代码的情况下对函数进行扩展,
为了解决这个问题,我们创建一个函数,让这个函数可以自动的帮助我们生产函数

二、装饰器的使用方法

让 new_function() 接收任意数量参数

让 new_function() 接收所有函数参数,需要再括号中填入 *args,**kwargs,并在 old() 括号中也填入 *args,**kwargs

  • *args 接收任意数量位置参数
  • **kwargs 接收任意数量关键字参数
# 在 def begin_end(): 括号中加入 old
def begin_end(old):
    '''
    用来对其他函数进行扩展,
    使其他函数可以在执行前打印开始执行,
    执行后打印执行结束

    参数:
        old 要扩展的函数对象
    '''

    # 创建一个新函数
    # 在这里:*args 把参数装包成元组, **kwargs 把参数装包成字典
    def new_function(*args,**kwargs):
        print('开始执行~~~')        
        # 调用被扩展的函数
        # 而这里:*args 把元组拆包成位置参数传入函数
        #        **kwargs 把字典拆包成关键字参数
        result = old(*args,**kwargs)        
        print('执行结束~~~')

        # 返回函数的执行结果
        return result

    # 返回新函数
    return new_function

f = begin_end(fn)   # (填入需要扩展的函数对象)
f2 = begin_end(add)

f()
print('-'*10)
r = f2(123,456)
print(r)

直接 用 begin_end (填入需要扩展函数)

像本例中的 begin_end() 这种函数我们就称为装饰器

使用装饰器

  • 在定义函数时,可以通过 @ 装饰器,来使用指定的装饰器,来装饰当前函数
  • 可以为一个函数指定多个装饰器,这样函数将会按照从内向外的顺序被装饰
如再定义一个跟begin_end一样的名为fn3的装饰器,然后使用多个装饰器:
# 先用fn3进行装饰,再用begin_end进行装饰fn3装饰后的函数
@begin_end
@fn3
def say_hello():
    print('大家好~~~')

say_hello()

# 执行结果:
@begin_end开始执行~~~
@fn3开始执行~~~
大家好~~~
@fn3执行结束~~~
@begin_end执行结束~~~

三、装饰器的好处

  1. 可以修改多个函数
  2. 方便后期的维护
  3. 不违反开闭原则(OCP)
o: OPEN , c: CLOSE , p: 原则 。程序的设计,要求开放对程序的扩展,要关闭对程序的修改。
目录
相关文章
|
2天前
|
缓存 Python
Python中的装饰器:优雅而强大的函数装饰技术
在Python编程中,装饰器是一种强大而灵活的技术,它可以使函数具有额外的功能,而不需要改变函数的核心代码。本文将深入探讨装饰器的原理、用法以及实际应用场景,帮助读者更好地理解和利用这一重要的Python编程工具。
|
3天前
|
测试技术 Python
解密Python中的装饰器:提升代码可读性与灵活性
Python中的装饰器是一种强大的工具,能够在不改变原有函数结构的情况下,为函数添加额外功能。本文将深入探讨装饰器的原理及应用,介绍装饰器的基本语法和常见用法,并结合实例演示如何利用装饰器提升代码的可读性和灵活性,使代码更加简洁、模块化和易于维护。
|
3天前
|
监控 Python
Python中的装饰器:提升代码灵活性和可维护性
在Python编程中,装饰器是一种强大的工具,可以提高代码的灵活性和可维护性。本文将深入探讨装饰器的概念、用法和实际应用,帮助读者更好地理解并运用装饰器来优化自己的Python代码。
|
3天前
|
Python
Python中的装饰器:提升代码可读性与复用性
Python中的装饰器是一种强大的工具,能够提升代码的可读性和复用性。本文将深入探讨装饰器的原理、用法以及在实际项目中的应用,帮助读者更好地理解和利用这一特性,提升代码质量和开发效率。
|
3天前
|
监控 Python
Python中的装饰器:提升代码可读性与可维护性
Python中的装饰器是一种强大的工具,可以在不修改函数源代码的情况下,增加新的功能。本文将介绍装饰器的基本概念,以及如何使用装饰器来提升代码的可读性和可维护性。通过实例演示,读者将了解装饰器在各种场景下的灵活运用,从而更好地理解并应用于实际开发中。
|
3天前
|
缓存 Python
Python中的装饰器:提升代码可读性与灵活性
在Python编程中,装饰器是一种强大的工具,可以通过在函数或方法周围包装额外的功能来提升代码的可读性和灵活性。本文将深入探讨装饰器的概念、用法和实际应用,帮助读者更好地理解并运用这一Python编程的利器。
|
3天前
|
存储 Java 测试技术
Python中闭包和装饰器使用不当
【5月更文挑战第4天】Python中闭包和装饰器使用不当
14 1
|
3天前
|
存储 Java 测试技术
Python中闭包和装饰器使用不当Python中闭包和装饰器使用不当
【5月更文挑战第4天】Python中闭包和装饰器使用不当
8 2
|
3天前
|
Python
探索Python中的装饰器:提升代码灵活性与可维护性
Python中的装饰器是一种强大的工具,可以在不改变原有代码结构的情况下,动态地添加功能或修改函数的行为。本文将深入探讨装饰器的原理、常见用法以及如何利用装饰器提升代码的灵活性和可维护性。
|
3天前
|
缓存 测试技术 数据库
【Python 基础】什么是装饰器(decorator)?
【5月更文挑战第6天】【Python 基础】什么是装饰器(decorator)?