参数传递
入门。
Python 中往一个 list 里添加元素可以有这样几个方法:
>>> a = []
>>> a += [1]
>>> a = a + [2]
>>> a.append(3)
>>> a
[1, 2, 3]
放弃?
我们来定义几个函数来重复上面的步骤:
>>> def append_one(b):
... b += [1]
...
>>> def append_two(b):
... b = b + [2]
...
>>> def append_three(b):
... b.append(3)
...
完全一样的操作,放在函数里立马感觉离初级程序员又远了一步有没有。来执行一下:
>>> a = []
>>> append_one(a)
>>> append_two(a)
>>> append_three(a)
>>> a
[1, 3]
2
呢?
进阶!
函数外面我们的第一步初始化是这样的:a = []
。注意等号的左右两边可不是一回事,右边是个空的列表,而等号左边的a
只是一个变量,它指向了那个空列表;当把a
传入到函数的时候,这时第三个东西出现了:函数中的b
相当于a
的一个副本,它也指向那个列表。append_one()
和append_three()
中的操作,都是通过b
找到了那个列表并对它进行了修改,而append_two()
中是对b
重新赋值,变量还是那个变量,但它指向的东西却不一样了,不在是起初的列表,所以接下来b
发生任何事都跟它无关。从始至终函数中忙活的都是a
的副本,变量a
本身是没有变化的,始终指向着最初始的列表,所以最后打印a
时,得到的是被修改后的那个列表。