python函数默认参数作用域
當(dāng)def函數(shù)參數(shù)默認(rèn)值為對(duì)象時(shí),例如列表[],字典{}
示例1:猜測一下,會(huì)輸出什么???
def ddd(a,b=[]):b.append(a)return bprint(ddd(1)) print(ddd(2,['a','b','c'])) print(ddd(3))[1] ['a','b','c','2'] [3] ???你是否認(rèn)為是這樣? 輸出一下看看
輸出結(jié)果:
[1] ['a', 'b', 'c', 2] [1, 3]看到以上結(jié)果有什么想法,為什么呢???[1, 3]而不是[3],那么修改一下代碼,輸出b變量的內(nèi)存地址看一下。我想,可以找到我要的答案
''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' def ddd(a,b=[]):b.append(a)print(id(b)) #查看內(nèi)存地址return bprint(ddd(1)) print(ddd(2,['a','b','c'])) print(ddd(3))輸出結(jié)果:
170580872 [1] 171586568 ['a', 'b', 'c', 2] 170580872 [1, 3]從輸出中,可以看出,除了,第二個(gè)print,其它兩個(gè)內(nèi)存是一們的。那么考慮一下為什么第二個(gè)為被改變。結(jié)果顯而易見,因?yàn)榈诙€(gè)print改變了,b對(duì)象,重新創(chuàng)建了一個(gè)對(duì)象。
那么如果不想出現(xiàn),每次調(diào)用,默認(rèn)值對(duì)象不變的問題,可以這樣改一下:
''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' def ddd(a,b=None):if type(b).__name__!='list':b = []b.append(a)print(id(b)) #查看內(nèi)存地址return bprint(ddd(1)) print(ddd(2,['a','b','c'])) print(ddd(3))初始值設(shè)置為None,通過類型判斷來,進(jìn)行內(nèi)處理
小結(jié):
1.python定義def的時(shí)候,如果參數(shù)做為對(duì)象,那么,如果沒有改變這個(gè)對(duì)象的前提下,那么即使,多次調(diào)用該函數(shù)也,不會(huì)創(chuàng)建新的對(duì)象。
那么就會(huì)出現(xiàn)多次調(diào)用函數(shù),有可能都進(jìn)行了處理。
2.如果,沒有特殊需求,函數(shù)參數(shù),盡量不采用對(duì)象,如果一有需要,對(duì)象進(jìn)行內(nèi)處理。傳默認(rèn)值None
總結(jié)
以上是生活随笔為你收集整理的python函数默认参数作用域的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python global将结果存储起来
- 下一篇: Python-requests请求的超时