2024-04-25 22:55:12 发布
网友
对于包含多个参数的print(),我认为它会逐个计算它们。但是,下面的代码
a = [1, 2, 3, 4] print(a, a[:], a.pop(), a, a[:])
印刷品
我以为python会先计算a,然后是a[:],然后是{},然后是{}和{},这将打印出来
a
a[:]
[1, 2, 3, 4] [1, 2, 3, 4] 4 [1, 2, 3] [1, 2, 3]
那么这到底是怎么工作的呢?在
以防调用函数(任何函数)。参数首先从左到右求值。因此,您的代码相当于:
arg1 = a arg2 = a[:] arg3 = a.pop() arg4 = a[:] print(arg1,arg2,arg3,arg4)
(当然,arg1,arg2等变量在Python级别不存在)
arg1
arg2
因此,arg1将引用与a相同的列表,接下来我们生成{}的一个浅拷贝,并将其存储在arg2中,然后我们从a弹出,最后一个项目存储在arg3中,最后我们制作另一个浅拷贝(此时a)并将其存储在arg4中。在
arg3
arg4
这意味着:
接下来,使用这些参数调用print(..)语句,然后像我们在注释中看到的那样打印出来。所以它会打印:
print(..)
[1, 2, 3] [1, 2, 3, 4] 4 [1, 2, 3]
因此,重要的部分是a.pop()不仅返回a和{}引用的列表的最后一个元素,而且还修改该列表(删除最后一个元素)。因此,arg1和{}仍然引用同一个列表,但是它被修改了。在
a.pop()
以防调用函数(任何函数)。参数首先从左到右求值。因此,您的代码相当于:
(当然,
arg1
,arg2
等变量在Python级别不存在)因此,}的一个浅拷贝,并将其存储在
arg1
将引用与a
相同的列表,接下来我们生成{arg2
中,然后我们从a
弹出,最后一个项目存储在arg3
中,最后我们制作另一个浅拷贝(此时a
)并将其存储在arg4
中。在这意味着:
^{pr2}$接下来,使用这些参数调用
print(..)
语句,然后像我们在注释中看到的那样打印出来。所以它会打印:因此,重要的部分是}引用的列表的最后一个元素,而且还修改该列表(删除最后一个元素)。因此,}仍然引用同一个列表,但是它被修改了。在
a.pop()
不仅返回a
和{arg1
和{相关问题 更多 >
编程相关推荐