19.python 不定長參數 *argc,**kargcs
- 2020 年 3 月 12 日
- 筆記
19.python 不定長參數 *argc,**kargcs
最後更新於:2019-10-24 08:44:14
在 python函數的聲明和調用 中我們簡單的了解了函數的相關使用,然而在函數傳遞參數的時候,我們埋下了一個坑,關於不定長參數的傳遞我們還沒有講,今天這篇文章主要就是講解這個問題。

一.函數不定長參數語法
函數的不定長參數包含*args和**kwargs,完整實例如下:
Python
def function_print(*args,**kwargs): # 傳遞不定長參數,即參數個數不固定 print(args) print(kwargs) function_print()
12345 |
def function_print(*args,**kwargs): # 傳遞不定長參數,即參數個數不固定 print(args) print(kwargs) function_print() |
---|
輸出結果:
Python
() {}
12 |
(){} |
---|
程式碼分析:由輸出結果可以看出來,第一個形參*args 是元組tuple類型,第二個形參**kwargs是字典dict類型.
1.*args的使用方法 :
a.形參 *args 類型是元組tuple,外部調用函數時傳遞的參數不論是整數還是BOOL值或者是字元串str,實際上傳遞的都是元組數據;
b.如果函數形參是不定長參數,外部調用函數傳遞多個參數時,默認按順序實參匹配形參,剩餘的參數全部作為(元組)不定長參數傳遞;
c.如果沒有為函數的不定長參數傳遞參數,默認為空元組();
示例程式碼如下:
Python
#普通形參 def function_print1(arg): print("普通形參 : arg=",arg) #不定長形參 def function_print2(*args): print("不定長形參 : args=",args) #普通形參 + 不定長形參 def function_print3(arg,*args): print("普通形參 + 不定長形參 : arg=",arg) print("普通形參 + 不定長形參 : args=",args) function_print1(False) function_print1("hello world") print("***"*20) function_print2(False) function_print2("hello world") print("***"*20) function_print3(False) # 只為函數傳遞了一個形參,不定長參數的形參默認為空元組() function_print3("hello world") print("***"*20) # 如果函數的形參是不定長參數,當外部調用函數傳遞多個參數時,默認按順序匹配形參,剩餘的參數全部作為不定長參數傳遞 function_print3(False,1,23,4,5) function_print3("hello world",False,0,True,"python教程")
12345678910111213141516171819202122232425262728 |
#普通形參def function_print1(arg): print("普通形參 : arg=",arg) #不定長形參def function_print2(*args): print("不定長形參 : args=",args) #普通形參 + 不定長形參def function_print3(arg,*args): print("普通形參 + 不定長形參 : arg=",arg) print("普通形參 + 不定長形參 : args=",args) function_print1(False)function_print1("hello world")print("***"*20) function_print2(False)function_print2("hello world")print("***"*20) function_print3(False) # 只為函數傳遞了一個形參,不定長參數的形參默認為空元組()function_print3("hello world")print("***"*20) # 如果函數的形參是不定長參數,當外部調用函數傳遞多個參數時,默認按順序匹配形參,剩餘的參數全部作為不定長參數傳遞function_print3(False,1,23,4,5) function_print3("hello world",False,0,True,"python教程") |
---|
輸出結果:
Python
普通形參 : arg= False 普通形參 : arg= hello world ************************************************************ 不定長形參 : args= (False,) 不定長形參 : args= ('hello world',) ************************************************************ 普通形參 + 不定長形參 : arg= False 普通形參 + 不定長形參 : args= () 普通形參 + 不定長形參 : arg= hello world 普通形參 + 不定長形參 : args= () ************************************************************ 普通形參 + 不定長形參 : arg= False 普通形參 + 不定長形參 : args= (1, 23, 4, 5) 普通形參 + 不定長形參 : arg= hello world 普通形參 + 不定長形參 : args= (False, 0, True, 'python教程')
123456789101112131415 |
普通形參 : arg= False普通形參 : arg= hello world************************************************************不定長形參 : args= (False,)不定長形參 : args= ('hello world',)************************************************************普通形參 + 不定長形參 : arg= False普通形參 + 不定長形參 : args= ()普通形參 + 不定長形參 : arg= hello world普通形參 + 不定長形參 : args= ()************************************************************普通形參 + 不定長形參 : arg= False普通形參 + 不定長形參 : args= (1, 23, 4, 5)普通形參 + 不定長形參 : arg= hello world普通形參 + 不定長形參 : args= (False, 0, True, 'python教程') |
---|
2.**kwargs的使用方法
a.形參 **kwargs 類型是字典dict,函數外部調用函數傳遞參數時需要使用關鍵字參數,實參寫法:a=1,b=2,c=False,d=」hello」;
b.如果函數形參是不定長參數,外部調用函數傳遞多個參數時,默認按順序實參匹配形參,關鍵字參數全部作為(字典)不定長參數傳遞;
c.如果沒有為函數的不定長參數傳遞參數,默認為空字典{};
示例程式碼如下:
Python
#普通函數 def function_print1(arg): print("普通函數形參 : arg=",arg) #普通函數不定長形參 def function_print2(**kwargs): print("不定長形參 : args=",kwargs) #普通函數形參 + 不定長形參 def function_print3(arg,**kwargs): print("普通函數形參 + 不定長形參 : arg=",arg) print("普通函數形參 + 不定長形參 : args=",kwargs) function_print1(False) function_print1("hello world") print("***"*20) function_print2(a=False) function_print2(c="hello world") print("***"*20) function_print3(False) function_print3("hello world") print("***"*20) function_print3(False,a=1,b=23,h=4,v=5) function_print3("hello world",y=False,i=0,a=True,j="python教程")
123456789101112131415161718192021222324252627 |
#普通函數def function_print1(arg): print("普通函數形參 : arg=",arg) #普通函數不定長形參def function_print2(**kwargs): print("不定長形參 : args=",kwargs) #普通函數形參 + 不定長形參def function_print3(arg,**kwargs): print("普通函數形參 + 不定長形參 : arg=",arg) print("普通函數形參 + 不定長形參 : args=",kwargs) function_print1(False)function_print1("hello world")print("***"*20) function_print2(a=False)function_print2(c="hello world")print("***"*20) function_print3(False)function_print3("hello world")print("***"*20) function_print3(False,a=1,b=23,h=4,v=5)function_print3("hello world",y=False,i=0,a=True,j="python教程") |
---|
輸出結果:
Python
普通函數形參 : arg= False 普通函數形參 : arg= hello world ************************************************************ 不定長形參 : args= {'a': False} 不定長形參 : args= {'c': 'hello world'} ************************************************************ 普通函數形參 + 不定長形參 : arg= False 普通函數形參 + 不定長形參 : args= {} 普通函數形參 + 不定長形參 : arg= hello world 普通函數形參 + 不定長形參 : args= {} ************************************************************ 普通函數形參 + 不定長形參 : arg= False 普通函數形參 + 不定長形參 : args= {'a': 1, 'b': 23, 'h': 4, 'v': 5} 普通函數形參 + 不定長形參 : arg= hello world 普通函數形參 + 不定長形參 : args= {'y': False, 'i': 0, 'a': True, 'j': 'python教程'}
123456789101112131415 |
普通函數形參 : arg= False普通函數形參 : arg= hello world************************************************************不定長形參 : args= {'a': False}不定長形參 : args= {'c': 'hello world'}************************************************************普通函數形參 + 不定長形參 : arg= False普通函數形參 + 不定長形參 : args= {}普通函數形參 + 不定長形參 : arg= hello world普通函數形參 + 不定長形參 : args= {}************************************************************普通函數形參 + 不定長形參 : arg= False普通函數形參 + 不定長形參 : args= {'a': 1, 'b': 23, 'h': 4, 'v': 5}普通函數形參 + 不定長形參 : arg= hello world普通函數形參 + 不定長形參 : args= {'y': False, 'i': 0, 'a': True, 'j': 'python教程'} |
---|
3.函數不定長參數*args和**kwargs只能放在形參的末尾,順序不能錯.
def function_print(arg1,*args,**kwargs): # *args,**kwargs 必須在形參的末尾,順序不能亂 pass
12 |
def function_print(arg1,*args,**kwargs): # *args,**kwargs 必須在形參的末尾,順序不能亂 pass |
---|

