3
>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]

但:

>>> [1, 2, 3].append(4)
>>>

为什么listPython 中的方法(例如insertappend)只适用于已定义的变量?

4

6 回答 6

9

在第二个示例中,没有打印任何内容,因为append在列表上调用了 (请注意实际上执行了附加),返回None

或者,您应该提到这a.append(4)也给了您一个空白行(如您的第一个示例所示),并且第一个代码示例的最终输出是表达式结果的a表示,而不是a.append('4')表达式。

在这两种情况下,调用后都不会打印任何内容append,因为它是None.

于 2012-08-31T14:16:52.790 回答
4

list.append返回Nonea.append('4')也没有打印任何东西,因为返回的东西None不会在交互式解释器中打印任何东西......

请注意,您的第二个方法调用确实有效。它附加'4'到列表中,您将永远看不到它,因为您会立即失去在您创建的列表中拥有的任何句柄。

于 2012-08-31T14:17:10.617 回答
4

它确实有效。它只是不打印任何东西,就像不打印任何东西一样a.append(4)。只是因为您将列表保存为变量,您才能显示其新值。

于 2012-08-31T14:20:58.187 回答
1

并不是列表方法仅适用于已定义的变量。就是 list的指定方法append在更改相关列表的内部状态时总是返回 None 。

于 2012-08-31T14:21:12.070 回答
0

Another way to concatenate lists:

>>> [1, 2, 3] + [4]
[1, 2, 3, 4]

Note that in this case, a new list is created and returned. list.append adds an item to an existing list and does not return anything.

于 2012-08-31T14:20:08.913 回答
0

该函数仅适用于已定义的变量,因为这就是它的缩进工作方式。从python 文档中:

list.append(x)

在列表末尾添加一个项目;相当于a[len(a):] = [x]

请注意,在返回值并且函数不会引发异常的意义上,它确实“起作用”。但是结果会丢失,因为您没有参考修改后的列表。


顺便说一句,一些语言强制命名约定以明确函数修改给定对象。例如,Ruby 和 Scheme 会附加一个!- 所以在这种情况下该函数可能会被调用append!。这样的命名约定有助于使函数的意图更加清晰。

于 2012-08-31T14:23:28.740 回答