乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      七、Python可變參數(shù)函數(shù)用法詳解

       星光閃亮圖書館 2019-08-08
      很多編程語言都允許定義個(gè)數(shù)可變的參數(shù),這樣可以在調(diào)用函數(shù)時(shí)傳入任意多個(gè)參數(shù)。Python 也不例外,在定義函數(shù)時(shí)也可以使用可變參數(shù)。

      可變參數(shù),又稱不定長參數(shù),即傳入函數(shù)中的實(shí)際參數(shù)可以是任意多個(gè)。Python 定義可變參數(shù),主要有以下 2 種形式。

      1) 可變參數(shù):形參前添加一個(gè) '*'

      此種形式的語法格式如下所示:

      *parameter

      其中,parameter 表示形參名。這種形式表示接受任意多個(gè)實(shí)際參數(shù),并將其放到一個(gè)元組中。

      下面程序定義了一個(gè)形參個(gè)數(shù)可變的函數(shù):
      1. # 定義了支持參數(shù)收集的函數(shù)
      2. def test(a, *books) :
      3. print(books)
      4. # books被當(dāng)成元組處理
      5. for b in books :
      6. print(b)
      7. # 輸出整數(shù)變量a的值
      8. print(a)
      9. # 調(diào)用test()函數(shù)
      10. test(5 , "C語言中文網(wǎng)" , "Python教程")
      運(yùn)行上面程序,將看到如下運(yùn)行結(jié)果:

      ('C語言中文網(wǎng)', 'Python教程')
      C語言中文網(wǎng)
      Python教程
      5

      從上面的運(yùn)行結(jié)果可以看出,當(dāng)調(diào)用 test() 函數(shù)時(shí),books 參數(shù)可以傳入多個(gè)字符串作為參數(shù)值。從 test() 的函數(shù)體代碼來看,參數(shù)收集的本質(zhì)就是一個(gè)元組: Python 會將傳給 books 參數(shù)的多個(gè)值收集成一個(gè)元組。

      Python 允許個(gè)數(shù)可變的形參可以處于形參列表的任意位置(不要求是形參列表的最后一個(gè)參數(shù)),例如如下程序:
      1. # 定義了支持參數(shù)收集的函數(shù)
      2. def test(*books ,num) :
      3. print(books)
      4. # books被當(dāng)成元組處理
      5. for b in books :
      6. print(b)
      7. print(num)
      8. # 調(diào)用test()函數(shù)
      9. test("C語言中文網(wǎng)", "Python教程", num = 20)
      正如從上面程序中所看到的,test() 函數(shù)的第一個(gè)參數(shù)就是個(gè)數(shù)可變的形參,由于該參數(shù)可接收個(gè)數(shù)不等的參數(shù)值,因此如果需要給后面的參數(shù)傳入?yún)?shù)值,則必須使用關(guān)鍵字參數(shù),否則程序會把所傳入的多個(gè)值都當(dāng)成是傳給 books 參數(shù)的。

      2) 可變參數(shù):形參前添加兩個(gè)'*'

      這種形式的語法格式如下:

      **parameter

      其中,parameter 表示形參名。這種形式可以接收任意多個(gè)以關(guān)鍵字參數(shù)賦值的實(shí)際參數(shù),并將其放到一個(gè)字典中。

      例如如下代碼:
      1. # 定義了支持參數(shù)收集的函數(shù)
      2. def test(x, y, z=3, *books, **scores) :
      3. print(x, y, z)
      4. print(books)
      5. print(scores)
      6. test(1, 2, 3, "C語言中文網(wǎng)" , "Python教程", 語文=89, 數(shù)學(xué)=94)
      上面程序在調(diào)用 test() 函數(shù)時(shí),前面的 1、2、3 將會傳給普通參數(shù) x、y、z;接下來的兩個(gè)字符串將會由 books 參數(shù)收集成元組;最后的兩個(gè)關(guān)鍵字參數(shù)將會被收集成字典。運(yùn)行上面代碼,會看到如下輸出結(jié)果:

      1 2 3
      ('C語言中文網(wǎng)', 'Python教程')
      {'語文': 89, '數(shù)學(xué)': 94}


      這里需要注意一點(diǎn),對于以上面方式定義的 test() 函數(shù),參數(shù) z 的默認(rèn)值幾乎不能發(fā)揮作用。比如按如下方式調(diào)用 test() 函數(shù):

      test(1, 2, "C語言中文網(wǎng)" , "Python教程", 語文=89, 數(shù)學(xué)=94)

      上面代碼在調(diào)用 test() 函數(shù)時(shí),前面的 1、2、"C語言中文網(wǎng)" 將會傳遞給普通參數(shù) x、y、z;接下來的一個(gè)字符串將會由 books 參數(shù)收集成元組;最后的兩個(gè)關(guān)鍵字參數(shù)將會被收集成字典。運(yùn)行上面代碼,會看到如下輸出結(jié)果:

      1 2 C語言中文網(wǎng)
      ('Python教程',)
      {'語文': 89, '數(shù)學(xué)': 94}


      如果希望讓 z 參數(shù)的默認(rèn)值發(fā)揮作用,則需要只傳入兩個(gè)位置參數(shù)。例如如下調(diào)用代碼:

      test(1, 2, 語文=89, 數(shù)學(xué)=94)

      上面代碼在調(diào)用 test() 函數(shù)時(shí),前面的 1、2 將會傳給普通參數(shù) x、y,此時(shí) z 參數(shù)將使用默認(rèn)的參數(shù)值 3,books 參數(shù)將是一個(gè)空元組;接下來的兩個(gè)關(guān)鍵字參數(shù)將會被收集成字典。運(yùn)行上面代碼,會看到如下輸出結(jié)果:

      1 2 3
      ()
      {'語文': 89, '數(shù)學(xué)': 94}

      逆向參數(shù)收集

      所謂逆向參數(shù)收集,指的是在程序己有列表、元組、字典等對象的前提下,把它們的元素“拆開”后傳給函數(shù)的參數(shù)。逆向參數(shù)收集需要在傳入的列表、元組參數(shù)之前添加一個(gè)星號,在字典參數(shù)之前添加兩個(gè)星號。例如如下代碼:
      1. def test(name, message):
      2. print("用戶是: ", name)
      3. print("歡迎消息: ", message)
      4. my_list = ['孫悟空', '歡迎來C語言中文網(wǎng)']
      5. test(*my_list)
      程序中定義了一個(gè)需要兩個(gè)參數(shù)的函數(shù),而 my_list 列表包含兩個(gè)元素,為了讓程序?qū)?my_list 列表的兩個(gè)元素傳給 test() 函數(shù),程序在傳入的 my_list 參數(shù)之前添加了一個(gè)星號。

      實(shí)際上,即使是可變參數(shù),如果程序需要將一個(gè)元組傳給該參數(shù),那么同樣需要使用逆向收集。例如如下代碼:
      1. def foo(name, *nums):
      2. print("name參數(shù): ", name)
      3. print("nums參數(shù): ", nums)
      4. my_tuple = (1, 2, 3)
      5. # 使用逆向收集,將my_tuple元組的元素傳給nums參數(shù)
      6. foo('fkit', *my_tuple)
      上面程序中,調(diào)用將‘fkit’傳給 foo() 函數(shù)的 name 參數(shù),然后使用逆向收集將 my_tuple 包含的多個(gè)元素傳給 nums 參數(shù),nums 再將 my_tuple 的多個(gè)元素收集成元組。

      運(yùn)行上面代碼,將看到如下輸出結(jié)果:

      name參數(shù):  fkit
      nums參數(shù):  (1, 2, 3)


      此外,也可使用如下方式調(diào)用 foo() 函數(shù):
      1. # 使用逆向收集,將my_tuple元組的第一個(gè)元素傳給name參數(shù),剩下參數(shù)傳給nums參數(shù)
      2. foo(*my_tuple)
      此時(shí)程序會對 my_tuple 進(jìn)行逆向收集,其中第一個(gè)元素傳給 name參數(shù),后面剩下的元素傳給 nums 參數(shù)。運(yùn)行上面代碼,將看到如下輸出結(jié)果:

      name參數(shù):  1
      nums參數(shù):  (2, 3)


      如果不使用逆向收集(不在元組參數(shù)之前添加星號),整個(gè)元組將會作為一個(gè)參數(shù),而不是將元組的元素作為多個(gè)參數(shù)。例如按如下方式調(diào)用 foo() 函數(shù):
      1. # 不使用逆向收集,my_tuple元組整體傳給name參數(shù)
      2. foo(my_tuple)
      上面調(diào)用沒有使用逆向收集,因此 my_tuple 整體作為參數(shù)值傳給 name 參數(shù)。運(yùn)行上面代碼,將看到如下輸出結(jié)果:

      name參數(shù):  (1, 2, 3)
      nums參數(shù):  ()

       

      字典也支持逆向收集,字典將會以關(guān)鍵字參數(shù)的形式傳入。例如如下代碼:

      1. def bar(book, price, desc):
      2. print(book, "VIP價(jià)格是:", price)
      3. print('描述信息', desc)
      4. my_dict = {'price': 159, 'book': 'C語言中文網(wǎng)', 'desc': '這是一個(gè)精美而實(shí)用的網(wǎng)站'}
      5. # 按逆向收集的方式將my_dict的多個(gè)key-value傳給bar()函數(shù)
      6. bar(**my_dict)
      上面程序中,bar() 需要三個(gè)參數(shù)。接下來程序定義了一個(gè) my_dict 字典,該字典正好包含三個(gè) key-value 對,程序使用逆向收集即可將 my_dict 包含的三個(gè) key-value 對以關(guān)鍵字參數(shù)的形式傳給 bar() 函數(shù)。

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多