Python函数的动态参数
1. 動(dòng)態(tài)接收位置參數(shù)
在參數(shù)位置用*表示接受任意參數(shù)
def eat(*args):print('我想吃',args)eat('大米飯','中米飯','小米飯') # 收到的結(jié)果是一個(gè)tuple元祖動(dòng)態(tài)接收參數(shù)的時(shí)候要注意: 動(dòng)態(tài)參數(shù)必須在位置參數(shù)后面
def eat(*args,a,b):print('我想吃',args,a,b)eat('大米飯','中米飯','小米飯')結(jié)果:TypeError: eat() missing 2 required keyword-only arguments: 'a' and 'b' # eat函數(shù)在調(diào)用的時(shí)候發(fā)現(xiàn)缺少倆個(gè)位置參數(shù)沒有進(jìn)行傳遞通過上述代碼發(fā)現(xiàn)一個(gè)問題就是,我們明明給了多個(gè)參數(shù),為什么還會(huì)提示參數(shù)未傳遞呢?
原因就是因?yàn)檫@個(gè)在搞鬼 \把所有的位置參數(shù)都給接受了,所有會(huì)報(bào)錯(cuò).我們嘗試著把a(bǔ),b放在*的前面試試
''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' def eat(a,b,*args):print('我想吃',args,a,b)eat('大米飯','中米飯','小米飯')結(jié)果:我想吃 ('小米飯',) 大米飯 中米飯動(dòng)態(tài)接收參數(shù)的時(shí)候要注意:動(dòng)態(tài)參數(shù)必須在位置參數(shù)后面
那默認(rèn)值參數(shù)呢?
def eat(a,b,c='白菜',*args):print('我想吃',a,b,c,args)eat('豆腐','粉條','豬肉','大蔥')結(jié)果:我想吃 豆腐 粉條 豬肉 ('大蔥',) # 我們定義好的白菜沒有生效,被豬肉給覆蓋了我們發(fā)現(xiàn)默認(rèn)值參數(shù)寫在動(dòng)態(tài)參數(shù)前面,默認(rèn)值的參數(shù)是不會(huì)生效的
def eat(a,b,*args,c='白菜'):print('我想吃',a,b,args,c)eat('豬肉','粉條','豆腐','大蔥')結(jié)果:我想吃 豬肉 粉條 ('豆腐', '大蔥') 白菜 # 這樣默認(rèn)參數(shù)就生效了這個(gè)時(shí)候如果你不給出關(guān)鍵字傳參,那么你的默認(rèn)值是永遠(yuǎn)都生效的
注意: 形參的順序: 位置參數(shù) , 動(dòng)態(tài)參數(shù) , 默認(rèn)參數(shù)
2 動(dòng)態(tài)接收關(guān)鍵字參數(shù)
在python中可以動(dòng)態(tài)的位置參數(shù),但是這種情況只能接收位置參數(shù)無法接收關(guān)鍵字參數(shù),在python中使用*來接收動(dòng)態(tài)關(guān)鍵字參數(shù)
''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' def func(**kwargs):print(kwargs) func(a=1, b=2, c=3)結(jié)果:{'a': 1, 'b': 2, 'c': 3}動(dòng)態(tài)關(guān)鍵字參數(shù)最后獲取的是一個(gè)dict字典形式
順序的問題, 在函數(shù)調(diào)用的時(shí)候, 如果先給出關(guān)鍵字參數(shù), 則整個(gè)參數(shù)列表會(huì)報(bào)錯(cuò).
def func(a,b,c,d):print(a,b,c,d)func(1,2,c=3,4)結(jié)果:File "D:/python_object/path2/test.py", line 806func(1,2,c=3,4) ^SyntaxError: positional argument follows keyword argum關(guān)鍵參數(shù)必須要放在位置參數(shù)后邊,由于實(shí)參是這個(gè)順序,所以形參接收的時(shí)候也是這個(gè)順序.也就是說位置參數(shù)必須在關(guān)鍵字參數(shù)前面.動(dòng)態(tài)接收關(guān)鍵字參數(shù)也要在后面
最終順序:
- 位置參數(shù) > args(動(dòng)態(tài)位置參數(shù)) > 默認(rèn)值參數(shù) > *kwargs(動(dòng)態(tài)默認(rèn)參數(shù))
- 這四種參數(shù)可以任意的使用
如果想接收所有的參數(shù):
def func(*args,**kwargs):print(args,kwargs)func(1,23,5,a=1,b=6)動(dòng)態(tài)參數(shù)還可以這樣傳參:
lst = [1,4,7] # 方法一 def func(*args):print(args) func(lst[0],lst[1],lst[2])# 方法二 def func(*args):print(args) func(*lst) # 在實(shí)參的位置上用*將lst(可迭代對(duì)象)按照順序打散 # 在形參的位置上用*把收到的參數(shù)組合成一個(gè)元祖字典也可以進(jìn)行打散,不過需要
dic = {'a':1,'b':2} def func(**kwargs):print(kwargs) func(**dic)總結(jié)
以上是生活随笔為你收集整理的Python函数的动态参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python实现字符串反转的几种方法
- 下一篇: Python 可执行对象