【问题标题】:Python list syntax explanationPython列表语法解释
【发布时间】:2012-02-22 21:13:28
【问题描述】:

我注意到,当我使用 python 时,我偶尔会出现排版错误,并且定义类似于

L = [1,2,3,]

我的问题是,为什么这不会导致错误?

【问题讨论】:

  • 为什么会报错?多余的“,”有什么问题?为什么这会是一个错误?
  • 我认为这意味着列表中还有其他内容。有点像有一个左括号。
  • 除了,它不像一个开放的()。因为() 成对出现。 , 不是成对出现的。
  • 实际上,如果将列表/元组拆分为多行,添加尾随逗号通常被视为一种很好的做法和风格。

标签: python python-3.x


【解决方案1】:

它不会导致错误,因为它是一个有意的功能,允许在列表和元组中使用尾随逗号。

这对元组尤其重要,否则很难定义单个元素的元组:

>>> (100,)   # this is a tuple because of the trailing comma
(100,)
>>> (100)    # this is just the value 100
100

它还可以更轻松地重新排序或将元素添加到长列表中。

【讨论】:

  • 此外,它使机器生成的代码更容易(您不必为结尾的逗号添加特殊情况)。
  • 如果您正在执行“,”.join(elements),则无需对尾随逗号进行特殊处理。 :-)
  • @kindall: 但如果len(elements) 为1,",".join(elements) 不会生成元组。
【解决方案2】:

来自 Python 文档:

尾随逗号仅用于创建单个元组(也称为单例);在所有其他情况下它是可选的。没有尾随逗号的单个表达式不会创建元组,而是产生该表达式的值。 (要创建一个空元组,请使用一对空括号:()。)

【讨论】:

    【解决方案3】:

    我的问题是,为什么这不会导致错误?

    后面的逗号被忽略,因为它很方便:

    funcs = [ run,
              jump,
              # laugh
            ]
    

    【讨论】:

      【解决方案4】:

      您可以在官方文档中阅读更多信息:

      Why does Python allow commas at the end of lists and tuples?

      Python 允许您在 liststuplesdictionaries 的末尾添加一个尾随逗号:

      [1, 2, 3,]
      ('a', 'b', 'c',)
      d = {
          "A": [1, 5],
          "B": [6, 7],  # last trailing comma is optional but good style
      }
      

      允许这样做有几个原因。

      当列表、元组或字典的字面值分布在多行中时,添加更多元素会更容易,因为您不必记住在前一行添加逗号。也可以在编辑器中对这些行进行排序,而不会产生语法错误。

      意外省略逗号可能会导致难以诊断的错误。例如:

      x = [
        "fee",
        "fie"
        "foo",
        "fum"
      ]
      

      这个列表看起来有四个元素,但实际上包含三个:"fee""fiefoo""fum"。始终添加逗号可以避免这种错误来源。

      允许尾随逗号也可能使程序代码生成更容易。

      【讨论】:

        【解决方案5】:

        这样做

        >>> l = 1,2,3,
        >>> l
        (1, 2, 3)
        

        () 是可选的。 ,,表示您正在创建一个序列。

        注意这一点

        >>> l = 1,
        >>> l
        (1,)
        >>> l = 1
        >>> l
        1
        

        再次。 , 表示它是一个序列。 () 是可选的。

        想想也没错

        [ 1, 2, 3, ]
        

        作为列表构造函数[ ] 内的元组1, 2, 3,。从底层元组创建一个列表。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-10-03
          • 2020-04-14
          • 1970-01-01
          • 1970-01-01
          • 2011-06-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多