站長在線Python精講:在Python函數(shù)中的默認(rèn)參數(shù)詳解
歡迎你來到站長在線的站長學(xué)堂學(xué)習(xí)Python知識,本文學(xué)習(xí)的是《在Python函數(shù)中的默認(rèn)參數(shù)詳解》。本文的主要內(nèi)容有:默認(rèn)參數(shù)的概念和默認(rèn)參數(shù)的示例、默認(rèn)參數(shù)不能設(shè)置可變對象。
永久美國免備案虛擬主機1元1天,15元1月,100元1年,1000元永久
站長在線旗下答案網(wǎng)站,全站所有題目,免費查看答案和答案解析
歡迎你來到站長在線的站長學(xué)堂學(xué)習(xí)python知識,本文學(xué)習(xí)的是《在Python函數(shù)中的默認(rèn)參數(shù)詳解》。本文的主要內(nèi)容有:默認(rèn)參數(shù)的概念和默認(rèn)參數(shù)的示例、默認(rèn)參數(shù)不能設(shè)置可變對象。
在調(diào)用函數(shù)時如果不指定某個參數(shù),Python 解釋器會拋出異常。為了解決這個問題,Python 允許為參數(shù)設(shè)置默認(rèn)值。
1、默認(rèn)參數(shù)的概念
默認(rèn)參數(shù)也叫參數(shù)的默認(rèn)值,即在定義函數(shù)時,直接指定形式參數(shù)的默認(rèn)值。這樣,當(dāng)沒有傳入?yún)?shù)時,則直接使用定義函數(shù)時設(shè)置的默認(rèn)值。
定義帶有默認(rèn)值參數(shù)的函數(shù)的語法格式如下:
def functionname(...,[parameter1 = defaultvalue1]):
[functionbody]
其中,相關(guān)參數(shù)說明如下:
functionname:函數(shù)名稱,在調(diào)用函數(shù)時使用;
parameter1 = defaultvalue1:可選參數(shù),用于指定向函數(shù)中傳遞的參數(shù),并且為該參數(shù)設(shè)置默認(rèn)值為defaultvalue1;
functionbody:可選參數(shù),用于指定函數(shù)體,即該函數(shù)被調(diào)用后,要執(zhí)行的功能代碼。
當(dāng)然,上面的內(nèi)容也可以使用中文說明:
def 函數(shù)名(...,形參名,形參名=默認(rèn)值):
代碼塊
站長在線特別提醒:在使用此格式定義函數(shù)時,指定有默認(rèn)值的形式參數(shù)必須在所有沒默認(rèn)值參數(shù)的最后,否則會產(chǎn)生語法錯誤。
2、默認(rèn)參數(shù)的示例
例如:定義一個同學(xué)的語文,數(shù)學(xué),英語的成績,并且輸出他的成績,
#可寫函數(shù)說明
def chengji(shuxue=98,yingyu=90,yuwen=92):
"打印任何傳入的字符串"
print ("語文: ",yuwen)
print ("數(shù)學(xué): ",shuxue)
print ("英語: ",yingyu)
return
#調(diào)用chengji函數(shù)
chengji(shuxue=100,yingyu=100,yuwen=100)
print("----------")
chengji(shuxue=80,yingyu=80)
運行結(jié)果如下:
語文: 100
數(shù)學(xué): 100
英語: 100
----------
語文: 92
數(shù)學(xué): 80
英語: 80
>>>
從上面的運行結(jié)果可以看出,我們對上面的成績定義了兩次,第一次全部定義為100分,結(jié)果顯示為100分,第二次定義了兩個80分的,有一個沒有定義,就調(diào)用了默認(rèn)參數(shù)了。
Pyhton 中,可以使用“函數(shù)名.__defaults__”查看函數(shù)的默認(rèn)值參數(shù)的當(dāng)前值,其返回值是一個元組。以本節(jié)中的 chengji() 函數(shù)為例,在最后一行代碼后面添加如下代碼:
print(chengji.__defaults__)
運行以后,結(jié)果為:
語文: 100
數(shù)學(xué): 100
英語: 100
----------
語文: 92
數(shù)學(xué): 80
英語: 80
(98, 90, 92)
>>>
3、默認(rèn)參數(shù)不能設(shè)置可變對象
使用可變對象作為函數(shù)參數(shù)的默認(rèn)值時,多次調(diào)用可能會導(dǎo)致意料之外的情況。例如,編寫一個名稱為demo()的函數(shù),并為其設(shè)置一個帶默認(rèn)值的參數(shù),代碼如下:
def demo(a=[]): # 定義函數(shù)并為參數(shù)a指定默認(rèn)值
print("a的值: ",a)
a.append(1)
調(diào)用demo()函數(shù),代碼如下:
def demo(a=[]): # 定義函數(shù)并為參數(shù)a指定默認(rèn)值
print("a的值: ",a)
a.APPend(1)
demo() # 調(diào)用demo()函數(shù)
將顯示以下結(jié)果:
a的值: []
連續(xù)兩次調(diào)用demo()函數(shù),并且都不指定實際參數(shù),代碼如下:
def demo(a=[]): # 定義函數(shù)并為參數(shù)a指定默認(rèn)值
print("a的值: ",a)
a.append(1)
demo() # 調(diào)用demo()函數(shù)
demo() # 調(diào)用demo()函數(shù)
將顯示以下結(jié)果:
a的值: []
a的值: [1]
>>>
從上面的結(jié)果看,這顯然不是我們想要的結(jié)果。為了防止出現(xiàn)這種情況,最好使用None作為可變對象的默認(rèn)值,這時還需要加上必要的檢查代碼。修改后的代碼如下:
def demo(a=None):
if a==None:
a=[]
print("a的值: ",a)
a.append(1)
demo()
demo()
運行結(jié)果如下:
a的值: []
a的值: []
>>>
上面的問題,就告訴我們:定義函數(shù)時,為形式參數(shù)設(shè)置默認(rèn)值要牢記一點:默認(rèn)參數(shù)必須指向不可變對象。
到此為止,站長在線講解的《在Python函數(shù)中的默認(rèn)參數(shù)詳解》中的默認(rèn)參數(shù)的概念和默認(rèn)參數(shù)的示例,都講解完畢了。有不懂的可以給我留言哦!
在下一個知識點,站長在線就來講解《在Python函數(shù)中的可變參數(shù)》。關(guān)注站長在線,學(xué)習(xí)Python不迷路!歡迎你對站長在線進(jìn)行關(guān)注,評論,點贊,分享、轉(zhuǎn)發(fā)!
本文地址:http://003188.cn/pythonmorencanshu.html
阿里云虛擬主機1G空間,120元一年
香港、美國虛擬主機100元一年,1000元永久
騰訊云雙十一0.4折起,2核8G5M三年僅700元,2核4G8M三年僅198元
猜你喜歡