在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
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