python允許在形參前面添加一個星號(*),這樣就意味著該參數可接收多個參數值,多個參數值被當成元組傳入。
下面程序定義了一個形參個數可變的函數:
#定義了支持參數收集的函數
deftest(a,*books):
print(books)
#books被當成元組處理
forbinbooks:
print(b)
#輸出整數變量a的值
print(a)
#調用test()函數
test(5,"千鋒","Python教程")
運行上面程序,將看到如下運行結果:
('千鋒','Python教程')
千鋒
Python教程
5
從上面的運行結果可以看出,當調用test()函數時,books參數可以傳入多個字符串作為參數值。從test()的函數體代碼來看,參數收集的本質就是一個元組:Python會將傳給books參數的多個值收集成一個元組。
Python允許個數可變的形參可以處于形參列表的任意位置(不要求是形參列表的最后一個參數),但Python要求一個函數最多只能帶一個支持“普通”參數收集的形參。例如如下程序:
#定義了支持參數收集的函數
deftest(*books,num):
print(books)
#books被當成元組處理
forbinbooks:
print(b)
print(num)
#調用test()函數
test("千鋒","Python教程",num=20)
正如從上面程序中所看到的,test()函數的第一個參數就是個數可變的形參,由于該參數可接收個數不等的參數值,因此如果需要給后面的參數傳入參數值,則必須使用關鍵字參數,否則程序會把所傳入的多個值都當成是傳給books參數的。
Python還可以收集關鍵字參數,此時Python會將這種關鍵字參數收集成字典。為了讓Python能收集關鍵字參數,需要在參數前面添加兩個星號。在這種情況下,一個函數可同時包含一個支持“普通”參數收集的參數和一個支持關鍵字參數收集的參數。例如如下代碼:
#定義了支持參數收集的函數
deftest(x,y,z=3,*books,**scores):
print(x,y,z)
print(books)
print(scores)
test(1,2,3,"千鋒","Python教程",語文=89,數學=94)
上面程序在調用test()函數時,前面的1、2、3將會傳給普通參數x、y、z;接下來的兩個字符串將會由books參數收集成元組;最后的兩個關鍵字參數將會被收集成字典。運行上面代碼,會看到如下輸出結果:
123
('千鋒','Python教程')
{'語文':89,'數學':94}
對于以上面方式定義的test()函數,參數z的默認值幾乎不能發揮作用。比如按如下方式調用test()函數:
test(1,2,"千鋒","Python教程",語文=89,數學=94)
如果希望讓z參數的默認值發揮作用,則需要只傳入兩個位置參數。例如如下調用代碼:
test(1,2,語文=89,數學=94)
以上內容為大家介紹了python培訓之可變參數怎么傳值,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。