形参和实参

注:这是自己跟着慕课嵩天老师的课程写的笔记。笔记若有错误,希望大家批评指正。

形参和实参

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的数值确实没有变,但指向的地址里面的内容已经被形参那边修改了,形参并没有改变实参的值(地址),只是改变了地址里面的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值