python 3如何打印(list,list.pop())?

Vib*_*mus 4 python python-3.x

对于带有多个参数的print(),我认为它会逐一评估它们.但是,以下代码

a = [1, 2, 3, 4]
print(a, a[:], a.pop(), a, a[:])
Run Code Online (Sandbox Code Playgroud)

版画

[1, 2, 3] [1, 2, 3, 4] 4 [1, 2, 3] [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

我以为蟒蛇将评估a第一,然后a[:],然后a.pop(),再aa[:]再次,这将打印

[1, 2, 3, 4] [1, 2, 3, 4] 4 [1, 2, 3] [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

那究竟是如何运作的呢?

Wil*_*sem 5

如果你调用一个函数(任何函数).该参数是第一个评估左到右.所以你的代码相当于:

arg1 = a
arg2 = a[:]
arg3 = a.pop()
arg4 = a[:]
print(arg1,arg2,arg3,arg4)
Run Code Online (Sandbox Code Playgroud)

(当然arg1,arg2Python级别不存在变量等)

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)
Run Code Online (Sandbox Code Playgroud)

接下来,print(..)使用这些参数调用语句,从而打印出我们在评论中看到的内容.所以它将打印:

[1, 2, 3] [1, 2, 3, 4] 4 [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

最重要的部分是这样说a.pop()不仅会返回由双方参考列表的最后一个元素aarg1,而且还修改列表(删除最后一个元素).因此,作为一个结果arg1,并a仍然指向同一个列表,但它被修改.