【发布时间】:2015-01-21 03:51:55
【问题描述】:
是否有可能,如果可以,是否可取,如果可以,推荐使用什么方法来装饰产生值的函数?
例如,考虑一下我虚构的这个例子
def foobar_creator(func):
def wrapped(**kwargs):
res = func(**kwargs)
flag = True
for k,v in kwargs:
if res % v == 0:
flag = False
yield k
if flag:
yield res
return wrapped
@foobar_creator
def generic_yielder(**kwargs):
for i in xrange(sys.maxint):
yield i
for i in generic_yielder(foo=3, bar=5, foobar=15):
print i
【问题讨论】:
-
看起来过于复杂。 “装饰产生价值的函数”具体是什么意思?您想到什么用例?
-
@ivan_pozdeev 用例:我有一堆从 api 产生新值的生成器函数。我想在不触及现有功能的情况下应用过滤器。因此,对于一个精简的示例示例
def get_new(): result = new_result(); yield result,我只想过滤掉并产生,比如包含字符串 'foobar' 的结果,而不会破坏复杂的new_result进程
标签: python generator decorator yield python-decorators