在 python函數的聲明和調用 中我們簡單的了解了函數的相關使用,然而在函數傳遞參數的時候,我們埋下了一個坑,關於不定長參數的傳遞我們還沒有講,今天這篇文章主要就是講解這個問題。
一.函數不定長參數語法
函數的不定長參數包含*args和**kwargs,完整實例如下:
def function_print(*args,**kwargs): # 傳遞不定長參數,即參數個數不固定 print(args) print(kwargs) function_print()
輸出結果:
()
{}
代碼分析:由輸出結果可以看出來,第一個形參*args 是元組tuple類型,第二個形參**kwargs是字典dict類型.
1.*args的使用方法 :
a.形參 *args 類型是元組tuple,外部調用函數時傳遞的參數不論是整數還是BOOL值或者是字符串str,實際上傳遞的都是元組數據;
b.如果函數形參是不定長參數,外部調用函數傳遞多個參數時,默認按順序實參匹配形參,剩余的參數全部作為(元組)不定長參數傳遞;
c.如果沒有為函數的不定長參數傳遞參數,默認為空元組();
示例代碼如下:
#普通形參 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教程")
輸出結果:
普通形參 : 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.如果沒有為函數的不定長參數傳遞參數,默認為空字典{};
示例代碼如下:
#普通函數 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教程")
輸出結果:
普通函數形參 : 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
二.函數不定長參數實戰
# !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)
輸出結果:
False 1 () {'b': 23, 'h': 4, 'v': 5} hello world False (0, True) {'j': 'python教程', 'a': True}
注意:注意參數的順序匹配
三.重點總結
注意函數傳參的三種形式:
1.普通傳參
2.缺省參數,如果外部沒有為缺省參數傳遞實參,形參等於默認值
3.注意不定長參數的拆包,普通實參打包為元組tuple類型,關鍵字參數打包為字典dict類型
猜你喜歡:
轉載請注明:猿說Python » python 函數不定長參數 *argc,**kargcs
