亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Python 基礎教程

Python 流程控制

Python 函數(shù)

Python 數(shù)據(jù)類型

Python 文件操作

Python 對象和類

Python 日期和時間

Python 高級知識

Python 參考手冊

Python 函數(shù)參數(shù)

參數(shù)

用戶定義的函數(shù)文章中,我們學習了有關定義函數(shù)并調(diào)用函數(shù)的知識。如果不清楚函數(shù)調(diào)用方式,將導致不可預知的錯誤。下面是一個示例。

def greet(name, msg):
    """這個一個打招呼的函數(shù)
    有name,msg兩個參數(shù)"""
    print("Hello", name + ', ' + msg)

greet("Monica", "Good morning!")

輸出結果

Hello Monica, Good morning!

函數(shù)greet()具有兩個參數(shù)。

由于我們已經(jīng)使用兩個參數(shù)調(diào)用了此函數(shù),因此該函數(shù)運行正常,并且沒有任何錯誤。

如果使用不同數(shù)量的參數(shù)調(diào)用它,則解釋器將顯示錯誤消息。下面是對此函數(shù)的調(diào)用,演示了只使用一個參數(shù)和使用沒有參數(shù)調(diào)用后,運行后它們各自拋出的錯誤消息。

>>> greet("Monica")    # 只給傳一個參數(shù)
TypeError: greet() missing 1 required positional argument: 'msg'
>>> greet()    # 沒有傳入任何參數(shù)
TypeError: greet() missing 2 required positional arguments: 'name' and 'msg'

可變的函數(shù)參數(shù)

到目前為止,函數(shù)具有固定數(shù)量的參數(shù)。在Python中,還有其他方法來定義可以采用可變數(shù)量的參數(shù)的函數(shù)。

下面介紹這種類型的三種不同形式。

Python 默認參數(shù)

在Python中函數(shù)參數(shù)可以具有默認值。

我們可以使用賦值運算符(=)為參數(shù)提供默認值。這是一個示例。

def greet(name, msg="早上好!"):
    """
    此函數(shù)向提供消息的人打招呼。
    如果沒有提供消息,
    則默認為“早上好!”
    """
    print("你好", name + ', ' + msg)


greet("張三")
greet("李四", "最近怎么樣?")

輸出結果

你好 張三, 早上好!
你好 李四, 最近怎么樣?

在此函數(shù)中,參數(shù)name沒有默認值,那么在調(diào)用此函數(shù)時,name參數(shù)必須要傳值(強制性的)。

另一方面,該參數(shù)msg的默認值為"Good morning!"。因此,在調(diào)用函數(shù)時可以不傳值。如果調(diào)用時提供了一個值,它將會覆蓋默認值。

函數(shù)中的任意數(shù)量的參數(shù)都可以具有默認值。但是一旦有了默認參數(shù),其右邊的所有參數(shù)也必須具有默認值。

這意味著非默認參數(shù)不能跟隨默認參數(shù)。例如,如果我們將上面的函數(shù)頭定義為:

def greet(msg = "Good morning!", name):

我們將收到以下錯誤消息:

SyntaxError: non-default argument follows default argument

Python 關鍵字參數(shù)

當我們調(diào)用帶有某些值的函數(shù)時,這些值將根據(jù)其位置分配給參數(shù)。

例如,在上面的函數(shù)greet(),當我們把它叫做是greet("Bruce", "How do you do?"),該值"Bruce"被分配給參數(shù)name,而"How do you do?"以被分配給msg。

Python允許使用關鍵字參數(shù)調(diào)用函數(shù)。當我們以這種方式調(diào)用函數(shù)時,參數(shù)的順序(位置)可以更改。對上述函數(shù)的后續(xù)調(diào)用均有效,并產(chǎn)生相同的結果。

# 2個關鍵詞參數(shù)
greet(name = "Bruce",msg = "How do you do?")

# 2個關鍵詞參數(shù),參數(shù)順序調(diào)換
greet(msg = "How do you do?",name = "Bruce") 

#1 個位置參數(shù), 1 個關鍵詞參數(shù)
greet("Bruce", msg = "How do you do?")

如我們所見,我們可以在函數(shù)調(diào)用期間將位置參數(shù)與關鍵字參數(shù)混合。但是我們必須記住,關鍵字參數(shù)必須跟隨位置參數(shù)。

在關鍵字參數(shù)之后放置位置參數(shù)會導致錯誤。例如,函數(shù)調(diào)用如下:

greet(name="Bruce","How do you do?")

會導致錯誤:

SyntaxError: non-keyword arg after keyword arg

Python 任意參數(shù)

有時,我們事先不知道將傳遞給函數(shù)的參數(shù)數(shù)量。Python允許我們通過帶有任意數(shù)量參數(shù)的函數(shù)調(diào)用來處理這種情況。

在函數(shù)定義中,我們在參數(shù)名稱前使用星號(*)表示此類參數(shù)。這是一個示例。

def greet(*names):
    """此函數(shù)被打招呼的對象為
        元組列表中的所有人."""
    # 名稱是一個帶有參數(shù)的元組
    for name in names:
        print("Hello", name)

greet("Monica", "Luke", "Steve", "John")

輸出結果

Hello Monica
Hello Luke
Hello Steve
Hello John

在這里,我們調(diào)用了帶有多個參數(shù)的函數(shù)。這些參數(shù)在傳遞給函數(shù)之前被包裝為一個元組。在函數(shù)內(nèi)部,我們使用for循環(huán)來取回所有參數(shù)。