天天看點

Python基礎(六)- 函數函數

函數

函數的概念

函數是帶名字的代碼塊,用于完成具體的工作。要執行函數定義的特定任務,可調用相應的函數。當我們需要在程式中多次使用某一個功能是,就可以将功能代碼寫入函數中,再對函數進行調用來實作功能

定義函數

函數的定義的格式為:

def 函數名(參數, 參數, ...):  # 通過def關鍵字可以定義一個函數
    執行代碼
函數名(實參, 實參, ...)  # 通過函數名加(),并傳入相應的參數來調用函數
           

例子:

def hello():
    print('say hello')

hello()  # 輸出結果為 say hello
           
說明:函數的參數是自定的,可以有0個到無數個,這個是根據此函數的功能需求來的

函數的參數

實參和形參

在定義一個函數時,根據需要可以給函數指定一個參數,在調用這個函數時提供這個參數具體的值,那麼,給函數指定的這個參數就叫做形參,傳入的指定的值就是實參

def func123(a, b, c):  # func123為參數名, a,b,c就是三個形參
    print(a + b + c)

func123(, , )  # 在此處調用func()函數, 1,2,3就分别是a,b,c的實參
>>>  # 輸出結果為6
           

參數傳遞方式

在python的函數中,傳遞參數的方式有多種,最普遍的方式是位置傳參和關鍵字傳參。

  • 位置傳參: 是根據函數形參的定義順序,在調用函數時按形參順序傳遞實參
def func123(a, b, c):
    print(a + b + c)
# 位置傳參是根據函數形參的定義順序,在調用函數時按形參順序傳遞實參
func123(, , ) 
           
  • 關鍵字傳參:指定傳遞的實參的形參名,就可以随意的選擇傳遞實參的順序
def func123(a, b, c):
    print(a + b + c)
# 關鍵字傳參:指定傳遞的實參的形參名,就可以随意的選擇傳遞實參的順序
func123(a=, b=, c=)
func123(b=, a=, c=)
func123(c=, b=, a=)
# 以上三個函數調用是等價的,效果也是一模一樣的
           
  • 混合傳參:可以通過位置傳參和關鍵字傳參混合使用傳遞參數,但是在使用了關鍵字傳參後,之後的未傳參參數必須使用關鍵字傳參方式傳參
def func123(a, b, c):
    print(a + b + c)
# 混合傳參方式:可以通過位置傳參和關鍵字傳參混合使用傳遞參數
func123(, , c=)
func123(, b=, c=)
func123(, c=, b=)
# func123(1, b=2, 3) 錯誤傳參方式
# func123(1, 3, b=2) 錯誤傳參方式
           

傳參的一些技巧和用法

預設參數

  • 在定義函數參數時,可以給形參一個預設值,當别人調用這個函數并傳遞實參時,如果沒有對有預設值的參數傳參,則在函數執行時自動讓參數将預設值作為參數值使用
def func123(a=, b=, c=):
    print(a + b + c)

func123(, , )  # 4 5 6
func123()  # 1 2 3
func123()  # 4 2 3
func123(, )  # 4 5 3
func123(, c=)  # 4 2 6
func123(b=)  # 1 5 3
func123(c=)  # 1 2 6
...
           

未知參數傳參

  • 自定義傳參:有時我們在使用一個函數時并不知道需要傳遞多少實參進去,這是我們可以使用自定義傳參的方式來進行參數傳遞
def func123(*args):  # 使用 *自定義參數名 來接收數量不确定的參數傳遞
    num = 
    for i in args:  # 這裡的args是一個元組,包含傳遞進入的多個參數
        num += i
    print(num)

func123(, , , ...)
           
  • 自定義關鍵字傳參:自定義傳參雖然友善,但是如果我們想要在函數中确定傳遞的參數中是否有我們需要的實參,那麼我們就需要用到自定義的關鍵字傳參
def func123(**kwargs)  # 使用 **自定義參數名 來接受數量不确定的關鍵字參數傳遞
    if 'a' in kwargs:  # 這裡的kwargs對象是一個字典,包含傳遞的多個關鍵字參數
        print(kwargs['a'])

func123(a=, b=, c=, ...)
           
  • 當我們已經知道這兩種傳參方式後,那麼在我們不确定使用我們函數的人會怎樣傳參時,我們就可以制定能夠接受任何參數傳遞的參數定義方式
def func123(*args, **kwargs)  # 這樣可以将使用者想要傳遞的所有參數都包含在内而不會引起python解釋器抛出參數傳遞錯誤資訊
    for i in args:
        pass
    for key, value in kwargs.item():
        pass

func123(, , , a=, b=, c=, ...)
           

未完待續