这涉及函数调用中参数传递的问题。在函数调用过程中,进行阐述的传递:
如果是不可变对象,在函数体的修改不会影响实参的值(例如:整型,字符串和元组)
如果是可变的对象,在函数体的修改会影响到实参的值(例如:集合,列表和字典)
我是这样理解的,显示运行函数外面var,赋值为int 520,然后调用fun(),将var=520传参数给函数。但是在函数内重新给了局部变量var赋值1314,所以函数内输出为1314,这时已经结束函数调用fun(var),下一句执行输出var(是实参)还是520,(end不换行,拼接输出)显示是1314520.
再举个例子:
- # conding -utf-8
- var = 520
- t = 1
- x = [1,2,3]
- def fun(var,t):
- var = 1314
- t = t+1
- print(".............调用不可变对象.....................")
- print(var,t)
- fun(var,t,)
- print(var,t)
- print("...............调用可变对象 .........................")
- def fun1(x=[]):
- x.append(99)
- for i in x:
- print(i)
- return x
- fun1(x)
- print(x)
复制代码
输出为:
.............调用不可变对象.....................
(1314, 2)
(520, 1)
...............调用可变对象 .........................
1
2
3
99
[1, 2, 3, 99]