美文网首页编程语言爱好者Python时空大数据呆鸟的Python数据分析
Python学习神器之闭包和装饰器,据说掌握的人都是时间管理者

Python学习神器之闭包和装饰器,据说掌握的人都是时间管理者

作者: Java领域指导者 | 来源:发表于2020-05-25 19:26 被阅读0次


    前言

    装饰器和闭包常常为程序员们减少了很多代码量,在Python学习中,装饰器和闭包是常用的两个知识点。今天,我们一块来学习一下。

    装饰器可以实现在代码运行期间修改函数的上下文,简单来说就是,在不改变原函数的情况下,丰富原函数的功能;而闭包简单来说就是,内层函数调用外层函数的变量,外层函数返回内层函数的引用。两者也有着密不可分的关系!!!

    闭包函数和装饰器

    闭包函数

    概念:在函数中(嵌套)定义另一个函数时,内部函数引用了外层函数的名字。

    特性闭包函数必须在函数内部定义闭包函数可引用外层函数的名字

    闭包函数是函数嵌套、函数对象、名称空间与作用域结合体

    闭包中被内部函数引用的变量,不会因为外部函数结束而被释放掉,而是一直存在内存中,直到内部函数被调用结束

    应用:为了给装饰器的使用做准备

    装饰器

    概念:在不修改被装饰对象源代码与调用方式的前提下,添加新的功能。简单来说,就是给其他函数增加额外功能的函数

    装饰器必须遵循“开放封闭”原则开放:对函数功能的添加是开放的封闭:对函数功能的修改是封闭的

    必备条件:不能改变被装饰对象源代码为被装饰对象添加新的功能不能改变被装饰对象调用方式

    使用装饰器,可以解决代码冗余问题,提高代码的可扩展性

    应用:统计时间、登录认证

    说了这多理论,上代码。

    需求:统计下载媒体文件的时间(简易版)

    以上代码确实实现了统计下载时间的功能,问题来了,如果我有多个类型文件下载函数,都需要统计时间呢?难道展现我们的“CV大法”?估计隔天就要被扫地出门了……

    就没有什么办法可以解决了吗?当然有啦!先看代码

    以上代码就是对装饰器的引入,其中 time_record 就是装饰器,download_movie 和 download_music 就是被装饰的函数对象。

    通过观察,以上被装饰的函数对象是没有返回值,且没有参数的。问题来了,假如 download_movie 等被装饰对象是有返回值和参数,那该咋整?

    不说废话,继续看代码

    细心如你,装饰器定义好了,但是每次调用都特别麻烦,有没有一种比较便捷的调用方式呢?

    当当当当!当然有,那就是装饰器的语法糖,听起来就感觉使用非常甜,咋用呢?继续看代码(由于之前代码已经实现了装饰器,这里就不重复展示了,只实现语法糖的代码

    装饰器语法糖

          顾名思义,这个关键字只属于装饰器

          关键字@

          使用方法:@ 装饰器名称

    注意:在使用时,装饰器必须在被装饰对象之前定义

    装饰器终极模板

    怎么样?是不是感觉意犹未尽?是不是急着想自己练习一下呢?那就行动起来吧!!!

    喜欢文章请多多点赞评论转发,感觉小编不招人烦的话,给小的来手关注啊,谢谢各位大爷~~~

    另外,小编还帮大家整理了一些Python闭包及其他一些基础学习资料,有需要的小伙伴还是老规矩啊,转发+关注并加微信:bjmsb1来免费领取吧~~~

    相关文章

      网友评论

        本文标题:Python学习神器之闭包和装饰器,据说掌握的人都是时间管理者

        本文链接:https://www.haomeiwen.com/subject/bnruahtx.html