Open GreenFaith opened 10 years ago
def nums():
i = 0
while True:
i = i + 1
if i < 224:
yield i
else:
break
n = nums()
print(n.next())
print(n.next())
def find223(numbers):
number = numbers.next()
while(number):
if number == 223:
print("get it!!!")
break
try:
number = numbers.next()
except Exception,e:
return
find223(n)
layout: post title: "python Decorators" date: 2014-06-11 14:23:00
Decorators(装饰器)
Decorators 本身是一个函数,生来就只有一个目的
接受一个函数,返回一个函数
看个例子就明白了:
相当于:
decorate 在原本定义的函数
fun
上悄无声息地添加一些代码。不管是写成 @开头的注释模式,还是直接写成函数,效果都是一样的。Closures
前面说过 Decorator 是一个接受函数作为参数,并返回函数的东西。
而Closures 大概就可以认为是一种接受参数(不局限与函数),返回函数的东西。
先看个简单的例子:
是不是有点意思,通过 Closures 我们可以生产一堆类似的函数:
推广一下这种模式,通过选择不同的输入参数,我们可以动态构造不同的函数。 是不是有点元编程的味道?
Wrappers
Decorate 模式其实存在一个问题:
new_fun
丢失了 fun 的某些信息。 那么把__name__
和__doc__
复制给new_fun
不就好了?但是处女座说这样绝逼不行,如果要复制的东西很多?每次些decorator都得这么复制? 不就是复制函数信息么,哥加个小技能就能搞定:
带参数的Decorator:
这个例子的亮点在于
closure
的使用,把src_fucn
的信息带入copy
装饰器。 而且上面复制函数信息的copy_from
,python已经内置了更全面的实现functool.wraps
用法与copy_from
一致。参考文献:
<< Pro Python >>-- Marty Alchin