1

cElementTree是 XML API 的快速 C 实现ElementTree。在 python 2 中,您将显式加载它(将其别名为ElementTree),但在Python 3 文档中我读到了这个:

在 3.3 版更改:此模块将在可用时使用快速实现。xml.etree.cElementTree 模块已弃用。

事实上,xml.etree.cElementTree.py现在只是从xml.etree.ElementTree. 问题:如何获得“快速实施”?我如何判断它是否“可用”,如果由于某种原因它没有随 python 分发,我从哪里得到它?

我的程序中的自省ElementTree表明我正在获取 python 版本。在ElementTree.py中,我没有发现 C 版本的任何挂钩。它何时以及如何发挥作用?该ElementTree文档没有提供任何线索,也没有在 google 和 stackoverflow 上进行快速搜索。

4

1 回答 1

2

来自“ Python 3.3 中的新增功能”文档:

xml.etree.ElementTree模块现在默认导入其 C 加速器;不再需要显式导入 xml.etree.cElementTree(此模块保留是为了向后兼容,但现在已弃用)。此外,Element 的 iter 系列方法已经过优化(用 C 重写)。该模块的文档也通过添加示例和更详细的参考得到了极大的改进。

虽然看起来好像没有发生,但导入是静默进行的。ElelementTree.py您会在其中找到一段代码

# Import the C accelerators
try:
    # Element, SubElement, ParseError, TreeBuilder, XMLParser
    from _elementtree import *
except ImportError:
    pass
else:
    # Overwrite 'ElementTree.parse' and 'iterparse' to use the C XMLParser

    class ElementTree(ElementTree):
       ...

似乎没有一种简单的方法来验证是否正在导入 C 模块,但我认为您可以接受它。如果你真的很担心(我个人不会),那么你可以print在那里修补一个来检查。

于 2015-05-31T14:48:56.923 回答