le_*_*ine 5 python yield generator
我有一段代码(一个xls解析器),它对字段进行一些验证,并返回yield,一个包含xls每一行的生成器.
现在,我必须在列表中收集验证错误,并在生成器耗尽时使用它们.
这是代表解析器和设计不佳的解决方案的一段代码.
error_list = []
def gen(limit): #xls parser
for x in range(limit):
if x%2: #fake error contition
error_list.append(x)
else:
yield(x*x) #return
Run Code Online (Sandbox Code Playgroud)
有更多的pythonic方式来做到这一点?我不是全球变量的忠实粉丝.
我喜欢尽可能地保持代码,但如果没有其他方法我会将功能转换为经典
def gen(limit): #xls parser
error_list = []
results = []
for x in range(limit):
if x%2: #fake error contition
error_list.append(x)
else:
results.append(x*x)
return results, error_list
Run Code Online (Sandbox Code Playgroud)
生成器函数不能像这样返回带外数据.
我会使用一个类,因为一个实例给你一些东西来坚持这样的额外状态:
class XLSParser(object):
def __init__(self, limit):
self.error_list = []
self.limit = limit
def __iter__(self):
for x in range(self.limit):
if x%2: #fake error condition
self.error_list.append(x)
else:
yield(x*x) #return
Run Code Online (Sandbox Code Playgroud)
并遍历该对象:
parser = XLSParser(limit)
for result in parser:
# do something
errors = parser.error_list
Run Code Online (Sandbox Code Playgroud)