专栏名称: Python技术博文
分享有关Python知识,了解IT界最新技术,让我们一起从菜鸟变成大牛吧!
目录
相关文章推荐
Python开发者  ·  强烈建议尽快搞个软考证!(重大利好) ·  昨天  
Python爱好者社区  ·  为什么多数程序员都去做个人独立开发? ·  3 天前  
Python爱好者社区  ·  iPhone 16 全系暴跌,简直香疯了! ·  6 天前  
Python爱好者社区  ·  终于不用为GPU算力发愁了,请低调使用! ·  1 周前  
Python爱好者社区  ·  深度学习“四大名著”发布 ·  1 周前  
51好读  ›  专栏  ›  Python技术博文

传说中Python最难理解的点,看这完篇就够了

Python技术博文  · 公众号  · Python  · 2017-07-22 09:00

正文

传说中Python最难理解的点,这块到底是什么的,猜对了就是传说中的装饰器,我记得我好几年前刚学Python的时候,看装饰器就觉得看九阴真经里面的怪文字,完全看不懂,确实装饰器是一个非常难以理解的概念。

1.什么是装饰器

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

每个人都有的内裤主要是用来遮羞,但是到了冬天它没法为我们防风御寒,肿木办?

我们想到的一个办法就是把内裤改造一下,让它变得更厚更长,这样一来,它不仅有遮羞功能,还能提供保暖,不过有个问题,这个内裤被我们改造成了长裤后,虽然还有遮羞功能,但本质上它不再是一条真正的内裤了。于是聪明的人们发明长裤

在不影响内裤的前提下,直接把长裤套在了内裤外面,这样内裤还是内裤,有了长裤后再也不冷了

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

2.装饰器的前传4步曲

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

1)函数也是对象

def message(word='hello'):

return word.upper()+'!'

print message()

>>

HELLO!

my_message=message

print my_message

>>

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)函数作为参数返回

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

>>

hello...

4)函数作为参数传入

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

>>

I will call the getName function later

leo

3.装饰器的真面目

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)

4.为什么要使用装饰器

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

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

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

输出hello

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

@makeitalic

@makebold

def word():

return "hello"

print word()

输出hello

以上就是我对Python装饰器的一些个人总结,希望对你们有帮助。


邢老师《Python量化投资入门》培训课程也上线了:


  • 从Python从入门到上手,手把手教你从安装常用工具库的使用。

  • 量化投资从基础到策略编写,手把手教你从获取数据自动下单。

  • 每位同学在课程结束后,都能有自己的策略并用Python实现自动交易

  • 课程中配套大量国内量化基金实际案例

  • 任何问题,可通过文字、语音、远程桌面等方式提问,老师亲自解答

  • 每节还配套作业及讲解,做作业,老师会骂人的~!

  • 免费加入主讲老师的「小密圈」(原价66元),获得量化投资最新动态


它叫《Python量化投资入门》 = Python入门课程 + 量化投资入门课程 + Python编写投资策略。


主讲老师邢不行,毕业于香港科技大学金融工程实验室(全额奖学金)、经管之家(原人大经济论坛)「量化投资」版块的版主、多年量化投资实战经验。


课程定价 998元,是市面上 量化/Python培训 的三分之一(可动动小手了解一下,搜索“量化培训”或“Python培训”),而且你购买了一份永久视频外加老师作业辅导。


了解详细课程、试听课程

长按下图——「识别图中二维码」


推荐文章
Python爱好者社区  ·  为什么多数程序员都去做个人独立开发?
3 天前
Python爱好者社区  ·  iPhone 16 全系暴跌,简直香疯了!
6 天前
Python爱好者社区  ·  终于不用为GPU算力发愁了,请低调使用!
1 周前
Python爱好者社区  ·  深度学习“四大名著”发布
1 周前
终极较量  ·  你的微信被盯上了,速看!
7 年前
经典微小说  ·  我就想找一个很作的女朋友
7 年前
长安街知事  ·  在清华抢人,不容易!
7 年前