【问题标题】:Variables treated differently than Values变量的处理方式不同于值
【发布时间】:2023-02-25 11:36:00
【问题描述】:

我试图将字典添加到列表中,但我错误地使用了 += 运算符。发现错误后,我注意到如果我运行

a = []
a += {'b' : 2, 'c' : 3, 'd' : 4}
print(a)

我得到 ['b', 'c', 'd']。 如果我运行同样的东西,但我直接引用 [],我会得到一个错误。 SyntaxError: 'list' is an illegal expression for augmented assignment

我希望结果是相同的,但显然 x 的处理方式不同,即使它的值设置为 []。

【问题讨论】:

    标签: python variables equation


    【解决方案1】:

    正如错误所说,+= 是一个增广赋值操作员。左侧应该是一个变量名。你不能在左侧是像 [] 这样的文字表达式的地方使用它,就像你不能在文字上使用常规赋值运算符一样:

    >>> [1, 2, 3] = [2, 3, 4]
      File "<stdin>", line 1
        [1, 2, 3] = [2, 3, 4]
         ^
    SyntaxError: cannot assign to literal
    

    您可能想要的是 extend 函数,它以与 += 运算符几乎完全相同的方式改变列表(它们并不完全相同,因为 += 将创建一个新列表而不是改变现有列表一个,如果有其他引用,这很重要),并且在像[]这样的文字上完全有效:

    >>> a = []
    >>> a.extend({'b' : 2, 'c' : 3, 'd' : 4})
    >>> a
    ['b', 'c', 'd']
    >>> [].extend({'b' : 2, 'c' : 3, 'd' : 4})
    

    但请注意,这是毫无意义的,因为扩展了匿名空列表后,您无法像访问a 那样访问它。

    【讨论】:

    • 左侧带有列表的 += 运算符不会创建新列表。它在功能上与list.extend 相同。在极端情况下可能会有一些细微的差异,比如当事情不能正常工作时会引发什么异常,但如果它们能工作,它们的工作方式是相同的。
    • 在当前的 CPython 中,list.__iadd__directly calls list.extend internally
    猜你喜欢
    • 1970-01-01
    • 2012-04-22
    • 2021-11-09
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2014-12-30
    相关资源
    最近更新 更多