在Python中我们常常使用装饰器来扩展一个函数的功能,如果被装饰的函数中有使用yield关键字,函数的返回值可能是一个iterable,我们要修改其返回值该如何解决呢?便需要采用下面的写法:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import itertools, functools
def testWrapper(func):
@functools.wraps(func)
def wrapper(*args, **kw):
f = func(*args, **kw)
for item in f:
yield 'wrap: ' + str(item)
return wrapper
@testWrapper
def test():
for i in range(10):
yield i
for item in test():
print item