为什么不能将'parent'和'tag'参数作为kwargs传递给xml.etree.ElementTree的SubElement工厂函数?

问题描述 投票:0回答:1

我正在使用Python 3.6.5。有效的方法:

from xml.etree.ElementTree import Element, SubElement
root = Element("root")
SubElement(root, "sub")

什么不做:

from xml.etree.ElementTree import Element, SubElement
root = Element("root")
SubElement(parent=root, tag="sub")

所以唯一的区别是将parenttag作为关键字参数传递(请注意,使用适当的关键字)。还要查看堆栈跟踪:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: SubElement() takes at least 2 arguments (0 given)

地球上怎么有0个论点

查看SubElement的来源:lines 443:459并没有给我任何启示。如您所见,SubElement的两个位置参数确实命名为parenttag

我们是否对this particular Raymond Hettinger的建议的有效性有第二个想法?

python arguments parameter-passing elementtree keyword-argument
1个回答
0
投票

该行为的原因可以在ElementTree.py的末尾找到:

ElementTree.py

您可以阅读的Python代码(# Import the C accelerators try: # Element is going to be shadowed by the C implementation. We need to keep # the Python version of it accessible for some "creative" by external code # (see tests) _Element_Py = Element # Element, SubElement, ParseError, TreeBuilder, XMLParser from _elementtree import * except ImportError: pass )不是您从自己的代码调用def SubElement(parent, tag, attrib={}, **extra)时将使用的代码。取而代之的是,将使用用C编写并针对您的OS编译的更有效的版本。这样可以确保库的性能更好。

因此,某些Python中通常可用的语法糖(在命名参数或位置参数之间进行选择的能力可能不可用。

© www.soinside.com 2019 - 2024. All rights reserved.