Python如何使用装饰器(Decorator)修改yield function返回值

在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

猜你喜欢

转载自blog.csdn.net/tp7309/article/details/72793120
今日推荐