1、关于python中函数的参数初始化的问题:函数的初始化值是在函数定义的时候就获取了的。如果后续调时不把修改过后的参数赋值进去,那么使用的就是第一次初始化的值。另外一个问题就是调用函数时传递进去的参数是类似于C语言的传递变量的指针进去,他会修改掉变量在内存中的值。所以在多次调用的情况下,变量的值是会修改的。比如下面一段代码:
x = [1 , 2 , 3 ,4 , 5]
def functest(y = x[:]):
for i in range(len(y)):
y[i] += y[i]
print y[i],
print '\n'
x = [7 , 8 , 9 ,10 , 11]
functest()
functest()
functest(x)
functest(x)
其输出的结果如下所示:
2 4 6 8 10
4 8 12 16 20
14 16 18 20 22
28 32 36 40 44
分析:第一次调用functest()时,使用的是默认的函数参数,所以x = [1,2,3,4,5];调用之后对x这个变量直接操作(操作x变量的内存)使得经过一次调用后x内存中的内容以及变成[2 , 4 , 6 , 8 , 10];之后在调用一次functest(),那么重复对x的内存操作,输出结果为4 8 12 16 20;
之后第二次对x赋值为7 8 9 10 11;重新调用functest,那么原理和上面的就是一样的了。