1. 程式人生 > 程式設計 >Python新手學習函式預設引數設定

Python新手學習函式預設引數設定

在某些情況下,程式需要在定義函式時為一個或多個形參指定預設值,這樣在呼叫函式時就可以省略為該形參傳入引數值,而是直接使用該形參的預設值。

為形參指定預設值的語法格式如下:

形參名 = 預設值

從上面的語法格式可以看出,形參的預設值緊跟在形參之後,中間以英文“=”隔開。

例如,如下程式為 name、message 形參指定了預設值:

# 為兩個引數指定預設值
def say_hi(name = "孫悟空",message = "歡迎來到C語言中文網"):
  print(name,",您好")
  print("訊息是:",message)
# 全部使用預設引數
say_hi()
# 只有message引數使用預設值
say_hi("白骨精")
# 兩個引數都不使用預設值
say_hi("白骨精","歡迎學習Python")
# 只有name引數使用預設值
say_hi(message = "歡迎學習Python")

上面程式中在定義 say_hi() 函式時為 name、message 形參指定了預設值,因此程式中第一次呼叫 say_hi() 函式時沒有為 name、message 引數指定引數值,此時 name、message 引數將會使用其預設值。

程式第二次呼叫 say_hi() 函式時為 name 引數(使用位置引數)指定了引數值,此時 message 引數將會使用預設值。

程式第三次呼叫 say_hi() 函式時為 name、message 引數(使用位置引數)都指定了引數值,因此這兩個引數都使用開發者傳入的引數值。

程式第四次呼叫 say_hi() 函式時只為 message 引數(使用關鍵字引數)傳入了引數值,此時 name 引數將使用預設值。

執行上面程式,可以看到如下輸出結果:

孫悟空,您好
訊息是: 歡迎來到C語言中文網
白骨精,您好
訊息是: 歡迎學習Python
孫悟空,您好
訊息是: 歡迎學習Python

從上面程式可以看出,如果只傳入一個位置引數,由於該引數位於第一位,系統會將該引數值傳給 name 引數。因此,我們不能按如下方式呼叫 say_hi() 函式

say_hi("歡迎學習Python")

上面呼叫時傳入的“歡迎學習Python”字串將傳給 name 引數,而不是 message 引數。

我們也不能按如下方式來呼叫 say_hi() 函式:

say_hi(name="白骨精","歡迎學習Python")

因為 Python 規定,關鍵字引數必須位於位置引數的後面。因此提示錯誤:positional argument follows keyword argument。

那麼,我們能不能單純地將上面兩個引數交換位置呢?

#say_hi("歡迎學習Python",name="白骨精")

上面呼叫依然是錯誤的,因為第一個字串沒有指定關鍵字引數,因此將使用位置引數為 name 引數傳入引數值,第二個引數使用關鍵字引數的形式再次為 name 引數傳入引數值,這意味著兩個引數值其實都會傳給 name 引數,程式為 name 引數傳入了多個引數值。因此提示錯誤:say hi() got multiple values for argument 'name'。

將函式呼叫改為如下兩種形式是正確的:

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

上面第一行程式碼先使用位置引數為 name 引數傳入引數值,再使用關鍵字引數為 message 引數傳入引數值;第二行程式碼中的 name、message 引數都使用關鍵字引數傳入引數值。

由於 Python 要求在呼叫函式時關鍵字引數必須位於位置引數的後面,因此在定義函式時指定了預設值的引數(關鍵字引數)必須在沒有預設值的引數之後。例如如下程式碼:

# 定義一個列印三角形的函式,有預設值的引數必須放在後面
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() 函式,該函式的第一個 char 引數沒有預設值,第二個 height 引數有預設值。

上面程式中第一次呼叫 printTriangle() 時,程式使用兩個位置引數分別為 char、height 傳入引數值,這當然是允許的;第二次呼叫 printTriangle() 時,第一個引數使用位置引數,那麼該引數值將傳給 char 引數,第二個引數使用關鍵字引數為 height 引數傳入引數值,這也是允許的;第三次呼叫 printTriangle() 時,只使用關鍵字引數為 char 引數傳入引數值,此時 height 引數將使用預設值,這是符合語法的。

注意點補充:

說明及注意點

a. 在使用預設引數後,對於函式的必填引數必須在前,預設引數在後。

b. 預設引數在一個函式中可以有多個。

c. 當一個函式中的某個引數的改動不大,就可以考慮將這個引數設定為預設引數,比如說一個人的民族,這種引數就可以設定為預設引數。

到此這篇關於Python新手學習函式預設引數設定的文章就介紹到這了,更多相關Python函式預設引數設定內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!