python可变参数和关键字参数位置_python 参数笔记 -- 位置参数 关键字参数 命名参数 形式参数 默认参数 可变参数 可选参数 位置顺序...
這么多名稱,python到底有幾種參數:
2種:普通參數(即位置參數,靠位置先后來指定參數),關鍵字參數(即命名參數,靠名字來指定參數)。
常說的可變參數也就是普參的集合,*args。
常說的關鍵字參數一般指關鍵字參數集合,**kwargs。
參數優先級:普通參數(位參)> 普參集 > 關鍵字參數 > 關參集:
def add(a, *args, b=2, **kwargs):print('a:', a)#普通參數print('args:', args)#普參集print('b:', b)#關鍵字參數,在定義函數時使用就是默認參數print('kwargs:', kwargs)#關參集
add(1, 2, 3, b=4, c=5, d=6)
輸出>>a: 1args: (2, 3)
b:4kwargs: {'c': 5, 'd': 6}
具體如下:
形參:形式參數:parameter;(在定義函數時指定的參數形式,區別于實參,跟位參關參等不在一個維度。如:
defadd(a,b): #這里的a,b為形參(換個維度也可以稱為位置參數)return a+b
實參:實際參數(或直接稱參數,以下同理):argument(簡:arg,復:args);(在調用函數時指定的參數值,如:
c = add(1, 2) #這里的1,2為實參(換個維度也可以稱為位置參數)
參考:
默認參數:形參里的關鍵字參,如
def c(a=1, b): #a為默認參,b為位參pass
可變參數:即可選參數,即參數集,如*args,**kwargs, 即調用函數時可隨意填入*args,**kwargs中的0個或多個,具體參考下文。
普通參數:即位置參數,最普通常用的參數形式, 區別于關鍵字參數,顧名思義,是靠位置來明確參數指定的。即不靠名字標識符,就一個光桿。
位置參數集:把位參打包,放入*args元組;(args只是名稱,可換成其他任意合法標識符,如:*my_args)
def c(*my_argsss): #類型被指定為元組
print(type(my_argsss))
c(1,2)
輸出>>
c(1)
輸出>>
命名實參:關鍵字參數:keyword_argument(簡:kwarg,復:kwargs);(區別于位參,關參靠名字來指定參數,在定義函數和調用函數的時候指定了名字(標識符),如:
def add(a, b=1): #a為位參,b為默認參(注意順序,不能把位參放到關鍵參后面)
return a+b
add(2, b=5) #調用的時候,b=5就是關鍵參,這里b為標識符(identifier)
def c(**k):
print(type(k)) #類型被指定為字典
c(a=1, b=2) #a,b為標識符
輸出>>
c(**{'a':1,'b':2})
輸出>>
c({'a':1,'b':2})
輸出>>TypeError: c() takes 0 positional arguments but 1 was given(類型錯誤:c()未定義位置參數,但接收到了 1 個位置參數)
#{'a':1,'b':2}被當成一個參數,這個參數是字典,這個字典沒有標識符,所以是位參;
#**{'a':1,'b':2}被解析成多個參數,參數是字典里的key=value,標識符為key,實參為value
命名實參集:關鍵字參數集:**kwargs;(kwargs只是名稱,可換成其他任意合法標識符,如:**some_kws。具體如下:
defadd(a, b):return a +b
add(a=1, b=2)
輸出>>3add(**{'a':1,'b':2})
輸出>>3
def add(**k):
returnk['a']+k['b']
add(a=1,b=2)
輸出>>3add(**{'a':1,'b':2})
輸出>>3
總結
以上是生活随笔為你收集整理的python可变参数和关键字参数位置_python 参数笔记 -- 位置参数 关键字参数 命名参数 形式参数 默认参数 可变参数 可选参数 位置顺序...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux的实际操作:Linux的分区
- 下一篇: JAVA进阶教学之(序列化和反序列化)