第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

python函數(shù)問題

python函數(shù)問題

wolvvi 2017-01-15 14:35:22
def append(args=[]):????args.append(0)????print(args)append()append([1])append()會(huì)輸出[0][1,0][0,0]想問下為什么第三個(gè)會(huì)是[0,0]呢,再次調(diào)用args的時(shí)候還是第一次調(diào)用的args為啥呢
查看完整描述

2 回答

已采納
?
Iamxiaoq

TA貢獻(xiàn)33條經(jīng)驗(yàn) 獲得超6個(gè)贊

在python里面,一切切對(duì)象,函數(shù)也是對(duì)象,函數(shù)這個(gè)對(duì)象有個(gè)特殊的__defaults__屬性存儲(chǔ)著其在定義的時(shí)候聲明的默認(rèn)參數(shù)

http://img1.sycdn.imooc.com//587b7d800001ab6002990409.jpg

這個(gè)__defaults__隨著函數(shù)的定義而生成,第27

如果調(diào)用時(shí)沒有傳遞參數(shù),則使用存儲(chǔ)在__defaults__中的值,第28

由于第28調(diào)用了__defaults__中的list.append(0),調(diào)用完成后__defaults__中的list的值為[0],第29

第30append([1]),此次調(diào)用傳遞了值,則不使用默認(rèn)參數(shù),可以看到兩個(gè)id不一樣

第30調(diào)用完成后也不影響__defaults__中的list,第31

第32的調(diào)用也沒有傳遞參數(shù),則使用__defaults__中保存的list,經(jīng)過第28后,默認(rèn)參數(shù)list的值為:[0],此時(shí)再執(zhí)行[0].append(0),得到的自然是[0,0], 輸出的id與28輸出的id一致,證明他們是同一個(gè)list。。。。


所以,默認(rèn)參數(shù)一般不要使用可變對(duì)象

def?append(args=None):
????if?args?is?None:
????????args?=?[]
????args.append(0)
????print(args)


查看完整回答
反對(duì) 回復(fù) 2017-01-15
  • wolvvi
    wolvvi
    那就您最后給出的這段代碼來說,如果調(diào)用這段代碼: append() append([1]) append() 會(huì)輸出[0],[1,0],[0] 第三個(gè)調(diào)用沒有傳遞參數(shù),那么使用的應(yīng)該是之前默認(rèn)參數(shù)值為[0]的list吧,這樣傳進(jìn)去的args不是none啊,那么if 語句為啥執(zhí)行呢,得出的結(jié)果不還是應(yīng)該為[0,0]嗎,為什么只有一個(gè)0呢列表中
  • Iamxiaoq
    Iamxiaoq
    def append(args=None): if args is None: args = [] # 這里只是對(duì)args這個(gè)局部變量進(jìn)行賦值,并沒有改變__defaults__中的值,__defaults__中的值仍然為None args.append(0) print(args)
  • Iamxiaoq
    Iamxiaoq
    if args is None: args = [] # 這里只是對(duì)args這個(gè)局部變量進(jìn)行賦值,并沒有改變__defaults__中的值,__defaults__中的值仍然為None
?
孤獨(dú)的小豬

TA貢獻(xiàn)232條經(jīng)驗(yàn) 獲得超302個(gè)贊

?[1]相當(dāng)于是傳一個(gè)新的列表進(jìn)去,并沒有用到函數(shù)中的?[] ?,?所以x.append(0)?在這次中,是追加到?[1]?里面,并不是函數(shù)默認(rèn)的[]里面,你要用這種的話,就不能傳一個(gè)列表進(jìn)去.

def?appendx(n,?x=[]):
????x.append(n)




查看完整回答
反對(duì) 回復(fù) 2017-01-16
  • 2 回答
  • 0 關(guān)注
  • 1881 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)