对于带有多个参数的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(),再a和a[:]再次,这将打印
[1, 2, 3, 4] [1, 2, 3, 4] 4 [1, 2, 3] [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
那究竟是如何运作的呢?
如果你调用一个函数(任何函数).该参数是第一个评估左到右.所以你的代码相当于:
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()不仅会返回由双方参考列表的最后一个元素a和arg1,而且还修改列表(删除最后一个元素).因此,作为一个结果arg1,并a仍然指向同一个列表,但它被修改.
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |