0%

Python 的函数参数传递

  • 将可变对象(mutable):列表list,字典dict,Numpy数组ndarray和用户自定义类型(类class),作为参数传递给函数, 函数内部将其改变后, 函数外部这个变量也会改变。
  • 将不可改变对象(immutable):字符串string,元祖tuple,数值numbers,作为参数传递给函数,函数内部将其改变后,函数外部这个变量不会改变。
1
2
3
4
5
a = 1
def fun(a):
a = 2
fun(a)
print a # 1
1
2
3
4
5
a = []
def fun(a):
a.append(1)
fun(a)
print a # [1]

使用id来看引用a的内存地址辅助理解一下

1
2
3
4
5
6
7
8
a = 1
def fun(a):
print "func_in",id(a) # func_in 41322472
a = 2
print "re-point",id(a), id(2) # re-point 41322448 41322448
print "func_out",id(a), id(1) # func_out 41322472 41322472
fun(a)
print a # 1

1
2
3
4
5
6
7
a = []
def fun(a):
print "func_in",id(a) # func_in 53629256
a.append(1)
print "func_out",id(a) # func_out 53629256
fun(a)
print a # [1]