二.函數不定長參數實戰
Python
# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(個人部落格地址): shuopython.com @WeChat Official Account(微信公眾號):猿說python @Github:www.github.com @File:python_args.py @Time:2019/10/3 21:48 @Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累! """ ''' 普通函數形參 + 不定長形參: arg1:普通形參 arg1:普通形參 args:不定長參數-元組 kwargs:不定長參數-字典 ''' def function_print(arg1,arg2,*args,**kwargs): print(arg1,arg2,args,kwargs) function_print(False,1,b=23,h=4,v=5) function_print("hello world",False,0,True,j="python教程",a=True)
123456789101112131415161718192021222324252627 |
# !usr/bin/env python# -*- coding:utf-8 _*-"""@Author:何以解憂@Blog(個人部落格地址): shuopython.com@WeChat Official Account(微信公眾號):猿說python@Github:www.github.com @File:python_args.py@Time:2019/10/3 21:48 @Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!""" '''普通函數形參 + 不定長形參: arg1:普通形參 arg1:普通形參 args:不定長參數-元組 kwargs:不定長參數-字典''' def function_print(arg1,arg2,*args,**kwargs): print(arg1,arg2,args,kwargs) function_print(False,1,b=23,h=4,v=5)function_print("hello world",False,0,True,j="python教程",a=True) |
---|
輸出結果:
Python
False 1 () {'b': 23, 'h': 4, 'v': 5} hello world False (0, True) {'j': 'python教程', 'a': True}
12 |
False 1 () {'b': 23, 'h': 4, 'v': 5}hello world False (0, True) {'j': 'python教程', 'a': True} |
---|
注意:注意參數的順序匹配
三.重點總結
注意函數傳參的三種形式:
1.普通傳參
2.預設參數,如果外部沒有為預設參數傳遞實參,形參等於默認值
3.注意不定長參數的拆包,普通實參打包為元組tuple類型,關鍵字參數打包為字典dict類型