首页 > 编程 > Python > 正文

详解Python装饰器由浅入深

2020-02-23 04:08:49
字体:
来源:转载
供稿:网友

装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码。装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们以装饰函数为例子介绍其用法。要理解在Python中装饰器的原理,需要一步一步来。本文尽量描述得浅显易懂,从最基础的内容讲起。

(注:以下使用Python3.5.1环境)

一、Python的函数相关基础

第一,必须强调的是python是从上往下顺序执行的,而且碰到函数的定义代码块是不会立即执行它的,只有等到该函数被调用时,才会执行其内部的代码块。

def foo():print("foo函数被运行了!") 如果就这么样,foo里的语句是不会被执行的。程序只是简单的将定义代码块读入内存中。

再看看,顺序执行的例子:

def foo(): print("我是上面的函数定义!")def foo(): print("我是下面的函数定义!")foo()运行结果:我是下面的函数定义

可见,因为顺序执行的原因,下面的foo将上面的foo覆盖了。因此,在Python中代码的放置位置是有要求的,不能随意摆放,函数体要放在被调用的语句之前。

 其次,我们还要先搞清楚几样东西:函数名、函数体、返回值,函数的内存地址、函数名加括号、函数名被当作参数、函数名加括号被当作参数、返回函数名、返回函数名加括号。对于如下的函数:

 def foo(): print("让我们干点啥!") return "ok" foo()  

     函数名:        foo

  函数体:        第1-3行

  返回值:        字符串“ok”    如果不显式给出return的对象,那么默认返回None

  函数的内存地址:    当函数体被读进内存后的保存位置,它由标识符即函数名foo引用,
                                                   也就是说foo指向的是函数体在内存内的保存位置。

  函数名加括号:       例如foo(),函数的调用方法,只有见到这个括号,程序会根据
                                                   函数名从内存中找到函数体,然后执行它

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表