Python 函式引數
Jinku Hu
2023年1月30日
在本節中,我們將來學習 Python 函式引數,及其不同型別的引數,例如預設引數,關鍵字引數和任意引數。
Python 函式引數
函式的引數是在函式內需要呼叫該函式時輸入的值。當定義的函式具有指定數量引數,呼叫此特定函式時必須傳遞指定數量的引數。
如果傳遞的引數多於或少於函式定義中指定的引數,則會得到一個錯誤-TypeError
。
我們舉下面的例子,
def language(p, n):
"""Function to print a message"""
print("Programming language", n, "is:", p)
language("Python", 1)
language("Java", 2)
Programming language 1 is: Python
Programming language 2 is: Java
函式 language
有兩個引數。如果呼叫函式時傳遞不同數量的引數,則會出現如下錯誤:
>>> language('Python')
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
language('Python')
TypeError: language() takes exactly 2 arguments (1 given)
>>> language(2, 'Python', 'Java')
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
language(2, 'Python', 'Java')
TypeError: language() takes exactly 2 arguments (3 given)
Python 函式引數型別
上面介紹的函式具有固定數量的引數。函式也可以有可變的引數,將可變引數傳遞給函式有三種不同的方法,現在我們來逐一介紹。
Python 函式預設引數
在函式中,引數可以有在函式定義中指定的預設值。如果引數有預設值,那麼它是輸入引數中可選的值。
我們先來看下面的例子,
def language(p="C++", n=3):
"""Function to print a message"""
print("Programming language", n, "is:", p)
language()
Programming language 3 is: C++
你可以在看到這裡沒有傳遞任何輸入引數,但程式仍然能執行,這是因為函式定義的時候提供了引數的預設值。如果你傳入了這些預設引數的不同的值,則將覆蓋預設值。
Python 函式關鍵字引數
通常情況下,你需要按照函式定義中定義的引數順序來傳遞多個引數。但是如果使用關鍵字引數,則可以更改引數的位置。
下面的例子是順序輸入引數的情形,
def language(p, n):
"""Function to print a message"""
print("Programming language", n, "is:", p)
language(p="C++", n=3)
Programming language 3 is: C++
如果使用關鍵字引數將值明確的賦給特定引數,那就可以更改引數的位置。比如,
def language(p, n):
"""Function to print a message"""
print("Programming language", n, "is:", p)
language(n=3, p="C++")
Programming language 3 is: C++
Python 函式任意引數
假如事先不知道應該傳遞多少個引數,那可以來使用任意引數。任意引數在引數名稱前用星號*
來表示。它將不是關鍵字引數的其他引數作為元組傳遞給函式。
def language(*args):
"""Demo function of arbitray arguments"""
for i in args:
print("Programming language:", i)
language("Java", "C++", "R", "Kotlin")
Programming language: Java
Programming language: C++
Programming language: R
Programming language: Kotlin
這個函式在呼叫的時候,傳遞了多個引數,這些引數在函式被真正呼叫前被轉換成了一個元組。
雙星號 **kwargs
是用來傳遞任意的關鍵字引數,比如,
def language(**kwargs):
"""Demo funciton of arbitrary keyword arguments"""
for a in kwargs:
print(a, kwargs[a])
language(country="NL", code="+31")
country NL
code +31
任意關鍵字引數中的引數是作為字典傳遞的,該字典的鍵是關鍵字,字典值是對應的引數的值。比如上面的示例中,傳遞的引數將轉換為字典 {'country':"NL", 'code':"+31"}