| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python中的闭包函数&装饰器 -> 正文阅读 |
|
[Python知识库]python中的闭包函数&装饰器 |
本文为在霍格沃兹测试开发学社中学习到的一些技术(或者:本文为在霍格沃兹测试开发学社的学习经历分享),写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 当我们在python中定义一个函数中,我们可能需要这个函数执行的一些其他属性等等,如下面的例子: 当我们在执行一个函数时,打印这个函数运行时总共运行了多长的时间 首先定义该函数:
其次打印这个函数的执行总共需要运行的时间是多少
如果我们再还一个其他的函数,去计算它执行的时间有多少,需要将上面的代码再重复的编写,通过再次封装一个函数,我们将这个功能去实现出来 在这里,变化的是这个函数,那么我们将这个函数作为一个参数去传入另外一个实现该功能的函数,并在此函数中去定义我们需要计算执行时间的函数
上述代码中我们将实现打印函数执行的时间功能封装成了一个函数,这样其他的函数有计算执行时间的需求时,我们即将这个函数的引用传入即可 但同时又引入其他的一些问题: ????????1.我们在调用函数的时候,调用方式是cal_time(hog,'hog'),代码的可读性比较差,我们在阅读代码时,有时候会不清晰为什么要调用外部的这个函数,容易搞混淆 ????????2.外函数的实现封装的功能可读性也不够明确 ????????3,每个函数可能会有不同的参数 那么基于以上的问题,我们有了以下的解决方式 在上述的代码方式中,我们在外函数里面又定义了一个内函数,在内函数中实现功能,并且调用需要执行的函数,并将这个内函数的引用返回;且内函数可以传入多种参数,解决了上述的第2个和第3个问题
首先我们来了解下闭包函数的定义: 一个函数的返回值是另外一个函数,返回的函数调用父函数内部的变量,如果返回的函数在外部被执行,就产生了闭包函数。 我们定义的上述函数其实就是闭包函数,我们在close函数中定义了一个内函数,并且该外函数的返回值是一个该内函数,而我们在执行close(hog)('hog')时,实际上也是执行内函数,于是上述就是一个闭包函数 下面就引入了我们的装饰器,而我们装饰器本质上就是一个闭包函数,只是编写的格式不同
我们在使用装饰器之后,仅使用hog('hog')即可,就可以实现上述函数的调用。 问题又来了,为什么在被包裹的函数定义前加@close,就可以直接去调用被包裹的函数呢,我们看看调试的信息 当我们直接使用hog('hog')如下图,可以看到,hog函数的引用被赋值外函数中内函数的引用,那么hog(‘hog’),就相当于是内函数的调用,因此我们直接使用hog('hog')就等价于close(hog)('hog') 如此,我们的装饰器就完成啦! 推荐阅读文章链接:接口测试经典面试题:Session、cookie、token有什么区别?_霍格沃兹测试开发学社的博客-CSDN博客 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 10:20:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |