lxml中getiterator()和iter()有什么区别?
问题是这样的,x.getiterator()
和 x.iter()
这两个有什么区别呢?这里的 x
是一个 ElementTree 或者一个 Element。因为我发现这两个方法似乎都能用,我试过了。
如果我哪里说错了,请指正我。
2 个回答
8
Python的ElementTree文档提到,从2.7版本开始,getiterator()
这个方法已经不再推荐使用,建议用Element.iter()
来代替。同时,lxml的API文档也说了同样的事情,但还提到lxml中getiterator()
的实现和原来的ElementTree有些不同。
有趣的是,文档还提到“如果你想要一个高效的迭代器,应该使用tree.iter()方法”。这里的“高效”这个词让我觉得getiterator()
和iter()
之间肯定有实现上的区别,不过我没有查看源代码,所以不能百分之百确认。
总之,如果某个东西被标记为不推荐使用,那就说明他们不希望你继续用它。
0
getiterator
是 ElementTree
这个库里标准的写法;而 iter
是一个只在 lxml
这个库里用的方法。如果你在使用 ElementTree
的时候需要用到它,代码就会出问题。而且,除了让你少打7个字母之外,这个方法似乎没有任何值得推荐的优点;-)。