1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      python默認(rèn)函數(shù)值,python函數(shù)的默認(rèn)參數(shù)

      Python中定義函數(shù)默認(rèn)參數(shù)值的使用注意事項?

      4.7.1. 默認(rèn)參數(shù)值

      成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供息烽網(wǎng)站建設(shè)、息烽做網(wǎng)站、息烽網(wǎng)站設(shè)計、息烽網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、息烽企業(yè)網(wǎng)站模板建站服務(wù),十載息烽做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

      最常用的一種形式是為一個或多個參數(shù)指定默認(rèn)值。這會創(chuàng)建一個可以使用比定義是允許的參數(shù)更少的參數(shù)調(diào)用的函數(shù),例如:

      def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):

      while True:

      ok = input(prompt)

      if ok in ('y', 'ye', 'yes'):

      return True

      if ok in ('n', 'no', 'nop', 'nope'):

      return False

      retries = retries - 1

      if retries 0:

      raise OSError('uncooperative user')

      print(complaint)

      這個函數(shù)可以通過幾種不同的方式調(diào)用:

      只給出必要的參數(shù):

      ask_ok('Do you really want to quit?')

      給出一個可選的參數(shù):

      ask_ok('OK to overwrite the file?', 2)

      或者給出所有的參數(shù):

      ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')

      這個例子還介紹了 in 關(guān)鍵字。它測定序列中是否包含某個確定的值。

      默認(rèn)值在函數(shù) 定義 作用域被解析,如下所示:

      i = 5

      def f(arg=i):

      print(arg)

      i = 6

      f()

      將會輸出 5。

      重要警告: 默認(rèn)值只被賦值一次。這使得當(dāng)默認(rèn)值是可變對象時會有所不同,比如列表、字典或者大多數(shù)類的實例。例如,下面的函數(shù)在后續(xù)調(diào)用過程中會累積(前面)傳給它的參數(shù):

      def f(a, L=[]):

      L.append(a)

      return L

      print(f(1))

      print(f(2))

      print(f(3))

      這將輸出:

      [1]

      [1, 2]

      [1, 2, 3]

      如果你不想讓默認(rèn)值在后續(xù)調(diào)用中累積,你可以像下面一樣定義函數(shù):

      def f(a, L=None):

      if L is None:

      L = []

      L.append(a)

      return L

      python-函數(shù)參數(shù)默認(rèn)值的一些問題

      1.在定義有默認(rèn)參數(shù)的函數(shù)時,需要注意以下: 必傳參數(shù)必須在前面,默認(rèn)參數(shù)在后;

      備注:python為了簡化函數(shù)的調(diào)用,提供了默認(rèn)參數(shù)機制,這樣在調(diào)用函數(shù)時,就可以省略最后一個參數(shù)不寫;設(shè)置何種參數(shù)為默認(rèn)參數(shù)?一般來說,將參數(shù)值變化小的設(shè)置為默認(rèn)參數(shù)。

      2. 若參數(shù)為列表,且有默認(rèn)值

      2.1若調(diào)用方法時傳該參數(shù),則沒有問題

      2.2 若調(diào)用方法時不傳該參數(shù),則有問題 ,問題是:每次調(diào)用該方法時,該參數(shù)不是創(chuàng)建方法時的默認(rèn)值,而是多次調(diào)用被修改后的列表。

      Python的位置參數(shù)、默認(rèn)參數(shù)、關(guān)鍵字參數(shù)、可變參數(shù)區(qū)別

      對于python函數(shù)參數(shù),對于初學(xué)者可能就是進(jìn)入了迷宮,盡管我也是初學(xué)者,簡單總結(jié)一下。

      說參數(shù)之前,先講一下兩個packing(包裹)和unpacking(解包裹):

      輸出:

      我總結(jié)不了這個概念,只能幫大家到這了

      一、位置參數(shù)和關(guān)鍵字參數(shù):

      調(diào)用函數(shù)時根據(jù)函數(shù)定義的參數(shù)位置來傳遞參數(shù)。

      注意:

      有位置參數(shù)時,位置參數(shù)必須在關(guān)鍵字參數(shù)的前面,但關(guān)鍵字參數(shù)之間不存在先后順序的

      二、默認(rèn)參數(shù):

      用于定義函數(shù),為參數(shù)提供默認(rèn)值,調(diào)用函數(shù)時可傳可不傳該默認(rèn)參數(shù)的值(注意:所有位置參數(shù)必須出現(xiàn)在默認(rèn)參數(shù)前,包括函數(shù)定義和調(diào)用)

      三、可變參數(shù):

      定義函數(shù)時,有時候我們不確定調(diào)用的時候會傳遞多少個參數(shù)(不傳參也可以)。此時,可用包裹(packing)位置參數(shù),或者包裹關(guān)鍵字參數(shù),來進(jìn)行參數(shù)傳遞,會顯得非常方便。

      1、包裹位置傳遞

      我們傳進(jìn)的所有參數(shù)都會被args變量收集,它會根據(jù)傳進(jìn)參數(shù)的位置合并為一個元組(tuple),args是元組類型,這就是包位置傳遞。

      2、包裹關(guān)鍵字傳遞

      kargs是一個字典(dict),收集所有關(guān)鍵字參數(shù)

      四、解包裹參數(shù):

      *args 和 **kargs ,也可以在函數(shù)調(diào)用的時候使用,稱之為解包(unpacking)

      1、在傳遞元組時,讓元組的每一個元素對應(yīng)一個位置參數(shù)

      2、在傳遞詞典字典時,讓詞典的每個鍵值對作為一個關(guān)鍵字參數(shù)傳遞給函數(shù)

      五、位置參數(shù)、默認(rèn)參數(shù)、可變參數(shù)的混合使用

      1、基本原則是:先位置參數(shù),默認(rèn)參數(shù),包裹位置,包裹關(guān)鍵字(定義和調(diào)用都應(yīng)遵循)

      2、Python中 *args 和 **kwargs 的區(qū)別

      先看個demo:

      輸出結(jié)果:

      分析一下:可以看到,這兩個是[Python]中的可變參數(shù)。 *args 表示任何多個無名參數(shù),它是一個tuple; **kwargs 表示關(guān)鍵字參數(shù),它是一個dict。并且同時使用 *args 和 **kwargs 時,必須 *args 參數(shù)列要在 **kwargs 前,否則會報語法錯誤!!!

      還有個小應(yīng)用場景:創(chuàng)建字典

      其實python中就帶有dict類,使用dict(a=1,b=2,c=3)即可創(chuàng)建一個字典了。

      *args:

      重點在*,后面的args相當(dāng)于一個變量名,可以自己定義的。它的本質(zhì)就是將標(biāo)準(zhǔn)調(diào)用剩下的值集中轉(zhuǎn)變?yōu)樵M。

      從形參的角度:

      從實參的角度:

      從不同角度看**kwargs:

      **kwargs與位置參數(shù)和默認(rèn)參數(shù)混用:

      超復(fù)雜混合參數(shù)混用記:

      總結(jié):

      位置參數(shù):

      調(diào)用函數(shù)時所傳參數(shù)的位置必須與定義函數(shù)時參數(shù)的位置相同

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

      使用關(guān)鍵字參數(shù)會指定參數(shù)值賦給哪個形參,調(diào)用時所傳參數(shù)的位置可以任意

      *位置參數(shù):可接受任意數(shù)量的位置參數(shù)(元組);只能作為最后一個位置參數(shù)出現(xiàn),其后參數(shù)均為關(guān)鍵字參數(shù)

      **關(guān)鍵字參數(shù):可接受任意數(shù)量的關(guān)鍵字參數(shù)(字典);只能作為最后一個參數(shù)出現(xiàn)

      python 函數(shù)參數(shù)類型

      python 的函數(shù)參數(shù)類型分為4種:

      1.位置參數(shù):調(diào)用函數(shù)時根據(jù)函數(shù)定義的參數(shù)位置來傳遞參數(shù),位置參數(shù)也可以叫做必要參數(shù),函數(shù)調(diào)用時必須要傳的參數(shù)。

      當(dāng)參數(shù)滿足函數(shù)必要參數(shù)傳參的條件,函數(shù)能夠正常執(zhí)行:

      add(1,2) #兩個參數(shù)的順序必須一一對應(yīng),且少一個參數(shù)都不可以

      當(dāng)我們運行上面的程序,輸出:

      當(dāng)函數(shù)需要兩個必要參數(shù),但是調(diào)用函數(shù)只給了一個參數(shù)時,程序會拋出異常

      add(1)

      當(dāng)我們運行上面的程序,輸出:

      當(dāng)函數(shù)需要兩個必要參數(shù),但是調(diào)用函數(shù)只給了三個參數(shù)時,程序會拋出異常

      add(1,2,3)

      當(dāng)我們運行上面的程序,輸出

      2.關(guān)鍵字參數(shù):用于函數(shù)調(diào)用,通過“鍵-值”形式加以指定。可以讓函數(shù)更加清晰、容易使用,同時也清除了參數(shù)的順序需求。

      add(1,2) # 這種方式傳參,必須按順序傳參:x對應(yīng)1,y對應(yīng):2

      add(y=2,x=1) #以關(guān)健字方式傳入?yún)?shù)(可以不按順序)

      正確的調(diào)用方式

      add(x=1, y=2)

      add(y=2, x=1)

      add(1, y=2)

      以上調(diào)用方式都是允許的,能夠正常執(zhí)行

      錯誤的調(diào)用方式

      add(x=1, 2)

      add(y=2, 1)

      以上調(diào)用都會拋出SyntaxError 異常

      上面例子可以看出:有位置參數(shù)時,位置參數(shù)必須在關(guān)鍵字參數(shù)的前面,但關(guān)鍵字參數(shù)之間不存在先后順序的

      3.默認(rèn)參數(shù):用于定義函數(shù),為參數(shù)提供默認(rèn)值,調(diào)用函數(shù)時可傳可不傳該默認(rèn)參數(shù)的值,所有位置參數(shù)必須出現(xiàn)在默認(rèn)參數(shù)前,包括函數(shù)定義和調(diào)用,有多個默認(rèn)參數(shù)時,調(diào)用的時候,既可以按順序提供默認(rèn)參數(shù),也可以不按順序提供部分默認(rèn)參數(shù)。當(dāng)不按順序提供部分默認(rèn)參數(shù)時,需要把參數(shù)名寫上

      默認(rèn)參數(shù)的函數(shù)定義

      上面示例第一個是正確的定義位置參數(shù)的方式,第二個是錯誤的,因為位置參數(shù)在前,默認(rèn)參數(shù)在后

      def add1(x=1,y) 的定義會拋出如下異常

      默認(rèn)參數(shù)的函數(shù)調(diào)用

      注意:定義默認(rèn)參數(shù)默認(rèn)參數(shù)最好不要定義為可變對象,容易掉坑

      不可變對象:該對象所指向的內(nèi)存中的值不能被改變,int,string,float,tuple

      可變對象,該對象所指向的內(nèi)存中的值可以被改變,dict,list

      這里只要理解一下這個概念就行或者自行百度,后續(xù)會寫相關(guān)的專題文章講解

      舉一個簡單示例

      4.可變參數(shù)區(qū)別:定義函數(shù)時,有時候我們不確定調(diào)用的時候會多少個參數(shù),j就可以使用可變參數(shù)

      可變參數(shù)主要有兩類:

      *args: (positional argument) 允許任意數(shù)量的可選位置參數(shù)(參數(shù)),將被分配給一個元組, 參數(shù)名前帶*,args只是約定俗成的變量名,可以替換其他名稱

      **kwargs:(keyword argument) 允許任意數(shù)量的可選關(guān)鍵字參數(shù),,將被分配給一個字典,參數(shù)名前帶**,kwargs只是約定俗成的變量名,可以替換其他名稱

      *args 的用法

      args 是用來傳遞一個非鍵值對的可變數(shù)量的參數(shù)列表給函數(shù)

      語法是使用 符號的數(shù)量可變的參數(shù); 按照慣例,通常是使用arg這個單詞,args相當(dāng)于一個變量名,可以自己定義的

      在上面的程序中,我們使用* args作為一個可變長度參數(shù)列表傳遞給add()函數(shù)。 在函數(shù)中,我們有一個循環(huán)實現(xiàn)傳遞的參數(shù)計算和輸出結(jié)果。

      還可以直接傳遞列表或者數(shù)組的方式傳遞參數(shù),以數(shù)組或者列表方式傳遞參數(shù)名前面加(*) 號

      理解* * kwargs

      **kwargs 允許你將不定長度的鍵值對, 作為參數(shù)傳遞給函數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict

      下篇詳細(xì)講解 *args, **kwargs 的參數(shù)傳遞和使用敬請關(guān)注

      Python獲取函數(shù)參數(shù)個數(shù)和默認(rèn)參數(shù)

      創(chuàng)建一個函數(shù)用來計算三個數(shù)的和,如下:

      下來,我們對其進(jìn)行調(diào)用:

      假設(shè)我們要計算這個函數(shù)返回結(jié)果的平均值。那么此時,我們只需將和值除以參數(shù)個數(shù)即可,那么參數(shù)個數(shù)怎么獲取呢?你可能會說:數(shù)一下就知道了。那么假設(shè)此時有很多的參數(shù),你還去數(shù)嗎?此時,明顯這個方法是不恰當(dāng)?shù)模敲从袥]有更加方便、高效的方法呢?我們接著往下看。

      通過上面這個例子,我們不但可以獲取參數(shù)個數(shù),還可以獲取所有變量名以及默認(rèn)返回值。此時,我們只需根據(jù)自己的需求,去應(yīng)用就可以了,那么以上的問題,就自然解決了。

      Python函數(shù)的參數(shù)類型

      Python函數(shù)的參數(shù)類型主要包括必選參數(shù)、可選參數(shù)、可變參數(shù)、位置參數(shù)和關(guān)鍵字參數(shù),本文介紹一下他們的定義以及可變數(shù)據(jù)類型參數(shù)傳遞需要注意的地方。

      必選參數(shù)(Required arguments)是必須輸入的參數(shù),比如下面的代碼,必須輸入2個參數(shù),否則就會報錯:

      其實上面例子中的參數(shù) num1和num2也屬于關(guān)鍵字參數(shù),比如可以通過如下方式調(diào)用:

      執(zhí)行結(jié)果:

      可選參數(shù)(Optional arguments)可以不用傳入函數(shù),有一個默認(rèn)值,如果沒有傳入會使用默認(rèn)值,不會報錯。

      位置參數(shù)(positional arguments)根據(jù)其在函數(shù)定義中的位置調(diào)用,下面是pow()函數(shù)的幫助信息:

      x,y,z三個參數(shù)的的順序是固定的,并且不能使用關(guān)鍵字:

      輸出:

      在上面的pow()函數(shù)幫助信息中可以看到位置參數(shù)后面加了一個反斜杠 / ,這是python內(nèi)置函數(shù)的語法定義,Python開發(fā)人員不能在python3.8版本之前的代碼中使用此語法。但python3.0到3.7版本可以使用如下方式定義位置參數(shù):

      星號前面的參數(shù)為位置參數(shù)或者關(guān)鍵字參數(shù),星號后面是強制關(guān)鍵字參數(shù),具體介紹見強制關(guān)鍵字參數(shù)。

      python3.8版本引入了強制位置參數(shù)(Positional-Only Parameters),也就是我們可以使用反斜杠 / 語法來定義位置參數(shù)了,可以寫成如下形式:

      來看下面的例子:

      python3.8運行:

      不能使用關(guān)鍵字參數(shù)形式賦值了。

      可變參數(shù) (varargs argument) 就是傳入的參數(shù)個數(shù)是可變的,可以是0-n個,使用星號( * )將輸入?yún)?shù)自動組裝為一個元組(tuple):

      執(zhí)行結(jié)果:

      關(guān)鍵字參數(shù)(keyword argument)允許將任意個含參數(shù)名的參數(shù)導(dǎo)入到python函數(shù)中,使用雙星號( ** ),在函數(shù)內(nèi)部自動組裝為一個字典。

      執(zhí)行結(jié)果:

      上面介紹的參數(shù)可以混合使用:

      結(jié)果:

      注意:由于傳入的參數(shù)個數(shù)不定,所以當(dāng)與普通參數(shù)一同使用時,必須把帶星號的參數(shù)放在最后。

      強制關(guān)鍵字參數(shù)(Keyword-Only Arguments)是python3引入的特性,可參考:。 使用一個星號隔開:

      在位置參數(shù)一節(jié)介紹過星號前面的參數(shù)可以是位置參數(shù)和關(guān)鍵字參數(shù)。星號后面的參數(shù)都是強制關(guān)鍵字參數(shù),必須以指定參數(shù)名的方式傳參,如果強制關(guān)鍵字參數(shù)沒有設(shè)置默認(rèn)參數(shù),調(diào)用函數(shù)時必須傳參。

      執(zhí)行結(jié)果:

      也可以在可變參數(shù)后面命名關(guān)鍵字參數(shù),這樣就不需要星號分隔符了:

      執(zhí)行結(jié)果:

      在Python對象及內(nèi)存管理機制中介紹了python中的參數(shù)傳遞屬于對象的 引用傳遞 (pass by object reference),在編寫函數(shù)的時候需要特別注意。

      先來看個例子:

      執(zhí)行結(jié)果:

      l1 和 l2指向相同的地址,由于列表可變,l1改變時,l2也跟著變了。

      接著看下面的例子:

      結(jié)果:

      l1沒有變化!為什么不是[1, 2, 3, 4]呢?

      l = l + [4]表示創(chuàng)建一個“末尾加入元素 4“的新列表,并讓 l 指向這個新的對象,l1沒有進(jìn)行任何操作,因此 l1 的值不變。如果要改變l1的值,需要加一個返回值:

      結(jié)果:

      下面的代碼執(zhí)行結(jié)果又是什么呢?

      執(zhí)行結(jié)果:

      和第一個例子一樣,l1 和 l2指向相同的地址,所以會一起改變。這個問題怎么解決呢?

      可以使用下面的方式:

      也可以使用淺拷貝或者深度拷貝,具體使用方法可參考Python對象及內(nèi)存管理機制。這個問題在Python編程時需要特別注意。

      本文主要介紹了python函數(shù)的幾種參數(shù)類型:必選參數(shù)、可選參數(shù)、可變參數(shù)、位置參數(shù)、強制位置參數(shù)、關(guān)鍵字參數(shù)、強制關(guān)鍵字參數(shù),注意他們不是完全獨立的,比如必選參數(shù)、可選參數(shù)也可以是關(guān)鍵字參數(shù),位置參數(shù)可以是必選參數(shù)或者可選參數(shù)。

      另外,python中的參數(shù)傳遞屬于對象的 引用傳遞 ,在對可變數(shù)據(jù)類型進(jìn)行參數(shù)傳遞時需要特別注意,如有必要,使用python的拷貝方法。

      參考文檔:

      --THE END--


      網(wǎng)頁題目:python默認(rèn)函數(shù)值,python函數(shù)的默認(rèn)參數(shù)
      瀏覽路徑:http://www.ef60e0e.cn/article/hedgei.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        诸暨市| 九江县| 喜德县| 宝应县| 白城市| 伊宁县| 霸州市| 融水| 德州市| 西宁市| 中宁县| 白城市| 宁乡县| 苍南县| 普定县| 吉隆县| 缙云县| 奎屯市| 邢台市| 将乐县| 漳州市| 清徐县| 华容县| 富民县| 易门县| 通江县| 盐津县| 铜鼓县| 玉林市| 长汀县| 渝北区| 无极县| 荔浦县| 株洲县| 龙口市| 读书| 台东县| 鄱阳县| 高密市| 错那县| 额济纳旗|