<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          徹底掌握Python函數(shù)的5種參數(shù)

          共 5303字,需瀏覽 11分鐘

           ·

          2021-03-22 15:21

           △點(diǎn)擊上方Python貓”關(guān)注 ,回復(fù)“1”領(lǐng)取電子書(shū)

          原文地址:5 Types of Arguments in Python Function Definition

          原文作者:Indhumathy Chelliah

          譯文出自:掘金翻譯計(jì)劃
          本文永久鏈接:https://github.com/xitu/gold-miner/blob/master/article/2020/5-types-of-arguments-in-python-function-definition.md
          譯者:Zhengjian-L

          Python 函數(shù)定義:

          關(guān)鍵字 def 引入一個(gè)函數(shù)定義。它后面必須跟著函數(shù)名稱(chēng)和帶括號(hào)的形式參數(shù)列表。構(gòu)成函數(shù)體的語(yǔ)句從下一行開(kāi)始,并且必須縮進(jìn)。

          在定義的函數(shù)中需要提及形式參數(shù)實(shí)際參數(shù)在函數(shù)調(diào)用時(shí)傳遞。

          我們可以用各種參數(shù)來(lái)定義函數(shù)。

          1. 缺省參數(shù)

          • 缺省參數(shù)是在定義函數(shù)時(shí)提供的值。
          • 賦值符號(hào)=用于聲明參數(shù)的默認(rèn)值。
          • 在調(diào)用函數(shù)時(shí),參數(shù)默認(rèn)值是可變更項(xiàng)。
          • 如果在調(diào)用函數(shù)時(shí)提供缺省參數(shù)的值,這個(gè)值會(huì)替代默認(rèn)值。
          • 一個(gè)函數(shù)可以有任意數(shù)量的缺省參數(shù)。
          • 缺省參數(shù)要在非缺省參數(shù)之后。

          例:b,c在下面的例子中,參數(shù)b,c指定了默認(rèn)值。

          def add(a,b=5,c=10):
              return (a+b+c)

          這個(gè)函數(shù)有三種調(diào)用方式

          (1)只給出必需參數(shù)

          print(add(3))
          #Output:18

          (2)給出一個(gè)可選的參數(shù) 3 賦值給 a, 4 賦值給 b。

          print(add(3,4))
          #Output:14

          (3)給出所有參數(shù)

          print(add(2,3,4))
          #Output:9

          注意: 默認(rèn)值在函數(shù)定義處的定義過(guò)程中只會(huì)計(jì)算一次。因此,在把如列表、字典等可變對(duì)象作為默認(rèn)值時(shí)會(huì)有些許不同。

          2. 關(guān)鍵字參數(shù)

          也可以使用形如kwarg=value的關(guān)鍵字參數(shù)來(lái)調(diào)用函數(shù)。

          在調(diào)用函數(shù)時(shí),參數(shù)值并不需要與函數(shù)定義中的參數(shù)順序相同。這可以通過(guò)關(guān)鍵字參數(shù)實(shí)現(xiàn)。但所有的關(guān)鍵字參數(shù)必須與函數(shù)定義中的參數(shù)一一對(duì)應(yīng)。

          def add(a,b=5,c=10):
              return (a+b+c)

          調(diào)用函數(shù) function add 時(shí)提供關(guān)鍵字參數(shù)

          (1)所有的參數(shù)都是關(guān)鍵字參數(shù),因此不需要固定順序。

          print (add(b=10,c=15,a=20))
          #Output:45

          (2)調(diào)用函數(shù)時(shí),只給出必要參數(shù)作為關(guān)鍵字參數(shù),可選缺省參數(shù)就會(huì)跳過(guò)。

          print (add(a=10))
          #Output:25

          3. 位置參數(shù)

          調(diào)用函數(shù)時(shí),參數(shù)傳遞的值的順序和形式參數(shù)的順序需要對(duì)應(yīng)。這稱(chēng)之為位置參數(shù)。位置參數(shù)之后只能是關(guān)鍵字參數(shù)。

          def add(a,b,c):
              return (a+b+c)

          上面的函數(shù)有兩種調(diào)用的方式:

          (1)調(diào)用函數(shù)時(shí),參數(shù)均為位置參數(shù)。參數(shù)傳遞的值會(huì)通過(guò)位置傳遞到對(duì)應(yīng)參數(shù)。10 賦值給a,20賦值給b30 賦值給 c

          print (add(10,20,30))
          #Output:60

          (2)在混合使用位置參數(shù)和關(guān)鍵字參數(shù)時(shí),關(guān)鍵字參數(shù)總是在位置參數(shù)之后。

          print (add(10,c=30,b=20))
          #Output:60

          缺省參數(shù)、位置參數(shù) 、關(guān)鍵字參數(shù)三者對(duì)比:


          關(guān)鍵要點(diǎn):

          1. 缺省參數(shù)需要在非缺省參數(shù)之后

          def add(a=5,b,c):
              return (a+b+c)

          #Output:SyntaxError: non-default argument follows default argument

          2. 關(guān)鍵字參數(shù)需要在位置參數(shù)之后

          def add(a,b,c):
              return (a+b+c)

          print (add(a=10,3,4))
          #Output:SyntaxError: positional argument follows keyword argument

          3. 所有傳遞的關(guān)鍵字參數(shù)必須有對(duì)應(yīng)參數(shù),并且順序不重要。

          def add(a,b,c):
              return (a+b+c)

          print (add(a=10,b1=5,c=12))
          #Output:TypeError: add() got an unexpected keyword argument 'b1'

          4. 參數(shù)只能賦值一次

          def add(a,b,c):
              return (a+b+c)

          print (add(a=10,b=5,b=10,c=12))
          #Output:SyntaxError: keyword argument repeated

          5. 缺省參數(shù)是可選參數(shù)

          例 1: 只給必要參數(shù)

          def add(a,b=5,c=10):
              return (a+b+c)

          print (add(2))
          #Output:17

          例 2: 給出所有參數(shù)(必要參數(shù)和可選參數(shù))

          def add(a,b=5,c=10):
              return (a+b+c)

          print (add(2,3,4))
          #Output:9

          可變長(zhǎng)度參數(shù)

          可變長(zhǎng)度參數(shù)也稱(chēng)為任意參數(shù)。如果我們事先不知道函數(shù)的參數(shù)數(shù)量,可以使用任意參數(shù)。

          兩種任意參數(shù)

          1. 任意位置參數(shù)
          2. 任意關(guān)鍵字參數(shù)

          4. 任意位置參數(shù)

          對(duì)于任意位置參數(shù),函數(shù)定義的參數(shù)前會(huì)有一個(gè)星號(hào)(*),該參數(shù)可以包含非關(guān)鍵字可變長(zhǎng)度參數(shù)。這些參數(shù)將包含在一個(gè)元組中。在可變數(shù)量的參數(shù)之前,可能會(huì)出現(xiàn)零個(gè)或多個(gè)普通參數(shù)。

          def add(*b):
              result=0
              for i in b:
                   result=result+i
              return result

          print (add(1,2,3,4,5))
          #Output:15

          print (add(10,20))
          #Output:30

          5.任意關(guān)鍵字參數(shù)

          對(duì)于任意關(guān)鍵字參數(shù),函數(shù)定義的參數(shù)前會(huì)有雙星號(hào)(*),該參數(shù)可以包含非關(guān)鍵字可變長(zhǎng)度參數(shù)。

          def fn(**a):
              for i in a.items():
                  print (i)
          fn(numbers=5,colors="blue",fruits="apple")
          '''
          Output:
          ('
          numbers', 5)
          ('
          colors', 'blue')
          ('
          fruits', 'apple')
          '
          ''

          特殊參數(shù):

          根據(jù) Python 手冊(cè)

          默認(rèn)情況下,函數(shù)的參數(shù)傳遞形式可以是位置參數(shù)或是顯式的關(guān)鍵字參數(shù)。為了確保可讀性和運(yùn)行效率,限制允許的參數(shù)傳遞形式是有意義的,這樣開(kāi)發(fā)者只需查看函數(shù)定義即可確定參數(shù)項(xiàng)是僅按位置、按位置也按關(guān)鍵字,還是僅按關(guān)鍵字傳遞。

          函數(shù)的定義看起來(lái)可以像是這樣:

          在這里/* 是可選的。如果使用這些符號(hào)則表明可以通過(guò)何種形參將參數(shù)值傳遞給函數(shù):僅限位置、位置或關(guān)鍵字,以及僅限關(guān)鍵字。

          1. 位置或關(guān)鍵字參數(shù)
          2. 僅限位置參數(shù)
          3. 僅限關(guān)鍵字參數(shù)

          (1) 位置或關(guān)鍵字參數(shù)

          如果函數(shù)定義中未使用 /*,則參數(shù)可以按位置或按關(guān)鍵字傳遞給函數(shù)。

          def add(a,b,c):
              return a+b+c

          print (add(3,4,5))
          #Output:12

          print (add(3,c=1,b=2))
          #Output:6

          (2) 僅限位置參數(shù)

          在定義的函數(shù)中,僅限位置參數(shù)要放在/(正斜杠)之前。這個(gè)/被用來(lái)從邏輯上分隔僅限位置形參和其他形參。在/之后的形參可以為位置或關(guān)鍵字或者僅限關(guān)鍵字

          def add(a,b,/,c,d):
              return a+b+c+d

          print (add(3,4,5,6))
          #Output:18

          print (add(3,4,c=1,d=2))
          #Output:10

          如果將關(guān)鍵字參數(shù)規(guī)定為僅限位置參數(shù),則會(huì)導(dǎo)致TypeError

          def add(a,b,/,c,d):
              return a+b+c+d

          print (add(3,b=4,c=1,d=2))
          #Output:TypeError: add() got some positional-only arguments passed as keyword arguments: 'b'

          (3)僅限關(guān)鍵字參數(shù)

          要將形參標(biāo)記為僅限關(guān)鍵字,應(yīng)在參數(shù)列表的第一個(gè)僅限關(guān)鍵字形參前放置一個(gè) *

          def add(a,b,*,c,d):
              return a+b+c+d

          print (add(3,4,c=1,d=2))
          #Output:10

          如果將位置參數(shù)規(guī)定為僅限關(guān)鍵字參數(shù),則會(huì)導(dǎo)致TypeError

          def add(a,b,*,c,d):
              return a+b+c+d

          print (add(3,4,1,d=2))
          #Output:TypeError: add() takes 2 positional arguments but 3 positional arguments (and 1 keyword-only argument) were given

          在同一個(gè)函數(shù)中的擁有三種參數(shù)的調(diào)用規(guī)則

          在下面的例子中,function add 擁有所有三種參數(shù)

          a,b — 僅限位置參數(shù) c - 位置或關(guān)鍵字參數(shù) d - 僅限關(guān)鍵字參數(shù)

          def add(a,b,/,c,*,d):
              return a+b+c+d

          print (add(3,4,1,d=2))
          #Output:10

          注意事項(xiàng):

          1. 當(dāng)你希望參數(shù)的名稱(chēng)對(duì)用戶(hù)不可用時(shí),則使用僅限位置。當(dāng)參數(shù)名稱(chēng)沒(méi)有實(shí)際意義時(shí),這很有用。
          2. 如果你想規(guī)定調(diào)用函數(shù)的參數(shù)數(shù)據(jù)時(shí),則使用僅限位置
          3. 當(dāng)名稱(chēng)有意義且定義的函數(shù)通過(guò)名稱(chēng)變得更易于理解時(shí),則使用僅限關(guān)鍵字
          4. 當(dāng)你想要避免用戶(hù)依賴(lài)傳遞的參數(shù)的位置時(shí),則使用僅限關(guān)鍵字
          Python貓技術(shù)交流群開(kāi)放啦!群里既有國(guó)內(nèi)一二線大廠在職員工,也有國(guó)內(nèi)外高校在讀學(xué)生,既有十多年碼齡的編程老鳥(niǎo),也有中小學(xué)剛剛?cè)腴T(mén)的新人,學(xué)習(xí)氛圍良好!想入群的同學(xué),請(qǐng)?jiān)诠?hào)內(nèi)回復(fù)『交流群』,獲取貓哥的微信(謝絕廣告黨,非誠(chéng)勿擾!)~

          近期熱門(mén)文章推薦:

          大幅提高生產(chǎn)力:你需要了解的10 大 Jupyter Lab 插件
          在手機(jī)上 Python 編程,可以試試它!
          如何理解 Python 之禪:Explicit is better than implicit?
          如何在 Python 程序中實(shí)現(xiàn)緩存?
          如何全面掌握 Python 中正則表達(dá)式的使用?

          感謝創(chuàng)作者的好文
          瀏覽 84
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人天天操 | 狠狠干免费的成人视频 | 免费无码毛片一区二区本码视频 | 日本黄色视频免费看 | 91丝袜 |