注:这是自己跟着慕课嵩天老师的课程写的笔记。笔记若有错误,希望大家批评指正。
形参和实参
Python中没有C++的引用,实参到形参可以传值,但形参在函数中改变不会影响到实参。一般的变量从函数传回到形参的调用函数时,只能通过return,但如果变量是可变对象(列表或者图形对象),返回到调用函数后,该对象会呈现被修改后的状态。可能觉得第一第三行自相矛盾,第三行还有点看不明白,我觉得对于可变对象来讲,可以从地址的角度来看待,可以看下面例2有助于理解。
def addInterest1(All, rate):
newAll = All * (1 + rate)
def addInterest2(All, rate):
newAll = All * (1 + rate)
return newAll
def addInterest(All, rate):
for i in range(len(All)):
All[i] = All[i] * (1 + rate)
def main():
print("----例1:单个银行账户金额修改问题----")
print("--no return--")
amount1 = 1000
rate1 = 0.05
amount = addInterest1(amount1, rate1)
print(amount1)
print("--return--")
amount2 = 1000
rate2 = 0.05
amount2 = addInterest2(amount2, rate2)
print(amount2)
例1中,形参在函数中改变不会影响到实参,一般的变量从函数传回到形参的调用函数时,只能通过return
print("\n\n----例2:多个银行账户金额修改问题----")
amounts = [1000, 500, 200, 957]
rate = 0.05
addInterest(amounts, rate)
print(amounts)
main()
例2中调用的 addInterest()函数也同样没有return,但你奇怪的发现打印amounts的时候数值竟然改变了,把函数的局部变量好像带回来了一样。我的理解是,其实amounts里面存的是列表的首地址,传给形参All的也就是列表的首地址,我们再形参那边操作改变了地址里面存在的值,因而在实参这边打印最终结果时,amounts的数值确实没有变,但指向的地址里面的内容已经被形参那边修改了,形参并没有改变实参的值(地址),只是改变了地址里面的内容。