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