python——函數的形參和實參、參數


python的參數分類

python參數可以分為兩類:1.定義時的參數——形參(形式參數)、2.調用時的參數——實參(實際參數,傳參)

實參的規則

實參就是在函數調用的時候,通過函數后面的括號傳遞給函數,讓函數處理的值,如下:

def factorial(x, y):   # 定義一個factorial函數,設置兩個形參
	""" This is a function that can calculate the product of the two parameter that you send. """  # 這稱為函數的文檔,對函數作說明的,可寫可不寫,可參考本人博客
	return x * y

factorial(3, 5) # 調用傳參,正確
factorial(2, y=5) # 調用傳參,正確
factorial(x=7, y=5)  # 調用傳參,正確
factorial(y=4, x=6) # 調用傳參,正確
factorial(x=1, 5) # 錯誤

仔細觀察上面代碼中的傳參方式,這時候我們發現,傳遞的參數只有兩種:

  1. factorial(3, 5),這里的3和5稱為普通位置參數(positional),
  2. factorial(2, y=5),這里的2是普通位置參數,y=5稱為關鍵字參數(keyword)

實參傳參的參數類型只有這兩種,但是有一些規則:

  1. 普通位置參數要在關鍵字參數之前,比如上面的factorial(2, y=5)是正確的;factorial(x=1, 6)是錯誤的
  2. 如果都是普通位置參數,只能按照順序傳參,如上面的factorial(3, 5),x對應着3,y對應着5 , 但是如果都是關鍵字傳參,則順序可以不同,如上面的factorial(y=4 , x=6)
形參的各種規則

形參(即函數在定義時用來占位置的參數)可以分為1、不帶缺省值的參數、2、帶缺省值的參數、3、可變位置參數、4、可變關鍵字參數、5、key-word only參數

1、不帶缺省值的參數
在上面我們定義的factorial中的兩個參數稱為不帶缺省值的參數,下面代碼也是:

def hello(x, y): # x和y都是不帶缺省值的參數,調用時必須傳參,不然報錯
	print('這是', x, y)

2、帶缺省值的參數

def ex(w=5): # 這是一個帶缺省的參數w,如果傳參了就是用傳入的參數,如果沒傳參就使用缺省值5
	print("如果沒傳參就用缺省值噢", w)

3、可變位置參數
有缺省值的形參和沒有缺省值的形參,我們都可以通過位置傳參傳入,也可以通過關鍵字傳參傳入(上面講的兩種傳參方式都可以),如果通過位置傳參傳入的參數過多,多余的會被收集到args中,並且在args中生成一個元組tuple,*args可以接收0個或多個位置參數,可變位置參數的定義是前面加一個 *
在函數定義時,沒有缺省值的形式參數一定要放在有缺省值的形參之前,不然會報錯

def f1(x, y=4, *args):#這里args就是一個可變位置參數
	print([x, y, args])

f1(3, 5, 2, 7) # 3給x, 5給y,2、7都給args

4、可變關鍵字參數

有缺省值的形參和沒有缺省值的形參,我們都可以通過位置傳參傳入,也可以通過關鍵字傳參傳入(上面講的兩種傳參方式都可以),如果通過關鍵字傳參傳入的參數過多,多余的會被收集到kwargs中,並且在kwargs中生成一個元組字典,**kwargs可以接收0個或多個關鍵字參數,可變關鍵字參數的定義是前面加兩個 *
**kwargs只能放在形式參數的最后

def f2(x, y=3, *args, **kwargs)# 一般函數形參的格式
	print(x, y, args, kwargs)
	
f2(4,3,2,5,z=6,g=3)# 4給了x, 3給了y, 2,5給了args, z=6,g=3給了kwargs

5、key-word only參數
從名字就可以看出,傳參時只能接收keyword(關鍵字傳參),放在*args和**kwargs中間:
在前面講到說,沒有缺省值的一定要放到有缺省值的后面,但是在key-word only參數中,則無所謂順序,因為都必須通過關鍵字傳參

def test(x, y, *args, z=4, s, **kwargs):# z 和 s 是key-word only形式參數
	print(x,y,args, z, s, kwargs)
test(3, 2, 5, z=5, s=4, y=7) # 3給了x,2給了y, 5給了args,z=5和s=4給了z和s,y=7給了kwargs

因為key-word only參數只能放在*args后面,如果我們定義時,不想設置可變位置參數,但是需要key-word only參數,只需要在key-word only參數之前加一個 *

def a(x, *, w): # w是key-word only參數
	print(x,w)

a(6, w =3) # w只能使用keyword傳參方式

總結:

def func(x, y, *args, z=4, e, **kwargs):

我們把這個定義的形式記住即可,即函數定義時,形式參數有五種,傳參時兩種,多寫代碼測試就能記住靈活使用了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM