初學__Python——Python 函數參數的使用

目錄

一、有默認值的參數

示例:計算參數的立方值,其參數的默認值爲 5

示例:向指定的參數傳遞值

二、參數的傳遞方式

三、如何傳遞任意數量的參數

四、用參數返回計算結果


參數讓函數更有價值,在Python中,函數的參數除了上一篇博客介紹的一種方式之外,還有許多種形式。例如,用某些函數時,既可以向其傳遞參數,也可以不傳遞參數,函數依舊可以正確調用。還有一些情況,當函數中的參數數量不確定,可能是 1 個,也可能是幾個、甚至幾十個時,對於這些函數,應該如何定義其參數呢?本篇博文將會介紹其方法。

一、有默認值的參數

在Python中,可以在聲明函數時,預先爲參數設置一個默認值。當調用函數時,如果某個參數具有默認值,則可以不向函數傳遞該參數,這時,函數將使用聲明函數時爲該參數設置的默認值。

聲明一個參數具有默認值的函數,格式如下:

def <函數名> (參數 = 默認值):
    <語句>
  • 示例:計算參數的立方值,其參數的默認值爲 5

def Cube (x = 5):        # 聲明函數,將參數默認值設置爲 5
    return x ** 3


print(Cube(2))          # 調用函數,計算 2 的立方,並輸出返回結果


print(Cube())           # 調用函數,計算默認參數的立方,並輸出返回結果


def Cube ( x = 1,y = 2, z = 3 ):        # 聲明函數
    return (x + y - z ) ** 3


print(Cube(0))          # 向函數傳遞一個值,是傳遞給 x

print(Cube( 3, 3))           # 向函數傳遞兩個值,是傳遞給 x, y

print(Cube( , , 5))   # 這種方法是錯誤的

注:從上述代碼可以看出,在Python中,傳遞參數是按照聲明函數時定義的參數的順序依次傳遞的。如果在調用函數時使用且僅使用 "," 表示向函數的最後一個參數傳遞值的話,則會引發錯誤。

  • 示例:向指定的參數傳遞值

def Cube ( x = None,y = None, z = None ):        # 聲明函數,將參數默認值均設爲 None
    if x == None:            # 判斷參數 x  的值是否爲 None,即未傳遞值
        x = 1                # 將 x 賦值爲 1,相當於參數 x 的默認值爲 1
    if y == None:            # 判斷參數 y  的值是否爲 None,即未傳遞值
        y = 2                # 將 x 賦值爲 2,相當於參數 x 的默認值爲 2
    if z == None:            # 判斷參數 z  的值是否爲 None,即未傳遞值
        z = 3                # 將 x 賦值爲 3,相當於參數 x 的默認值爲 3
    return (x + y - z ) ** 3


print(Cube())          # 調用參數,使用參數的默認值

print(Cube( None, None, 5))           # 調用函數,僅 x, y 使用默認值

二、參數的傳遞方式

在Python中,參數值的傳遞不只是按照聲明函數時參數的順序進行傳遞的,實際上,Python還提供了另外一種傳遞參數的方法——按照參數名傳遞值。以參數名傳遞參數時類似於設置參數的默認值。

使用按參數名傳遞參數的方式調用函數時,要在調用函數名後的圓括號裏爲函數的所有參數賦值,賦值的順序不必按照函數聲明時的參數順序。

def fun ( x, y, z):         # 聲明函數
    return x + y - z


print(fun( 1, 2, 3))         # 調用函數,按照順序傳遞參數

print(fun( z =1, x = 2, y = 3))       # 調用函數,按照函數名傳遞參數

在Python中,調用函數可以同時使用按順序傳遞參數和按照參數名傳遞參數兩種方式。但是,需要注意的是,按順序傳遞的參數要位於按參數名傳遞的參數之前,而且不能有重複的情況。

>>> def mysum( x, y, z):              # 聲明函數
...     return x + y + z
...
>>> mysum ( 1, z = 3, y = 2)          # 同時使用按順序傳遞參數和按參數名傳遞參數
6
>>> mysum ( z = 3, y = 2, 1)       # 錯誤的方式!!按照順序傳遞的參數不能位於按參數名傳遞的參數之後
  File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
>>> mysum ( 5, z = 6, x = 7)       # 錯誤的方式!!參數重複,5 已經傳遞給了 x,後邊又將 7 傳遞給 x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: mysum() got multiple values for argument 'x'

在具有默認參數值的函數中,使用按參數名的方法非常方便。

如果使用按照參數名向函數傳遞參數的方法,就不必在函數聲明時將參數的默認值設置爲 None,可以省去函數中的判斷語句。不過,爲了讓函數更具有通用性,在函數聲明中依然將參數的默認值設置爲 None。

def Cube ( x = None,y = None, z = None ):        # 聲明函數
    if x == None:
        x = 1
    if y == None:
        y = 2
    if z == None:
        z = 3
    return (x + y - z ) ** 3


print(Cube(z = 5))          # 按參數名向函數中的參數 z 傳遞值

print(Cube( y = 6, z = 3))   # 按參數名向函數中的參數 y, z 傳遞值

三、如何傳遞任意數量的參數

在Python中,函數可以具有任意個參數,而不必在聲明函數時對所有參數進行定義。使用可變長參數的函數時,其所有參數都保存在一個元組裏,在函數中可以使用 for 循環來處理。聲明函數時,如果在參數名前加上一個星號 "*",則表示該參數是一個可變長參數。

>>> def mylistappend( *list ):      # 聲明一個可變長參數的函數
...     l = []
...     for i in list:              # 循環處理參數
...         l.extend( i )           # 將所有參數中的列表合併在一起
...     return l
...
>>> a = [ 1, 2, 3 ]                 # 定義列表
>>> b = [ 4, 5, 6 ]
>>> c = [ 7, 8, 9 ]
>>> mylistappend( a, b )            # 調用函數,傳遞兩個參數
[1, 2, 3, 4, 5, 6]
>>> mylistappend( a, b, c )         # 調用函數,傳遞三個參數
[1, 2, 3, 4, 5, 6, 7, 8, 9]

四、用參數返回計算結果

在Python中,在參數中使用可變對象(如列表等),使函數中的結果返回到參數中,從而達到從函數中返回計算結果的目的。

>>> def ChangeValue1( x ):   # 此處參數 x 應爲整數
...     x = x ** 2
...
>>> def ChangeValue2( x ):   # 此處參數 x 應爲列表
...     x[0] = x[0] ** 2     # 第一個成員的值被改變
...
>>> a = 2           # a 爲整數,其值爲 2
>>> b = [2]         # b 爲列表,其第一個成員爲 2
>>> ChangeValue1(a) # 使用函數改變 a 的值,但不成功
>>> a
2
>>> ChangeValue2(b) # 使用函數改變 b 成員的值
>>> b
[4]                 # 值被成功改變
>>> c = [ 2, 3]
>>> ChangeValue2(c)
>>> c
[4, 3]
>>> print(ChangeValue1(a))
None
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章