Python 3 如何使用 print(list, list.pop())?

5

对于使用多个参数的 print(),我以为它会逐个计算参数。然而,以下代码:

a = [1, 2, 3, 4]
print(a, a[:], a.pop(), a, a[:])

打印

[1, 2, 3] [1, 2, 3, 4] 4 [1, 2, 3] [1, 2, 3]

我认为Python会先计算a,然后再计算a[:]a.pop(),最后再计算aa[:],这将输出

[1, 2, 3, 4] [1, 2, 3, 4] 4 [1, 2, 3] [1, 2, 3]

那么这是如何工作的呢?

请参考以下链接:https://dev59.com/MVgQ5IYBdhLWcg3wcTiH - Chris_Rands
1个回答

6

如果你调用一个函数(任何函数),则参数从左到右首先被求值。因此,你的代码等同于:

arg1 = a
arg2 = a[:]
arg3 = a.pop()
arg4 = a[:]
print(arg1,arg2,arg3,arg4)

(当然,变量arg1arg2等在Python层面上不存在)

arg1因此引用与a相同的列表,接下来我们浅复制a并将其存储在arg2,然后我们a中弹出最后一个项目并将其存储在arg3,最后我们再次进行浅复制(此时是a的副本)并将其存储在arg4中。

这意味着:

arg1 = a         # arg1 = a = [1,2,3,4]
arg2 = a[:]      # arg2 = [1,2,3,4]
arg3 = a.pop()   # arg1 = a = [1,2,3], arg3 = 4
arg4 = a[:]      # arg4 = [1,2,3]
print(arg1,arg2,arg3,arg4)

接下来,使用这些参数调用print(..)语句,并像我们在注释中看到的那样打印。因此,它将打印出:
[1, 2, 3] [1, 2, 3, 4] 4 [1, 2, 3]

重要的部分是a.pop()不仅会返回由aarg1引用的列表的最后一个元素,而且还会修改该列表(删除最后一个元素)。因此,arg1a仍然引用相同的列表,但它已被修改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接