【问题标题】:Why can't <some-name> be used in a python list?为什么 <some-name> 不能在 python 列表中使用?
【发布时间】:2015-01-26 00:08:43
【问题描述】:

例如,我们不能手动输入列表:

list = [<element1>, <element2>, <element3>...]

引发错误:

>>> list = [<DOM Text node "u'\n\t'">]
  File "<stdin>", line 1
    list = [<DOM Text node "u'\n\t'">]
        ^
SyntaxError: invalid syntax

而我们可以将 XML 解析元素中的元素放入一个列表中,这不会导致任何语法错误。我在列表中列出了一些 XML 元素:

[<DOM Text node "u'\n\t'">, 
 <DOM Element: APPLE at 0x18a4648>, 
 <DOM Text node "u'\n\t\n\t'">, 
 <DOM Element: GOOGLE at 0x18a4968>, 
 <DOM Text node "u'\n\t\n\t'">, 
 <DOM Element: LENOVO at 0x18a4b48>, 
 <DOM Text node "u'\n\t\n\t'">, 
 <DOM Element: SAMSUNG at 0x18a4be8>, 
 <DOM Text node "u '\n'">]

效果很好,但是当我手动尝试使用上述元素输入列表时,它会失败。

谁能解释为什么会这样?

【问题讨论】:

  • &lt;DOM Text node "u'\n\t'"&gt; 是节点的表示node.__repr__(),它与实际的节点对象相同,它不没有“字面”表示。该表示本身不是有效的 Python 语法;因此SyntaxError.
  • 您可以将任何 Python 对象放入列表中。 XML 解析元素是一个 python 对象,你所拥有的是无效的语法。您可能想要创建一个字符串对象。

标签: python xml dom


【解决方案1】:

尖括号之间的内容只是类的可读表示,例如:

>>> class Test:
...  pass
... 
>>> a = Test()
>>> print(a)
<__main__.Test object at 0x7f76070b6198>
>>> repr(a)
'<__main__.Test object at 0x7f76070b6198>'

&lt;...&gt; 只是一个文本字符串,我们实际上可以使用__str__() and __repr__() 函数控制它打印的内容:

>>> class Banana:
...   def __str__(self):
...     return 'I am probably yellow!'
...
...   def __repr__(self):
...     return 'I am probably yellow!'
... 
>>> b = Banana()
>>> print(b)
I am probably yellow!
>>> repr(b)
I am probably yellow!

如果您想使用这些变量创建一个列表,请使用变量名(在本例中为ab):list = [a, b]

额外提示:
list 是 Python 中的内置名称(指的是 list 类型 (type([]) == list);您可能不想将其用作变量或函数名称(但因为Python 很酷,无论如何它都会允许你这样做)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-07
    • 2012-10-17
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 2023-04-03
    • 2012-07-01
    相关资源
    最近更新 更多