CodeGym /課程 /Python SELF TW /函數參數

函數參數

Python SELF TW
等級 6 , 課堂 3
開放

9.1 參數 vs 引數

初學者經常會混淆「參數」和「引數」的術語,但了解這兩者的區別對於理解函數式編程很重要。

參數是列在函數定義中的變數。它們是函數用來引用傳遞給它的值的名稱。函數參數作為"佔位符",表示將在函數體內使用的值。當你定義函數時,你是在描述它的參數。


def print_info(name, age):  # name 和 age 是參數
    print(f"Name: {name}, Age: {age}")        

引數是傳遞給函數的具體值或數據。引數在函數調用時插到參數位置。引數可以是常量、變數、表達式或其他函數的結果。


print_info("Alice", 30)  # "Alice" 和 30 是引數 

引數類型

  1. 位置引數:值按照參數定義的順序傳遞。
  2. 關鍵字引數:使用參數名傳遞給函數的引數,允許它們在位置引數後以任何順序列出。
  3. 默認引數:在定義函數時,可以給參數賦予默認值。

你已經在使用位置引數,而關鍵字引數和默認引數我們會在以後的課程中討論。

理解 Python 中參數和引數的區別有助於理解函數如何接收和處理數據。這種區別對於創建靈活的函數非常重要,這些函數可以輕鬆適應不同的調用情況,使你的代碼更具模塊性和可重用性。

9.2 默認值

Python 中的默認引數是一種機制,允許函數提前指定一個或多個參數的預定義值。這使得函數的調用更方便和靈活,因為不需要在每次調用時顯式指定所有引數。

定義默認引數

默認引數是在函數定義中指定的,其中在聲明參數時設置一個值, 如果在調用函數時沒有傳遞引數,將使用該值


def print_info(name, company='Unknown'):
    print(f"Name: {name}, Company: {company}")

在此例中,company 的默認值為 'Unknown'

  • 簡化函數調用:具有多個參數的函數可以僅指定最重要的引數來調用。
  • 靈活性:函數可以在不改變其代碼的情況下適應不同的使用場景。
  • 代碼可讀性:默認值的明確說明使代碼自帶文檔化。

注意事項

不可變性:引數的默認值應該是不可變的數據類型,如數字、字符串或元組。使用可變類型(如列表或字典)可能會導致不希望的副作用,因為對這些對象的更改會在函數調用之間保留。

引數順序:默認引數參數應在定義函數時排列於無默認值參數之後。

再舉一個例子:


def create_user(username, is_admin=False):
    if is_admin:
        print(f"User {username} is an admin.")
    else:
        print(f"User {username} is a regular user.")
        
create_user("Alice")  # is_admin == False
create_user("Bob", is_admin=True)  # is_admin == True
create_user("Karl", True)  # is_admin == True

上面的例子中有三種調用含有默認引數函數的方式:每一種都是可行的。

9.3 按名稱傳遞參數

按名稱將參數傳遞給函數可以更清楚地指定哪些值傳遞給哪些引數,從而提高代碼的可讀性,並減少由於引數順序錯誤而引發錯誤的可能性。

要按名稱傳遞參數值,在調用函數時需要為特定參數賦值:


函數(參數1 = , 參數2 = )

這種方法在處理具有多個參數或擁有默認值參數的函數時尤其有用。

按名稱傳遞參數的優勢

  • 清晰性和可讀性:指定參數名可讓代碼對其他開發者或當自己回過頭查看舊代碼時容易理解。
  • 靈活性:參數可以按任何順序傳遞,這在函數有很多參數時很方便。
  • 避免錯誤:無需記住函數的參數順序,從而降低因錯誤傳遞值而引發的錯誤可能性。

使用示例


def create_profile(name, age, job):
    print(f"Name: {name}")
    print(f"Age: {age}")
    print(f"Job: {job}")
        
create_profile(name = "John", age = 28, job = "Developer")

在這個例子中,參數不是按順序傳遞的,但每個參數都明確賦值,這使得函數調用更加靈活和易懂。

示例二:

順便提一下,你以前已經接觸過按名稱傳遞參數。在 print() 函數中,記得嗎?

特性和限制

如果函數定義中存在無名稱參數,則按名稱傳遞的參數必須在其之後。

在調用函數時,不可多次使用同一參數名。

按名稱傳遞參數是 Python 的一個強大功能,使代碼更安全且易於理解,特別是在使用具有多個引數或選擇值的函數時。

2
任務
Python SELF TW, 等級 6, 課堂 3
上鎖
增值稅
增值稅
2
任務
Python SELF TW, 等級 6, 課堂 3
上鎖
找到了貓
找到了貓
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION