Python 教程 25 Python 中引數型別的詳細說明

Mondo 科技 更新 2024-02-18

當我們編寫函式時,我們定義了一些佔位符,這些佔位符是引數,是函式定義中用來接收外部傳遞值的佔位符,這將有助於我們在呼叫函式時接收外部傳遞的值。 在Python中,有各種型別的引數,包括位置引數、預設引數、關鍵字引數、變數位置引數、變數關鍵字引數和強制關鍵字引數。

位置引數是最常見的引數型別,也是預設引數型別。 它們按照它們在函式定義中的顯示順序傳遞,並且在呼叫函式時必須按順序提供。

def greet(name, message):

print(message, name)

greet("alittle", "hello"輸出:hello alittle

預設引數是那些在定義函式時具有預設值的引數,並且在呼叫函式時,如果沒有為引數提供特定值,則預設值將用作引數的值。 通過設定引數的預設值,可以使函式在某些情況下更加靈活和易於使用。 如果呼叫函式時未提供該引數的值,則該函式將使用預設值,否則將使用傳遞給該引數的值。

def greet(name, message="hello"):

print(message, name)

使用預設引數呼叫函式。

greet("alittle"輸出:hello alittle

傳遞特定引數值將呼叫該函式。

greet("kobe", "hi"輸出: Hi Kobe

需要注意的是,在Python中,預設引數是從左到右依次設定的,如果要為第乙個引數設定預設值,則必須確保它位於以下引數之前。 也就是說,要設定倒數第二個引數的預設值,必須首先為倒數第二個引數設定預設值。

def greet(name="iverson", message):

print(message, name)

由於第乙個引數具有預設值,因此只能傳遞第二個引數。

greet("kobe")

執行上述示例時,報錯資訊:

file "d:\program files\jetbrains\pycharmprojects\hello.py", line 33

def greet(name="iverson", message):

syntaxerror: non-default argument follows default argument

嘗試為第乙個引數設定預設值時發生語法錯誤。 這是因為在定義函式時,預設引數只能放在非預設引數之後。 所以如果我們想為第乙個引數設定乙個預設值,我們可以考慮使用關鍵字引數來傳遞引數值,或者兩個引數可以顛倒過來。

關鍵字引數是一種在呼叫函式時使用引數名稱指定引數值的方法。 使用關鍵字引數可以使函式呼叫更清晰、更易讀,尤其是當函式具有多個引數並且它們具有相同的資料型別或預設值時。

例如,上面的預設引數示例:

def greet(name, message):

print(message, name)

使用關鍵字引數呼叫函式。

greet(name="iverson", message="hello"輸出:hello iverson

greet(message="hi", name="kobe"輸出: Hi Kobe

在上面的示例中,我們在呼叫函式時通過引數名稱指定了引數值。 這不僅可以準確傳遞引數,還可以使函式呼叫的意圖更清晰、更易於理解。 即使將函式定義中的第乙個引數設定為預設值,也不會進行糾錯。

因此,您可以使用關鍵字參數顯式指定引數名稱,這樣可以避免因引數順序錯誤而導致的錯誤。 並且只將值傳遞給您關心的引數,而忽略其他引數。 在呼叫函式時提供更好的可讀性和可維護性。

可變長度位置引數是一種屬性,它允許函式接受任意數量的位置引數。 定義函式時,使用星號 (*) 作為字首來表示變數位置引數。 它將所有傳入的位置引數打包到乙個元組中。 定義函式後,我們可以在引數列表中使用 *args 來接收這些引數。

def calculate_sum(*numbers):

total = 0

for num in numbers:

total += num

return total

print(計算總和(1, 2, 3)) 輸出: 6

print(calculate sum(4, 5, 6, 7, 8)) 輸出: 30

同樣重要的是要注意,可變位置引數放在其他引數之後。 也就是說,函式定義中首先定義的引數將按位置順序讀取引數的值,而變數位置引數將讀取所有剩餘的引數。 例如,如果你想這樣寫,你會得到乙個錯誤:

def calculate_sum(*numbers, message):

total = 0

for num in numbers:

total += num

return message, total

result = calculate_sum(1, 2, 3, "sum=")

print(result)

如果執行它,將報告以下錯誤。

traceback (most recent call last):

file "d:\program files\jetbrains\pycharmprojects\hello.py", line 40, in

result = calculate_sum( 1, 2, 3, "sum=")

typeerror: calculate_sum() missing 1 required keyword-only argument: 'message'

變數關鍵字引數是通過使用 ** 字首來定義的,以接收任意數量的關鍵字引數。 有點類似於鍵值格式,它會將所有傳入的關鍵字引數打包到乙個字典(dict)中,可以使用鍵值對在函式內部訪問該字典。

def calculate_sum(*args, *kwargs):

total = sum(args)

for key, value in kwargs.items():

total += value

return total

result = calculate_sum(1, 2, 3, num1=4, num2=5)

print(result) 輸出: 15

在此示例中,calculate_sum函式接受可變位置引數args和可變關鍵字引數kwargs。可變位置引數args用於接收任意數量的位置引數,同時變數關鍵字引數可用kwargs用於接收任意數量的關鍵字引數。 在函式內部,我們首先使用calculate_sum功能對可變位置引數args做乙個總結。 然後,我們遍歷變數關鍵字引數kwargs將關鍵字引數的值相加到總和。

變數關鍵字引數提供了一種靈活的方法來處理不確定數量的關鍵字引數,並為函式提供更大的可伸縮性和適應性。

必需的僅關鍵字引數位於 3在版本 1 之後引入,意味著在定義函式時,使用 * 字尾來限制呼叫函式時關鍵字引數的使用,不允許使用位置引數。

def greet(*,name, message):使用分隔符“*”指示必須使用關鍵字傳遞以下引數。 

print(message, name)

greet(name="alittle", message="hi") 關鍵字引數傳遞。

greet("kobe", "hi")

第一次通話greet沒問題,但第二名叫greet它將引發異常並報告錯誤。

traceback (most recent call last):

file "d:\program files\jetbrains\pycharmprojects\hello.py", line 39, in

message = greet("kobe", "hi")

typeerror: greet() takes 0 positional arguments but 2 were given

通過使用必填關鍵字引數,我們可以清楚地傳達引數的含義,避免混淆引數的位置,並提高引數的可讀性和魯棒性。

相關問題答案

    Python 教程 22 Python 物件導向的屬性和方法

    在 Python 物件導向程式設計中,屬性和方法是類及其物件的重要組成部分。如果說封裝 繼承和多型是物件導向程式設計的思想,那麼類的屬性和方法就是骨架,因為屬性和方法,物件導向程式設計就成了血肉之軀。屬性是類或物件所擁有的資料,用於描述物件的特徵和狀態。特性可以是例項屬性 特定於物件的屬性 或類屬性...

    Python 教程:Python 變數的 6 種基本型別

    學習一門程式語言,你必須忽略變數的概念。Python 中的變數是用於儲存資料的資料的名稱,您可以為變數賦值,並使用該變數在程式中的其他位置引用該值。變數在程式中扮演儲存和操作資料的角色。如果你已經學習了 C C 語言,在定義變數後,你需要新增一種限制型別,例如 intage doublemoney ...

    python新手教程很簡單

    Python 新手教程。Python 是一種簡單易學 功能強大的程式語言,具有簡潔的語法和豐富的庫,使 Python 成為初學者的理想選擇。以下是一些簡單的示例,可幫助您開始 Python 程式設計。首先,我們需要安裝 python。您可以從 Python 網站 安裝最新版本的 Python。安裝完...

    Python 教程:浮點運算揭秘

    嗨,大家好,歡迎來到我的python教程專欄!今天我們要講的是Python中乙個非常有趣的話題 浮點運算。在我們的日常編碼中,我們可能會遇到一些令人煩惱的浮點運算,讓我們一起揭開這個謎團的神秘面紗吧!問題的本質 十進位與二進位 首先,讓我們了解浮點數在計算機中是如何表示的。在硬體級別,浮點數表示為基...

    Python 教程列表工具

    嗨,大家好!今天,我們將深入探討 Python 中一些強大的列表工具,讓您的程式設計之旅更加得心應手。Python教程程式設計技巧 .陣列模組 首先,我們來談談陣列模組。該模組為我們提供了乙個更緊湊 更高效的列表,特別適合儲存相似的資料。看看這個例子,我們可以儲存雙位元組無符號二進位數字陣列,而不是...