日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python函数的动态参数

發(fā)布時(shí)間:2025/3/20 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python函数的动态参数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。