我正在處理一個涉及從統一差異補丁驗證格式的問題。在python中調用next之前修飾一個迭代器的好方法是什麼?
內部格式中的變量一次可以跨越多行,因此我編寫了一個生成器,用於拉取每行並在完成時生成變量。
爲了避免在從一個統一的差異文件中讀取時必須重寫此函數,我創建了一個生成器,以便在將統一的差異字符傳遞給內部格式驗證器之前從該行中去除統一的差異字符。但是,我陷入了無限循環(無論是在代碼中還是在我的腦海中)。我已經將問題抽象爲以下代碼。我相信有更好的方法來做到這一點。我只是不知道它是什麼。
from collections import Iterable
def inner_format_validator(inner_item):
# Do some validation to inner items
return inner_item[0] != '+'
def inner_gen(iterable):
for inner_item in iterable:
# Operates only on inner_info type data
yield inner_format_validator(inner_item)
def outer_gen(iterable):
class DecoratedGenerator(Iterable):
def __iter__(self):
return self
def next(self):
# Using iterable from closure
for outer_item in iterable:
self.outer_info = outer_item[0]
inner_item = outer_item[1:]
return inner_item
decorated_gen = DecoratedGenerator()
for inner_item in inner_gen(decorated_gen):
yield inner_item, decorated_gen.outer_info
if __name__ == '__main__':
def wrap(string):
# The point here is that I don't know what the first character will be
pseudo_rand = len(string)
if pseudo_rand * pseudo_rand % 2 == 0:
return '+' + string
else:
return '-' + string
inner_items = ["whatever"] * 3
# wrap screws up inner_format_validator
outer_items = [wrap("whatever")] * 3
# I need to be able to
# iterate over inner_items
for inner_info in inner_gen(inner_items):
print(inner_info)
# and iterate over outer_items
for outer_info, inner_info in outer_gen(outer_items):
# This is an infinite loop
print(outer_info)
print(inner_info)
任何想法,以更好,更pythonic的方式來做到這一點?
我認爲最後一個例子就是我正在尋找的東西。 – 2011-06-15 05:14:38