python函数缺省值与引用学习笔记分享
2014-05-19来源:

有关一个在函数参数设置缺省值与引用的问题,这个问题是大多数Pythoner可能会忽视的问题,作个笔记,以备后阅,同时供需要的朋友参考

代码如下:

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':''}

更多信息请查看IT技术专栏

推荐信息
Baidu
map