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

时间:2017-07-18 15:27:57

标签: python python-3.x

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

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

打印

a

我认为python会首先评估a[:],然后评估a.pop(),然后评估a,然后再评估a[:][1, 2, 3, 4] [1, 2, 3, 4] 4 [1, 2, 3] [1, 2, 3] ,这将打印

connection_created.connect

这究竟是如何运作的?

1 个答案:

答案 0 :(得分:5)

如果您调用函数(任何函数)。 参数首先从左到右进行评估。因此,您的代码等效于

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

(当然,Python级别不存在变量arg1arg2等)

arg1因此会引用与a 相同的列表,然后我们制作一个浅层副本a并将其存储在{{ 1}} ,然后我们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()a引用的列表的最后一个元素,还会修改该列表(删除最后一个元素) 。因此,结果arg1arg1仍然引用相同的列表,但它已被修改。