装饰器模式,重点在于装饰。装饰的核心仍旧是被装饰对象。
类比于Java编程的时候的包装模式,是同样的道理。虽然概念上稍有不同但是原理上还是比较相近的。下面我就来谈一谈我对Python的装饰器的学习的一点心得吧。
关于作用域
Python作用域 体现在LEGB中:
- L:local 函数内部
- E: enclosing 函数内部和内置函数之间
- G:global 全局性质,有命名空间的限制
- B:build-in 内置函数,由python解释器管理
学过编程的人一眼就可以看得出来大致是什么意思,所以这里不再叙述。
关于闭包
关键在于理解Python中闭包的概念。说白了,闭包就是函数里面又定义了函数,这就是闭包了。(呵呵,断章取义一下。可能说法不恰当)。如下:
def func1():
print 'func1 is running'
def in_func1():
print 'in_func1 is running'
return in_func1
print 'over'
简单的一个闭包的实现,就差不多是这个样子的。我们需要注意的就是要将内部函数当成一个对象来返回(Python中函数其实就是一个对象,我们可以通过type来进行验证)。
这段代码执行的流程是先执行func1,然后执行func2,并且将func2作为一个属性返回给func1.这样我们可以再次的得到func2的内容。这就是闭包!