装饰器的使用 | Python从入门到精通:高阶篇之十八

简介: 通过装饰器,可以在不修改原来函数的情况下来对函数进行扩展。在开发中,我们都是通过装饰器来扩展函数的功能的。

查看上一节:装饰器的引入

装饰器的使用

上节课我们说了:每扩展一个函数就可以手动创建一个新的函数,但是这个方式实在是太麻烦了。

为了解决这个问题,我们可以创建一个函数,让这个函数可以自动的帮助我们生产函数。
接下来就介绍一下这个自动生成函数的函数怎么写:

因为我们在扩展的时候,不同的函数可能携带的参数不同,类型不同或者数量不同导致每次都要修改新函数的类型,所以这里介绍一下*args 这种通用的用法解决该问题。

def begin_end(old):
    '''
用来对其他函数进行扩展,使其他函数可以在执行前打印开始执行,执行后打印执行结束

        参数:
            old 要扩展的函数对象
    '''
    # 创建一个新函数
    def new_function(*args , **kwargs):
        print('开始执行~~~~')
        # 调用被扩展的函数
        result = old(*args , **kwargs)
        print('执行结束~~~~')
        # 返回函数的执行结果
        return result

    # 返回新函数        
    return new_function

f = begin_end(fn)
f2 = begin_end(add)
f3 = begin_end(mul)

# r = f()
# r = f2(123,456)
r = f3(123,456)
print(r)

执行结果为:
image.png
像begin_end()这种函数我们就称它为装饰器(旧函数作为一个参数传进去,返回一个新函数)。

通过装饰器,可以在不修改原来函数的情况下来对函数进行扩展。

在开发中,我们都是通过装饰器来扩展函数的功能的。

装饰器的典型用法

def fn3(old):
    '''
        用来对其他函数进行扩展,使其他函数可以在执行前打印开始执行,执行后打印执行结束

        参数:
            old 要扩展的函数对象
    '''
    # 创建一个新函数
    def new_function(*args , **kwargs):
        print('fn3装饰~开始执行~~~~')
        # 调用被扩展的函数
        result = old(*args , **kwargs)
        print('fn3装饰~执行结束~~~~')
        # 返回函数的执行结果
        return result

    # 返回新函数        
    return new_function

@fn3
@begin_end
def say_hello():
    print('大家好~~~')

say_hello()

执行结果为:
image.png
此处是先装饰了离函数最近的begin_end,又在外部装饰了fn3装饰器。如果调换了位置,装饰顺序就不同了。可以自己尝试一下。

总结:在定义函数时,可以通过@装饰器,来使用指定的装饰器,来装饰当前的函数。

可以同时为一个函数指定多个装饰器,这样函数将会按照从内向外的顺序被装饰 。

点击查看配套视频教程

更多内容请订阅python学习站官方技术圈!

相关文章
|
6月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
732 7
|
7月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
513 1
|
6月前
|
测试技术 Python
Python装饰器:为你的代码施展“魔法”
Python装饰器:为你的代码施展“魔法”
346 100
|
7月前
|
设计模式 缓存 监控
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
345 101
|
6月前
|
缓存 Python
Python装饰器:为你的代码施展“魔法
Python装饰器:为你的代码施展“魔法
301 88
|
7月前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
282 99
|
7月前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
385 98
|
7月前
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
7月前
|
存储 缓存 测试技术
理解Python装饰器:简化代码的强大工具
理解Python装饰器:简化代码的强大工具
|
6月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
1217 1
Python API接口实战指南:从入门到精通

推荐镜像

更多