python函數(shù)缺省值與引用學(xué)習(xí)筆記分享

字號(hào):


    有關(guān)一個(gè)在函數(shù)參數(shù)設(shè)置缺省值與引用的問(wèn)題,這個(gè)問(wèn)題是大多數(shù)Pythoner可能會(huì)忽視的問(wèn)題,作個(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打印出來(lái)的結(jié)果來(lái)看,缺省值為[],(),class
    再下次調(diào)用時(shí),如果繼續(xù)參數(shù)空缺而使用缺省值,那么缺省值延續(xù)上次引用。可能打印無(wú)任何標(biāo)志無(wú)法看清楚,加上文字應(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':''}