python函数缺省值与引用学习笔记分享
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")
运行结果:
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打印出来的结果来看,缺省值为[],(),class
再下次调用时,如果继续参数空缺而使用缺省值,那么缺省值延续上次引用。
可能打印无任何标志无法看清楚,加上文字应该会简单很多。
#-*-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":""}
相关文章