Python函数在控制台执行两次?解析代码输出异常原因
问题解析:为什么代码输出
None和[1, 2, 3, 4]? 先看你的代码:
def changeList(myList1): myList2 = myList1.append(4) print(myList2) return myList1 = [1,2,3] changeList(myList1) print (myList1)
控制台输出:
None [1, 2, 3, 4]
1. 为什么会输出None?
这是Python列表append()方法的特性导致的:
append()是原地修改列表的方法,它的作用是直接在原列表末尾添加元素,不会创建并返回一个新的列表。- 所以当你执行
myList2 = myList1.append(4)时,append(4)完成添加操作后,会返回None,myList2就被赋值成了None,后续print(myList2)自然输出None。
2. 为什么myList1变成了[1, 2, 3, 4]?
Python中,列表属于可变对象,当你把myList1作为参数传入changeList函数时,传递的是这个列表对象的引用(不是列表的副本)。
- 函数内部对
myList1调用append(4),本质上是直接修改了内存中那个原本的列表对象。 - 所以函数执行完后,外部的
myList1指向的还是同一个对象,自然能看到修改后的结果。
3. 函数并没有执行两次!
控制台的两行输出来自两个不同的print语句:
- 第一行
None是函数内部的print(myList2)输出的; - 第二行
[1, 2, 3, 4]是函数执行完后,外部的print(myList1)输出的。
整个过程中changeList(myList1)只被调用了一次,函数只执行了一遍。
内容的提问来源于stack exchange,提问作者Andrey Krivosheev
相关产品推荐
相关产品推荐

