Python 基礎(chǔ)教程

Python 流程控制

Python 函數(shù)

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

Python 文件操作

Python 對(duì)象和類

Python 日期和時(shí)間

Python 高級(jí)知識(shí)

Python 參考手冊(cè)

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

參數(shù)

用戶定義的函數(shù)文章中,我們學(xué)習(xí)了有關(guān)定義函數(shù)并調(diào)用函數(shù)的知識(shí)。如果不清楚函數(shù)調(diào)用方式,將導(dǎo)致不可預(yù)知的錯(cuò)誤。下面是一個(gè)示例。

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

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

輸出結(jié)果

Hello Monica, Good morning!

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

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

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

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

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

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

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

Python 默認(rèn)參數(shù)

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

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

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


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

輸出結(jié)果

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

在此函數(shù)中,參數(shù)name沒(méi)有默認(rèn)值,那么在調(diào)用此函數(shù)時(shí),name參數(shù)必須要傳值(強(qiáng)制性的)。

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

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

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

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

我們將收到以下錯(cuò)誤消息:

SyntaxError: non-default argument follows default argument

Python 關(guān)鍵字參數(shù)

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

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

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

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

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

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

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

在關(guān)鍵字參數(shù)之后放置位置參數(shù)會(huì)導(dǎo)致錯(cuò)誤。例如,函數(shù)調(diào)用如下:

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

會(huì)導(dǎo)致錯(cuò)誤:

SyntaxError: non-keyword arg after keyword arg

Python 任意參數(shù)

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

在函數(shù)定義中,我們?cè)趨?shù)名稱前使用星號(hào)(*)表示此類參數(shù)。這是一個(gè)示例。

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

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

輸出結(jié)果

Hello Monica
Hello Luke
Hello Steve
Hello John

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

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清