| |
|
开发:
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中的装饰器(语法糖) |
标识符@ 主要用于函数类的基础上添加一些可重用的额外功能,以提高代码的可重用性和可维护性,就是在不改变函数源代码的情况下为函数添加新功能。 一,在函数中的使用 eg:现在定义一个测定程序运行时间的函数
当我们想要运行一个函数时,并想知道这个函数运行了多长时间时,下面我先写出不用装饰器的情况。 假如我们现在需要知道遍历一到九花了多长时间
以上就是我们在不加装饰器时所写的代码,现在我写出装载装饰器后的代码,
我们可以明显的发现在装载装饰器后代码明显变少,这种方法有利于减小内存,增加代码可读性。
以上是运行结果,相当于给text()加上了calcu_time的功能。并且在text被调用时装饰器就会被出发运行。 参考 http://t.csdn.cn/QXRD8http://t.csdn.cn/QXRD8 这位博主的最后的例子很好的说明了装饰器的触发时间,下面我做略微的解释
下面是运行结果
首先代码是由上至下运行的 相当于text=dec1(dec2(text)) 代码由内向外运行,所以先运行dec2(text) 首先dec(func‘)中的func’为text,所以打印了aaaa,接着运行结束返回了two,所以此时的func“为two,dec2(text)运行完了后,成为了dec1(two)打印出了1111,运行完了后return one 回到函数调用处,运行one函数打印出了2222,two的上一级函数是two,所以在one函数中的func()运行了two函数打印出了bbbb,紧接着到了two函数的func()处,two的上一次函数为text,所以运行了text text,执行完后返回调用处,继续执行打印出来了cccc,two()函数运行完成返回调用处,执行了3333,自此整个程序执行完毕。 他的实质其实就是一个套娃 dec1(dec2(text))->dec1(text(two))->text(two(one)),执行完成。 如果还有人看不懂可以在评论区提问,或者复制代码去pycharm打断点然后打开debugger模式,可以看看函数执行的演变过程。 二,在类中的使用 在类中可以将装饰器应用于类方法与静态方法的构建。 1,类方法的构建
输出:
自建参数不再是self,而是cls,代指类,即为类的本身。 2,静态方法 当无关类和对象时使用,通过在方法上添加@staticmethod来实现,并被保存在该函数所在的类中。 我下面举一个静态方法的例子
输出
我们可以发现定义的show_time函数没有任何参数,与类和对象没有关系,故被称为静态方法,这种方法可以在一定条件上节约内存,增强代码可读性。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/18 5:50:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |