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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python函数的非固定参数

發布時間:2025/3/20 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python函数的非固定参数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

在上一篇博客中我已經寫了,位置參數和關鍵字參數,下面我們來談談默認參數和參數組

二、默認參數

默認參數指的是,我們在傳參之前,先給參數制定一個默認的值。當我們調用函數時,默認參數是非必須傳遞的。

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def test(x,y=2):print(x)print(y)print("-----data1----") test(1) #沒有給默認參數傳值 print("-----data2----") test(1,3) #給默認參數傳位置參數 print("-----data3----") test(1,y=3) #給默認參數傳關鍵字參數#輸出 -----data1---- 1 2 -----data2---- 1 3 -----data3---- 1 3

默認參數用途:

  • 安裝默認軟件(def test(x,soft=True))
  • 傳遞一下默認的值(定義mysql的默認端口號:def count(host,port=3306))

三、參數組

之前我們傳參數,都是傳一個固定參數,不能多也不能少,但是如果說我們需要非固定參數怎么辦呢?好吧,于是就衍生出了,以下兩種傳參方式:

  • 非固定位置參數傳參(*args)
  • 非固定關鍵字傳參(**kwargs)
  • 下面我們就來說說這兩種方式傳參:

    1、非固定位置參數傳參

    ①功能:接收N個位置參數,轉換成元組的形式。

    ②定義,代碼如下:

    ''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def test(*args): #形參必須以*開頭,args參數名隨便定義,但是最好按規范來,定義成argsprint(args)test(1,2,3,4,5) #輸入多個位置參數#輸出 (1, 2, 3, 4, 5) #多個參數轉換成元組

    這邊不禁的有個疑問,你這是傳入的都是N個位置參數,那我要傳入一整個列表咋辦,我要完全的獲取這個列表的值。

    ③傳入列表

    def test(*args):print(args)print("-------data1-----") test() #如果什么都不傳入的話,則輸出空元組 print("-------data2-----") test(*[1,2,3,4,5]) #如果在傳入的列表的前面加*,輸出的args = tuple([1,2,3,4,5]) print("-------data3-----") test([1,2,3,4,5]) #如果再傳入的列表前不加*,則列表被當做單個位置參數,所以輸出的結果是元組中的一個元素#輸出 -------data1----- () -------data2----- (1, 2, 3, 4, 5) -------data3----- ([1, 2, 3, 4, 5],)

    ④位置參數和非固定位置參數

    ''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def test(x,*args):print(x) #位置參數print(args) #非固定參數test(1,2,3,4,5,6)#輸出 1 (2, 3, 4, 5, 6)

    從上面看出,第1個參數,被當做位置參數,剩下的被當做非固定位置參數。

    ⑤關鍵字和非固定位置參數

    def test(x,*args):print(x)print(args)test(x=1,2,3,4,5,6)#輸出File "D:/PycharmProjects/pyhomework/day3/非固定參數/非關鍵字參數.py", line 21test(x=1,2,3,4,5,6)^ SyntaxError: positional argument follows keyword argument #位置參數在關鍵字參數后面

    很顯然報錯了,因為x=1是關鍵字參數,*args是位置參數,而關鍵字參數不能再位置參數前面的,所以報錯。

    2、非固定關鍵字傳參

    ①**功能:**把N個關鍵字參數,轉換成字典形式

    ②定義,代碼如下:

    ''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def test(**kwargs): #形參必須以**開頭,kwargs參數名隨便定義,但是最好按規范來,定義成kwargsprint(kwargs)test(name="qigao",age=18) #傳入多個關鍵字參數#輸出 {'name': 'qigao', 'age': 18} #多個關鍵字參數轉換成字典

    ③傳入字典

    def test(**kwargs):print(kwargs)test(**{"name":"qigao","age":18}) #傳入字典時,一定要在字典前面加**,否則就會報錯#輸出 {'name': 'qigao', 'age': 18}

    然而,有些小伙伴說,我就不信,難道不加**,就會報錯,那為啥非固定位置參數不加*,為啥就不報錯吶?下面我們就用事實說話,代碼如下:

    ''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def test(**kwargs):print(kwargs)test({"name":"qigao","age":18})#輸出 Traceback (most recent call last):File "D:/PycharmProjects/pyhomework/day3/非固定參數/非固定關鍵字參數.py", line 9, in <module>test({"name":"qigao","age":18}) TypeError: test() takes 0 positional arguments but 1 was given #報類型錯誤,傳入的是位置參數

    因為傳入的字典被當做位置參數,所以被報類型錯誤,所以小伙伴們千萬要記住:傳字典,加**

    ④配合位置參數使用

    def test(name,**kwargs):print(name)print(kwargs)print("------data1-----") test("qigao") #1個位置參數 print("------data2------") test("qigao",age=18,sex="M") #1個位置參數,兩個關鍵字參數 print("------data3------") test(name="qigao",age=18,sex="M") #3個關鍵字參數#輸出 ------data1----- qigao #輸出1個位置參數 {} #沒有輸入關鍵字參數,所以輸出空字典 ------data2------ qigao #第1個位置參數 {'age': 18, 'sex': 'M'} #剩下關鍵字參數,轉換成1個字典 ------data3------ qigao #第1個關鍵字參數 {'age': 18, 'sex': 'M'} #剩下的關鍵字參數,轉換成1個字典

    ⑤位置參數、關鍵字和非固定關鍵字參數

    提示:參數組一定要往最后放

    ''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def test(name,age=18,**kwargs):print(name)print(age)print(kwargs)print("----------data1--------") test("qigao",sex='M',hobby='tesl') print("----------data2--------") test("qigao",34,sex='M',hobby='tesl') print("----------data3--------") test("qigao",sex='M',hobby='tesl',age=34) #age關鍵字參數放到最后,也可以的#輸出 ----------data1-------- qigao 18 #不傳,顯示默認參數 {'sex': 'M', 'hobby': 'tesl'} ----------data2-------- qigao 34 #傳位置參數 {'sex': 'M', 'hobby': 'tesl'} ----------data3-------- qigao 34 #關鍵字參數,放在前后并沒有影響 {'sex': 'M', 'hobby': 'tesl'}

    注:就是說,如果遇到一個關鍵字傳參和非固定關鍵字傳參,前后放的位置是不影響傳參的,但是我們一般還是按順序來。

    ⑥位置參數、關鍵字參數、非固定位置參數和非固定關鍵字參數

    ''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def test(name,age=18,*args,**kwargs):print(name)print(age)print(args)print(kwargs)print("-------第1種傳參--------") test("qigao",19,1,2,3,4,sex="m",hobby="tesla") print("-------第2種傳參--------") test("qigao",19,*[1,2,3,4],**{'sex':"m",'hobby':"tesla"})#輸出 -------第1種傳參-------- qigao #傳name位置參數 19 #給age傳位置參數 (1, 2, 3, 4) #非固定位置參數,以轉換成元組 {'sex': 'm', 'hobby': 'tesla'} # 非固定關鍵字參數,轉換成字典 -------第2種傳參--------- qigao 19 (1, 2, 3, 4) #以列表的形式傳入,在列表前加* {'sex': 'm', 'hobby': 'tesla'} #以字典的形式傳入,在字典前加**

    那么問題來了,上面的age傳參傳的是位置參數,那我能不能傳關鍵字參數吶?現在我們就來看看,代碼如下:

    def test(name,age=18,*args,**kwargs):print(name)print(age)print(args)print(kwargs)test("qigao",age=19,1,2,3,4,sex="m",hobby="tesla")#輸出 File "D:/PycharmProjects/pyhomework/day3/非固定參數/非固定關鍵字參數.py", line 55test("qigao",age=19,1,2,3,4,sex="m",hobby="tesla")^ SyntaxError: positional argument follows keyword argument #語法錯誤,位置參數在關鍵字參數前面

    看來是不可以的,為什么?因為age=19是關鍵字參數,而后面的args是非固定位置參數,說白了不管args傳入幾個字,它的本質都是位置參數,上面我們提到關鍵字參數是不能再位置參數的前面,所以報錯了。

    看來上面的情況是不可以的,那能不能非固定關鍵字參數在非固定位置參數前面呢?來,我們帶著疑問一起來試一下。代碼如下:

    ''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def test(name,age=18,*args,**kwargs):print(name)print(age)print(args)print(kwargs)test("qigao",19,sex="m",hobby="tesla",1,2,3,4,5)#輸出File "D:/PycharmProjects/pyhomework/day3/非固定參數/非固定關鍵字參數.py", line 57test("qigao",19,sex="m",hobby="tesla",1,2,3,4,5)^ SyntaxError: positional argument follows keyword argument #語法錯誤,關鍵字參數在位置參數前面

    我擦咧,也是不可以的,經我仔細研究發現,非固定關鍵字參數,本質也是關鍵字參數,是不能放在非固定位置參數的前面的。

    四、總結

  • 參數分為位置參數、關鍵字參數、默認參數、非固定位置參數和非固定關鍵字參數
  • 位置參數之前傳參,位置是不能調換的,多一個或者少一個參數都是不可以的。
  • 關鍵字參數是不能放在位置參數前面的。
  • 函數傳參的位置一次是,位置參數,默認參數、非固定位置參數、非固定關鍵字參數(def test(name,age=18,*args,**kwargs))
  • 關鍵字傳參,可以不用考慮位置的前后問題
  • 總結

    以上是生活随笔為你收集整理的Python函数的非固定参数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。