首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么不能将‘父’和‘标记’参数作为kwargs传递给SubElement工厂函数xml.etree.ElementTree?

为什么不能将‘父’和‘标记’参数作为kwargs传递给SubElement工厂函数xml.etree.ElementTree?
EN

Stack Overflow用户
提问于 2018-11-22 13:43:28
回答 1查看 377关注 0票数 0

我正在使用Python3.6.5。什么起作用:

代码语言:javascript
运行
复制
from xml.etree.ElementTree import Element, SubElement
root = Element("root")
SubElement(root, "sub")

没有的是:

代码语言:javascript
运行
复制
from xml.etree.ElementTree import Element, SubElement
root = Element("root")
SubElement(parent=root, tag="sub")

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

代码语言:javascript
运行
复制
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: SubElement() takes at least 2 arguments (0 given)

为什么有0参数给

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

我们是否应该重新考虑一下这个特别的雷蒙德·赫廷格的建议的有效性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-04 11:29:21

这种行为的原因可以在ElementTree.py的末尾找到。

代码语言:javascript
运行
复制
# 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

您可以读取的Python代码(def SubElement(parent, tag, attrib={}, **extra))不是从您自己的代码调用SubElement()时使用的代码。相反,将使用用C编写并为您的操作系统编译的更高效的版本。这确保了图书馆的更好的性能。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53432332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档