欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python基礎(chǔ)之函數(shù)的參數(shù)-創(chuàng)新互聯(lián)

  一、形參和實(shí)參是什么?

滿城網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司

  函數(shù)的參數(shù)分為形式參數(shù)和實(shí)際參數(shù),簡稱形參和實(shí)參:

  形參即在定義函數(shù)時,括號內(nèi)聲明的參數(shù)。形參本質(zhì)就是一個變量名,用來接收外部傳來的值。

  def func(x,y): #x和y為形參

  print(x,y)

  實(shí)參即在調(diào)用函數(shù)時,括號內(nèi)傳入的值,值可以是常量、變量、表達(dá)式或三者的組合。

  func(1,2) #1和2為實(shí)參

  形參和實(shí)參的關(guān)系:

  在調(diào)用階段,實(shí)參(變量值)會賦值給形參(變量名)

  二、形參與實(shí)參的具體使用

  1、兩種形參的區(qū)別

  (1)位置形參

  在定義函數(shù)時,按照從左到右的順序依次定義形參,稱為位置形參,凡是按照這種形式定義的形參都必須被傳值

  def register(name,age,sex): #定義位置形參:name,age,sex,三者都必須被傳值

  print('Name:{} Age:{} Sex:{}'.format(name,age,sex))

  (2)默認(rèn)形參

  默認(rèn)形參調(diào)用時,可以不傳值,那么就是默認(rèn)值,傳值就覆蓋默認(rèn)值。

  >>> def register(name,age,sex='male'): #默認(rèn)sex的值為male

  ... print('Name:{} Age:{} Sex:{}'.format(name,age,sex))

  ...

  需要注意:

  默認(rèn)參數(shù)必須在位置參數(shù)之后

  默認(rèn)參數(shù)的值僅在函數(shù)定義階段被賦值一次

  默認(rèn)參數(shù)的值通常應(yīng)設(shè)為不可變類型

  def foo(n,arg=[]):

  arg.append(n)

  return arg

  foo(1)

  [1]

  foo(2)

  [1, 2]

  foo(3)

  [1, 2, 3]

  每次調(diào)用是在上一次的基礎(chǔ)上向同一列表增加值,修改如下

  def foo(n,arg=None):

  if arg is None:

  arg=[]

  arg.append(n)

  return arg

  foo(1)

  [1]

  foo(2)

  [2]

  foo(3)

  [3]

  2、兩種實(shí)參的區(qū)別

  (1)位置實(shí)參

  在調(diào)用函數(shù)時,按照從左到右的順序依次定義實(shí)參,稱為位置實(shí)參,凡是按照這種形式定義的實(shí)參會按照從左到右的順序與形參一一對應(yīng)

  def register(name,age,sex): #定義位置形參:name,age,sex,三者都必須被傳值

  print('Name:{} Age:{} Sex:{}'.format(name,age,sex))

  register('吳晉丞',18,'男') #定義位置實(shí)參:'吳晉丞',18,'男',按照順序和形參相對應(yīng)

  (2)關(guān)鍵字實(shí)參

  在調(diào)用函數(shù)時,實(shí)參可以是key=value的形式,稱為關(guān)鍵字參數(shù),凡是按照這種形式定義的實(shí)參,可以完全不按照從左到右的順序定義,但仍能為指定的形參賦值

  >>> register(sex='male',name='lili',age=18)

  Name:lili Age:18 Sex:male

  需要注意在調(diào)用函數(shù)時,實(shí)參也可以是按位置或按關(guān)鍵字的混合使用,但必須保證關(guān)鍵字參數(shù)在位置參數(shù)后面,且不可以對一個形參重復(fù)賦值

  >>> register('lili',sex='male',age=18) #正確使用

  #錯誤示例:

  >>> register(name='lili',18,sex='male') #SyntaxError:關(guān)鍵字參數(shù)name=‘lili’在位置參數(shù)18之前

  >>> register('lili',sex='male',age=18,name='jack') #TypeError:形參name被重復(fù)賦值

  3、可變長參數(shù)

  參數(shù)的長度可變指的是在調(diào)用函數(shù)時,實(shí)參的個數(shù)可以不固定,而在調(diào)用函數(shù)時,實(shí)參的定義無非是按位置或者按關(guān)鍵字兩種形式,這就要求形參提供兩種解決方案來分別處理兩種形式的可變長度的參數(shù)

  (1)可變長位置參數(shù)在形參和實(shí)參中的應(yīng)用

  形參中的應(yīng)用

  如果在最后一個形參名前加*號,那么在調(diào)用函數(shù)時,溢出的位置實(shí)參,都會被接收,以元組的形式保存下來賦值給該形參

  >>> def foo(x,y,z=1,*args): #在最后一個形參名args前加*號

  ... print(x)

  ... print(y)

  ... print(z)

  ... print(args)

  ...

  >>> foo(1,2,3,4,5,6,7) #實(shí)參1、2、3按位置為形參x、y、z賦值,多余的位置實(shí)參4、5、6、7都被*接收,以元組的形式保存下來,賦值給args,即args=(4, 5, 6,7)

  1

  2

  3

  (4, 5, 6, 7)

  實(shí)參中的應(yīng)用

  如果我們事先生成了一個列表(也可以是元組、字符串),仍然是可以傳值給*args的

  >>> def foo(x,y,*args):

  ... print(x)

  ... print(y)

  ... print(args)

  ...

  >>> L=[3,4,5]

  >>> foo(1,2,*L) # *L就相當(dāng)于位置參數(shù)3,4,5。foo(1,2,*L)就等同于foo(1,2,3,4,5)

  1

  2

  (3, 4, 5)

  (2)可變長關(guān)鍵字參數(shù)在形參和實(shí)參中的應(yīng)用

  形參中的應(yīng)用

  如果在最后一個形參名前加**號,那么在調(diào)用函數(shù)時,溢出的關(guān)鍵字參數(shù),都會被接收,以字典的形式保存下來賦值給該形參

  >>> def foo(x,**kwargs): #在最后一個參數(shù)kwargs前加**

  ... print(x)

  ... print(kwargs)

  ...

  >>> foo(y=2,x=1,z=3) #溢出的關(guān)鍵字實(shí)參y=2,z=3都被**接收,以字典的形式保存下來,賦值給kwargs

  1

  {'z': 3, 'y': 2}

  實(shí)參中的應(yīng)用

  如果我們事先生成了一個字典,仍然是可以傳值給**kwargs的

  >>> def foo(x,y,**kwargs):

  ... print(x)

  ... print(y)

  ... print(kwargs)

  ...

  >>> dic={'a':1,'b':2}

  >>> foo(1,2,**dic) #**dic就相當(dāng)于關(guān)鍵字參數(shù)a=1,b=2。foo(1,2,**dic)等同foo(1,2,a=1,b=2)

  1

  2

  {'a': 1, 'b': 2}

  4、命名關(guān)鍵字參數(shù)(了解)

  想要限定函數(shù)的調(diào)用者必須以key=value的形式傳值,Python3提供了專門的語法:需要在定義形參時,用*號作為一個分隔符號,*號之后的形參稱為命名關(guān)鍵字參數(shù)。對于這類參數(shù),在函數(shù)調(diào)用時,必須按照key=value的形式為其傳值,且必須被傳值。

  >>> def register(name,age,*,sex,height): #sex,height為命名關(guān)鍵字參數(shù)

  ... pass

  ...

  >>> register('lili',18,sex='male',height='1.8m') #正確使用

  #錯誤示例:

  >>> register('lili',18,'male','1.8m') # TypeError:未使用關(guān)鍵字的形式為sex和height傳值

  >>> register('lili',18,height='1.8m') # TypeError沒有為命名關(guān)鍵字參數(shù)height傳值。

  命名關(guān)鍵字參數(shù)也可以有默認(rèn)值(注意:這個不叫默認(rèn)形參),從而簡化調(diào)用

  >>> def register(name,age,*,sex='male',height):

  pass

  如果形參中已經(jīng)有一個*args了,命名關(guān)鍵字參數(shù)就不再需要一個單獨(dú)的*作為分隔符號了,而是\*args作為分隔符號,后面是命名關(guān)鍵字參數(shù)

  >>> def register(name,age,*args,sex='male',height):#sex,height仍然為命名關(guān)鍵字參數(shù)

  有人可能還會問如果是**kwargs呢?是不是以**kwargs為分隔符?

  答:這樣會報錯,這樣也沒有什么用,因為**kwargs就是用來接收多余的關(guān)鍵字實(shí)參的,如果多余的不是關(guān)鍵字實(shí)參,會報錯。你再用命名關(guān)鍵字參數(shù),限制必須關(guān)鍵字實(shí)參傳值,沒有意義。

    鄭州較好的婦科醫(yī)院 http://www.kd0371.com/

python基礎(chǔ)之 函數(shù)的參數(shù)

  5、組合使用

  綜上所述所有參數(shù)可任意組合使用,但形參定義順序必須是:位置參數(shù)、默認(rèn)參數(shù)、\*args、命名關(guān)鍵字參數(shù)、**kwargs.

  實(shí)參的定義順序可以是:位置實(shí)參、*、關(guān)鍵字參數(shù)、**:

  func(111,*(333,444),y=222,**{'a':555,'b':666})

  #只要*和**打散之后遵循位置實(shí)參在關(guān)鍵字參數(shù)左邊即可。*相當(dāng)于一堆位置實(shí)參,**相當(dāng)于一堆關(guān)鍵字參數(shù)

  可變參數(shù)*args與關(guān)鍵字參數(shù)**kwargs通常是組合在一起使用的,如果一個函數(shù)的形參為*args與**kwargs,那么代表該函數(shù)可以接收任何形式、任意長度的參數(shù)

  >>> def wrapper(*args,**kwargs):

  ... pass

  在該函數(shù)內(nèi)部還可以把接收到的參數(shù)傳給另外一個函數(shù)(這在4.6小節(jié)裝飾器的實(shí)現(xiàn)中大有用處)

  >>> def func(x,y,z):

  ... print(x,y,z)

  ...

  >>> def wrapper(*args,**kwargs): #(1,)元組 {'z':3,'y':2}字典

  ... func(*args,**kwargs) # *(1,) **{'z':3,'y':2},實(shí)參使用*和**,打散元組、字典

  ...

  >>> wrapper(1,z=3,y=2)

  1 2 3

  提示: *args、**kwargs中的args和kwargs被替換成其他名字并無語法錯誤,但使用args、kwargs是約定俗成的。

文章名稱:python基礎(chǔ)之函數(shù)的參數(shù)-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.chinadenli.net/article32/deeesc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站網(wǎng)站制作網(wǎng)頁設(shè)計公司外貿(mào)網(wǎng)站建設(shè)用戶體驗網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)