有關(guān)一個(gè)在函數(shù)參數(shù)設(shè)置缺省值與引用的問題,這個(gè)問題是大多數(shù)Pythoner可能會(huì)忽視的問題,作個(gè)筆記,以備后閱,同時(shí)供需要的朋友參考
代碼如下:
importrandom,string
classC(object):pass
defdangerFunction(msg,l=[],b={},c=C()):
printmsg,'-'*10
printl,b,c.__dict__
l.append(1)
b[random.choice(string.ascii_lowercase)]=''
c.__dict__[random.choice(string.ascii_lowercase)]=""
printl,b,c.__dict__
dangerFunction('1')
dangerFunction('2')
dangerFunction('3')
print'-'*20
defsafeFunction(msg,l=None,b=None,c=None):
ifnotl:l=[]
ifnotb:b={}
ifnotc:c=C()
printmsg,'-'*10
printl,b,c.__dict__
l.append(1)
b[random.choice(string.ascii_lowercase)]=''
c.__dict__[random.choice(string.ascii_lowercase)]=""
printl,b,c.__dict__
safeFunction('1')
safeFunction('2')
safeFunction('3')運(yùn)行結(jié)果:
代碼如下:
1----------
[]{}{}
[1]{'q':''}{'p':''}
2----------
[1]{'q':''}{'p':''}
[1,1]{'q':'','a':''}{'p':'','g':''}
3----------
[1,1]{'q':'','a':''}{'p':'','g':''}
[1,1,1]{'q':'','a':'','w':''}{'p':'','w':'','g':''}
--------------------
1----------
[]{}{}
[1]{'k':''}{'l':''}
2----------
[]{}{}
[1]{'r':''}{'c':''}
3----------
[]{}{}
[1]{'q':''}{'h':''}由dangerFunction打印出來的結(jié)果來看,缺省值為[],(),class
再下次調(diào)用時(shí),如果繼續(xù)參數(shù)空缺而使用缺省值,那么缺省值延續(xù)上次引用??赡艽蛴o任何標(biāo)志無法看清楚,加上文字應(yīng)該會(huì)簡(jiǎn)單很多。
代碼如下:
#-*-coding:utf-8-*-
importrandom,string
classC(object):pass
defdangerFunction(msg,l=[],b={},c=C()):
printmsg,'-'*10
printu'操作前',l,b,c.__dict__
l.append(1)
b[random.choice(string.ascii_lowercase)]=''
c.__dict__[random.choice(string.ascii_lowercase)]=""
printu'操作后',l,b,c.__dict__
dangerFunction('1')
dangerFunction('2')
dangerFunction('3')
print'-'*10,u'我是分隔符','-'*10
defsafeFunction(msg,l=None,b=None,c=None):
ifnotl:l=[]
ifnotb:b={}
ifnotc:c=C()
printmsg,'-'*10
printu'操作前',l,b,c.__dict__
l.append(1)
b[random.choice(string.ascii_lowercase)]=''
c.__dict__[random.choice(string.ascii_lowercase)]=""
printu'操作后',l,b,c.__dict__
safeFunction('1')
safeFunction('2')
safeFunction('3')代碼如下:
1----------
操作前[]{}{}
操作后[1]{'m':''}{'v':''}
2----------
操作前[1]{'m':''}{'v':''}
操作后[1,1]{'i':'','m':''}{'g':'','v':''}
3----------
操作前[1,1]{'i':'','m':''}{'g':'','v':''}
操作后[1,1,1]{'i':'','s':'','m':''}{'s':'','g':'','v':''}
----------我是分隔符----------
1----------
操作前[]{}{}
操作后[1]{'e':''}{'q':''}
2----------
操作前[]{}{}
操作后[1]{'d':''}{'s':''}
3----------
操作前[]{}{}
操作后[1]{'m':''}{'k':''}
更多信息請(qǐng)查看IT技術(shù)專欄