gpt4 book ai didi

python - 如何在循环中调用带有非类型函数的生成器类型函数?

转载 作者:太空宇宙 更新时间:2023-11-04 09:16:03 25 4
gpt4 key购买 nike

我在类 Reader() 中有一个生成器函数 getElements,它从 xml 文件中生成所有元素。我还希望有一个函数 getFeatures 只生成带有特征标签的元素。

我的尝试是设置一个标志 featuresOnly,在调用 getFeatures 时将其设置为 True,并在 getFeatures 中调用 self.getElements,如下所示:

def getFeatures(self):
self.getFeaturesOnly = True
self.getElements()

这样在getElements()中我只需要做

def getElements(self):
inFile = open(self.path)
for element in cElementTree.iterparse(inFile):
if self.getFeaturesOnly == True:
if element.tag == 'feature':
yield element
else:
yield element
inFile.close()

但是,当我这样做并运行它时

 features = parseFeatureXML.Reader(filePath)
for element in features.getFeatures():#
print element

我得到:TypeError: 'NoneType' object is not iterable这是因为 getFeatures 不包含产量。现在,我知道如何解决这个问题的方法是将 getElements 的代码复制到 getFeatures 中,并且只使用

if elementFunctions.getElmentTag(element) == 'feature':

在 getFeatures() 函数中,但我不想复制任何代码。那么我如何才能继续使用生成器功能,并拥有一个不同的功能,我只指定我想要获得哪个标签?

最佳答案

首先要做的事情:你有那个错误是因为你没有返回生成器

意味着你必须改变:

def getFeatures(self):
self.getFeaturesOnly = True
self.getElements()

与:

def getFeatures(self):
self.getFeaturesOnly = True
return self.getElements() # returning the generator

清除这个,TBH 我不会像这样设计我的 Reader() 类。

我会让 getElement 产生所有元素:

def getElements(self):
inFile = open(self.path)
for element in cElementTree.iterparse(inFile):
yield element
inFile.close()

然后 getFeatures() 进行过滤:

def getFeatures(self):
for element in self.getElements():
if element.tag == 'feature':
yield element

关于python - 如何在循环中调用带有非类型函数的生成器类型函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9326668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com