全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Python中最难理解的点-装饰器

本文将带领大家由浅入深的去窥探一下,这个装饰器到底是何方神圣,看完本篇,装饰器就再也不是难点了.

一、什么是装饰器

网上有人是这么评价装饰器的,我觉得写的很有趣,比喻的很形象

  • 每个人都有的内裤主要是用来遮羞,但是到了冬天它没法为我们防风御寒,肿木办?
  • 我们想到的一个办法就是把内裤改造一下,让它变得更厚更长,这样一来,它不仅有遮羞功能,还能提供保暖,不过有个问题,这个内裤被我们改造成了长裤后,虽然还有遮羞功能,但本质上它不再是一条真正的内裤了。于是聪明的人们发明长裤
  • 在不影响内裤的前提下,直接把长裤套在了内裤外面,这样内裤还是内裤,有了长裤后再也不冷了

装饰器就像我们这里说的长裤,在不影响内裤作用的前提下,给我们的身子提供了保暖的功效

二、装饰器的前传4步曲

为什么讲装饰器要放在入门篇的末尾讲呢,因为这货太难了,里面有许多前提要懂。Python的函数相信大家都懂了,但是大家知不知道函数也是一种对象,可以像参数一样传递,我们看下面的例子吧:

1)函数也是对象

def message(word='hello'):
 return word.upper()+'!'
print message()
>>
HELLO!
my_message=message
print my_message
>>
<function message at 0x000000000288E198>

print my_message()
>>
HELLO!

也就是说message可以赋值给另外一个变量

2)函数可以嵌套,定义在另外一个函数内部

def show():
 print 'Run in show()'
 def message(word='hello'):
 return word
 print message()
 
show()
>>
Run in show()
hello

message可以嵌套在show函数里面,调用show的时候也会跑下message函数

3)函数作为参数返回

一个函数还可以当做另外一个函数的返回值,不信看下面这个例子

>>
<function lower at 0x00000000027DAD68>
hello...

4)函数作为参数传入

我们先创建一个getName函数,然后把这个函数当做参数传递给foo函数

>>
I will call the getName function later
leo

三、装饰器的真面目

1).经过前面几步,大家应该理解了函数可以作为参数传入,也可以当参数返回,而且还可以嵌套
装饰器其实就是对函数进行再次包装,它能够在不改变函数的前提下,增加函数的功能,可以在函数执行之前或者执行之后执行一段代码

a_stand_alone_function()
>>
I am a stand alone function,don't you dare modify me
a_stand_alone_function_decorated=my_new_decorator(a_stand_alone_function)
a_stand_alone_function_decorated()
>>
Before the function runs
I am a stand alone function,don't you dare modify me
After the function runs

2).使用装饰器


看这样简单吧,装饰器有一个语法糖@,直接@my_new_decorator就把上面一坨代码轻松化解了,这就是Pythonic的代码,简洁高效

其实相当于:

another_stand_alone_function=my_new_decorator(another_stand_alone_function)

四、为什么要使用装饰器

装饰器提供了一些和代码维护性和审美相关的优点。并且作为结构化工具,装饰器自然地促进了代码的封装,这减少了冗余性并使得未来维护和扩展变得更容易。

如果大家学过Django和Flask就会知道,web框架里面大量的使用装饰器进行代码的封装.我们下面看一个简单的例子:

我们有一个主题函数word()是输出一个字符串,我们有一个函数是把字符串变粗体,另外一个是变斜体。有了装饰器之后,我们可以非常灵活的组合,扩展函数的功能:

>>
<b><i>hello</i></b>

有一点要注意,就是装饰器的顺序变了,结果是不一样的.

@makeitalic
@makebold
def word():
 return "hello"
print word()
>>
<i><b>hello</b></i>

好了装饰器的入门,就讲到这里,若有什么不懂的,也可以留言跟我探讨交流。其实还有很多装饰器的高级用法,比如装饰器传参数,类的装饰器等等我们后面会讲解。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# python装饰器详解  # python  # 装饰器  # 参数  # python装饰器的作用  # Python 装饰器使用详解  # 深入浅出分析Python装饰器用法  # 老生常谈Python之装饰器、迭代器和生成器  # Python中装饰器兼容加括号和不加括号的写法详解  # Python的装饰器使用详解  # 带你了解python装饰器  # 深入理解Python中装饰器的用法  # 详解 Python中LEGB和闭包及装饰器  # 还可以  # 有一个  # 一个函数  # 前提下  # 另外一个  # 就会  # 都有  # 成了  # 好了  # 放在  # 也会  # 就像  # 有个  # 我觉得  # 大家都  # 这就是  # 还能  # 每个人  # 由浅入深  # 不懂 


相关文章: 如何快速搭建高效WAP手机网站吸引移动用户?  如何生成腾讯云建站专用兑换码?  免费网站制作appp,免费制作app哪个平台好?  建站之星安装步骤有哪些常见问题?  SQL查询语句优化的实用方法总结  网站制作大概多少钱一个,做一个平台网站大概多少钱?  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  如何在Windows服务器上快速搭建网站?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  制作农业网站的软件,比较好的农业网站推荐一下?  建站之星2.7模板:企业网站建设与h5定制设计专题  网站代码制作软件有哪些,如何生成自己网站的代码?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  如何在腾讯云服务器上快速搭建个人网站?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何在Windows环境下新建FTP站点并设置权限?  如何快速建站并高效导出源代码?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  如何在橙子建站上传落地页?操作指南详解  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  企业微网站怎么做,公司网站和公众号有什么区别?  行程制作网站有哪些,第三方机票电子行程单怎么开?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  网站制作软件有哪些,制图软件有哪些?  高防服务器:AI智能防御DDoS攻击与数据安全保障  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  如何高效配置香港服务器实现快速建站?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  建站主机如何安装配置?新手必看操作指南  如何选择建站程序?包含哪些必备功能与类型?  宝塔Windows建站如何避免显示默认IIS页面?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  C#怎么创建控制台应用 C# Console App项目创建方法  济南网站建设制作公司,室内设计网站一般都有哪些功能?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  如何正确选择百度移动适配建站域名?  已有域名和空间如何快速搭建网站?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何在香港免费服务器上快速搭建网站?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何用PHP快速搭建CMS系统? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。