溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

設(shè)置python默認(rèn)參數(shù)的方法

發(fā)布時(shí)間:2020-09-02 11:24:15 來(lái)源:億速云 閱讀:256 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下設(shè)置python默認(rèn)參數(shù)的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

我們知道,在調(diào)用函數(shù)時(shí),如果不指定某個(gè)參數(shù),解釋器會(huì)拋出異常。為了解決這個(gè)問(wèn)題,Python允許為參數(shù)設(shè)置默認(rèn)值,即在定義函數(shù)時(shí),直接給形式參數(shù)指定一個(gè)默認(rèn)值,這樣的話,即便調(diào)用函數(shù)時(shí)沒(méi)有給擁有默認(rèn)值的形參傳遞參數(shù),該參數(shù)可以直接使用定義函數(shù)時(shí)設(shè)置的默認(rèn)值。

定義帶有默認(rèn)值參數(shù)的函數(shù),其語(yǔ)法格式如下:

def 函數(shù)名(...,形參名=默認(rèn)值):
    代碼塊

注意,在使用此格式定義函數(shù)時(shí),指定有默認(rèn)值的形式參數(shù)必須在所有沒(méi)默認(rèn)值參數(shù)的最后,否則會(huì)產(chǎn)生語(yǔ)法錯(cuò)誤。

例如,如下程序?yàn)?name、message 形參指定了默認(rèn)值:

# 為兩個(gè)參數(shù)指定默認(rèn)值
def say_hi(name = "孫悟空", message = "歡迎來(lái)到python學(xué)習(xí)網(wǎng)"):
    print(name, ", 您好")
    print("消息是:", message)
# 全部使用默認(rèn)參數(shù)
say_hi()
# 只有message參數(shù)使用默認(rèn)值
say_hi("白骨精")
# 兩個(gè)參數(shù)都不使用默認(rèn)值
say_hi("白骨精", "歡迎學(xué)習(xí)Python")
# 只有name參數(shù)使用默認(rèn)值
say_hi(message = "歡迎學(xué)習(xí)Python")

運(yùn)行結(jié)果為

孫悟空 , 您好
消息是: 歡迎來(lái)到python學(xué)習(xí)網(wǎng)
白骨精 , 您好
消息是: 歡迎來(lái)到python學(xué)習(xí)網(wǎng)
白骨精 , 您好
消息是: 歡迎學(xué)習(xí)Python
孫悟空 , 您好
消息是: 歡迎學(xué)習(xí)Python

從上面程序可以看出,如果只傳入一個(gè)位置參數(shù),由于該參數(shù)位于第一位,系統(tǒng)會(huì)將該參數(shù)值傳給 name 參數(shù)。因此,不能按如下方式調(diào)用 say_hi() 函數(shù):

say_hi("歡迎學(xué)習(xí)Python")

上面調(diào)用時(shí)傳入的“歡迎學(xué)習(xí)Python”字符串將傳給 name 參數(shù),而不是 message 參數(shù)。

更不能按如下方式來(lái)調(diào)用 say_hi() 函數(shù):

say_hi(name="白骨精", "歡迎學(xué)習(xí)Python")

因?yàn)?Python 規(guī)定,關(guān)鍵字參數(shù)必須位于位置參數(shù)的后面。因此提示錯(cuò)誤:positional argument follows keyword argument。

那么,能不能單純地將上面兩個(gè)參數(shù)交換位置呢?

say_hi("歡迎學(xué)習(xí)Python" , name="白骨精")

上面調(diào)用依然是錯(cuò)誤的,因?yàn)榈谝粋€(gè)字符串沒(méi)有指定關(guān)鍵字參數(shù),因此將使用位置參數(shù)為 name 參數(shù)傳入?yún)?shù)值,第二個(gè)參數(shù)使用關(guān)鍵字參數(shù)的形式再次為 name 參數(shù)傳入?yún)?shù)值,這意味著兩個(gè)參數(shù)值其實(shí)都會(huì)傳給 name 參數(shù),程序?yàn)?name 參數(shù)傳入了多個(gè)參數(shù)值。因此提示錯(cuò)誤:say_hi() got multiple values for argument 'name'。

將函數(shù)調(diào)用改為如下兩種形式是正確的:

say_hi("白骨精", message="歡迎學(xué)習(xí)Python")
say_hi(name="白骨精", message="歡迎學(xué)習(xí)Python")

上面第一行代碼先使用位置參數(shù)為 name 參數(shù)傳入?yún)?shù)值,再使用關(guān)鍵字參數(shù)為 message 參數(shù)傳入?yún)?shù)值;第二行代碼中的 name、message 參數(shù)都使用關(guān)鍵字參數(shù)傳入?yún)?shù)值。

再次強(qiáng)調(diào),由于 Python 要求在調(diào)用函數(shù)時(shí)關(guān)鍵字參數(shù)必須位于位置參數(shù)的后面,因此在定義函數(shù)時(shí)指定了默認(rèn)值的參數(shù)(關(guān)鍵字參數(shù))必須在沒(méi)有默認(rèn)值的參數(shù)之后。例如如下代碼:

# 定義一個(gè)打印三角形的函數(shù),有默認(rèn)值的參數(shù)必須放在后面
def printTriangle(char, height = 5) :
    for i in range(1, height + 1) :
        # 先打印一排空格
        for j in range(height - i) :
            print(' ', end = '')
        # 再打印一排特殊字符
        for j in range(2 * i - 1) :
            print(char, end = '')
        print()
printTriangle('@', 6)
printTriangle('#', height=7)
printTriangle(char = '*')

上面程序定義了 printTriangle() 函數(shù),其中,有默認(rèn)值的 height 形參,必須放在 char 形參的后面;反之,將會(huì)造成語(yǔ)法錯(cuò)誤。

在 Python 中,可以使用“函數(shù)名.__defaults__”查看函數(shù)的默認(rèn)值參數(shù)的當(dāng)前值,其返回值是一個(gè)元組。例如,顯示上面定義的 printTriangle 函數(shù)的默認(rèn)值參數(shù)的當(dāng)前值,可以使用 printTriangle.__defaults__ ,其結(jié)果為 (5,)。 

以上是設(shè)置python默認(rèn)參數(shù)的方法的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI