真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python語(yǔ)言學(xué)習(xí)函數(shù)(參數(shù)、lamdba和函數(shù)屬性)

   函數(shù)的參數(shù)是參數(shù)暴露給外部的接口,向函數(shù)傳遞參數(shù),可以控制函數(shù)的流程,函數(shù)可以0個(gè)、1個(gè)或多個(gè)參數(shù);在Python中向函數(shù)傳參,使用的是賦值方式。

為志丹等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及志丹網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、志丹網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

  一,傳遞參數(shù)

  參數(shù)是通過(guò)賦值來(lái)傳遞的,傳遞參數(shù)的特點(diǎn)是:

  參數(shù)的傳遞是通過(guò)自動(dòng)把對(duì)象賦值給函數(shù)的本地變量名來(lái)實(shí)現(xiàn)的,

  在函數(shù)內(nèi)部的變量名的賦值不會(huì)影響調(diào)用者,在函數(shù)運(yùn)行時(shí),在函數(shù)頭部的參數(shù)名是一個(gè)新的、本地的變量名,這個(gè)變量名的作用域是在函數(shù)的本地作用域內(nèi)。

  改變函數(shù)的可變對(duì)象參數(shù)的值,會(huì)修改原始對(duì)象的值。

  當(dāng)通過(guò)賦值方式,把可變對(duì)象的引用傳遞給函數(shù)時(shí),在函數(shù)內(nèi)部對(duì)參數(shù)進(jìn)行修改,在函數(shù)外部可以看到修改。

  例如,列表是一個(gè)可變對(duì)象,當(dāng)把列表 a 傳遞給 changer函數(shù)時(shí),函數(shù)向列表末尾添加一個(gè)字符a,當(dāng)函數(shù)調(diào)用結(jié)束時(shí),列表末尾被修改。

  >>> def changer(x):

  ... x.append('a')

  ...

  >>> a=[1,2,3]

  >>> changer(a)

  >>> a

  [1, 2, 3, 'a']

  這是由于可變對(duì)象是通過(guò)指針進(jìn)行傳遞的,當(dāng)把列表的引用傳遞給參數(shù)時(shí),函數(shù)直接在原處修改對(duì)象。

  也可以通過(guò)向參數(shù)傳遞拷貝的方式,使得函數(shù)無(wú)法修改原始的對(duì)象。

  changer(a[:])

  changer(a.copy())

  二,參數(shù)匹配模型

  不管使用何種參數(shù)的匹配模型,參數(shù)總是通過(guò)賦值進(jìn)行傳遞的。

  在默認(rèn)情況下,參數(shù)是通過(guò)其位置進(jìn)行匹配的,從左向右,而且必須精確地傳遞和函數(shù)頭部參數(shù)名一樣多的參數(shù)。還能夠通過(guò)參數(shù)名匹配,默認(rèn)參數(shù)名,以及對(duì)于額外參數(shù)的容器來(lái)進(jìn)行傳參。

  1,位置匹配

  一般情況下,參數(shù)是通過(guò)位置從左至右進(jìn)行匹配,把參數(shù)傳遞給函數(shù)頭部的參數(shù)名稱。

  例如,定義函數(shù)func,包含三個(gè)參數(shù),那么必須使用三個(gè)參數(shù)傳值進(jìn)行調(diào)用:

  def func(a,b,c):

  調(diào)用的格式是,按照順序把值寫(xiě)在括號(hào)中,Python按照位置匹配參數(shù),把1賦值給a,把2賦值給b,把3賦值給c:

  func(1,2,3)

  2,關(guān)鍵字匹配

  調(diào)用者使用arg_name=value的方式,通過(guò)在調(diào)用時(shí)使用參數(shù)的變量名進(jìn)行匹配。

  例如,定義參數(shù)func,包含三個(gè)參數(shù),那么必須使用三個(gè)參數(shù)傳值進(jìn)行調(diào)用:

  def func(x,y,z):

  使用關(guān)鍵字調(diào)用的格式是:按照 arg=named的方式進(jìn)行匹配,可以不按照位置:

  func(y=2, x=1, z=3)

  在調(diào)用函數(shù)時(shí),Python按照參數(shù)名進(jìn)行匹配,把2傳遞給參數(shù)y,把1傳遞給參數(shù)x,把3傳遞給參數(shù)z。

  也可以混合使用位置匹配和關(guān)鍵字匹配,例如,下面的函數(shù)調(diào)用:

  func(1,z=3,y=2)

  基于位置的匹配參數(shù),首先按照從左至右的順序匹配前面的參數(shù),之后,再按照基于變量名進(jìn)行關(guān)鍵字匹配。

  3,默認(rèn)參數(shù)

  在定義函數(shù)時(shí),可以為函數(shù)的參數(shù)賦值,這就是參數(shù)的默認(rèn)值。當(dāng)沒(méi)有為該參數(shù)傳值時(shí),參數(shù)值使用默認(rèn)值。

  例如,定義一個(gè)函數(shù),包含三個(gè)參數(shù),x、y和z,其中參數(shù)z有默認(rèn)值1:

  def func(x,y,z=1):

  當(dāng)調(diào)用這個(gè)函數(shù),必須為參數(shù)x和y傳值,無(wú)論是通過(guò)位置匹配還是關(guān)鍵字匹配來(lái)實(shí)現(xiàn)都可以。然而,參數(shù)z的傳值是可選的。如果不為z傳值,那么z使用默認(rèn)值;如果為z傳值,那么z使用傳遞的值。

  func(2,3)

  4,可變長(zhǎng)參數(shù)列表

  可變參數(shù)用于收集任意多個(gè)基于位置或關(guān)鍵字的參數(shù),在函數(shù)定義時(shí),如果參數(shù)名前帶一個(gè)*號(hào),那么該參數(shù)收集的是基于位置的傳值;如果參數(shù)名前帶兩個(gè)*號(hào)(**arg),那么該參數(shù)收集的是基于關(guān)鍵字(arg=value)的傳值。

  def func(*args)

  def func(**dict)

  這兩種方式的不同點(diǎn)是,*args方式是把任意多個(gè)傳值封裝成元組(arg1,arg2),而**dict是把任意多個(gè) arg=value 封裝成字典{arg:value},字典的key是參數(shù)名,字典key對(duì)應(yīng)的值是參數(shù)的值。

  例如,定義函數(shù)foo,包含一個(gè)位置匹配參數(shù),1個(gè)可變的位置匹配參數(shù),1個(gè)可變的關(guān)鍵字匹配參數(shù):

  def foo(a,*b,**c):

  在調(diào)用函數(shù)時(shí),首先按照位置匹配,把1傳遞給參數(shù)a,把元組(2,3)傳遞給參數(shù)b,把字典{x:1,y:2}傳遞給參數(shù)c:

  foo(1,2,3,x=1,y=2)

  5,只能使用關(guān)鍵字參數(shù)

  參數(shù)必須按照名稱傳值,在函數(shù)定義時(shí),參數(shù)必須在調(diào)用中按照關(guān)鍵字進(jìn)行傳值:

  def func(*,arg=value)

  從語(yǔ)法上來(lái)講,keyword-only參數(shù)編碼為關(guān)鍵字參數(shù),出現(xiàn)在參數(shù)列表的*args之后,所有這些參數(shù)都必須在調(diào)用中使用關(guān)鍵字語(yǔ)法來(lái)傳值。

  def foo(a,*b,c):

  在調(diào)用foo函數(shù)時(shí),參數(shù)a可以按照位置和關(guān)鍵字來(lái)傳值,參數(shù)b接收按照其余的按照位置來(lái)傳值的變量,參數(shù)c必須按照關(guān)鍵字來(lái)傳值:

  foo(1,2,'a',3,c='key')

  也可以在參數(shù)列表中使用一個(gè)*字符,來(lái)表示一個(gè)函數(shù)不會(huì)接受一個(gè)可變的參數(shù)列表,而是仍然期待跟在*后面的所有參數(shù)都作為關(guān)鍵字匹配。

  例如,定義函數(shù)foo,只接受3個(gè)參數(shù),不接受可變長(zhǎng)度的參數(shù)列表:

  def foo(a,*,b,c):

  在調(diào)用時(shí),參數(shù)a可以按照位置和關(guān)鍵字來(lái)傳值,參數(shù)b和c必須按照關(guān)鍵字來(lái)傳值:

  foo(1,b='x',c=2)

  三,lambda表達(dá)式

  除了def語(yǔ)句之外,Python還提供了一種生成函數(shù)對(duì)象的表達(dá)式形式,lambda表達(dá)式。就像def語(yǔ)句一樣,這個(gè)表達(dá)式創(chuàng)建了一個(gè)函數(shù)對(duì)象,但是它返回了一個(gè)函數(shù),而不是把這個(gè)函數(shù)賦值給一個(gè)變量名。

  lambda表達(dá)式的一般形式是關(guān)鍵字lambda,之后是一個(gè)或多個(gè)參數(shù)(與一個(gè)def頭部?jī)?nèi)用括號(hào)括起來(lái)的參數(shù)列表極其類似),緊跟一個(gè)冒號(hào),之后是一個(gè)表達(dá)式:

  lambda arg1,arg2,... argN: expression_using_args

  lambda表達(dá)式的特性是:

  lambda表達(dá)式返回的是函數(shù)對(duì)象;

  lambda是一個(gè)表達(dá)式,而不是一個(gè)語(yǔ)句,作為一個(gè)表達(dá)式,lambda返回了一個(gè)值(一個(gè)新的函數(shù)),可以選擇性地賦值給一個(gè)變量名;

  lambda的主體是一個(gè)單個(gè)的表達(dá)式,而不是一個(gè)代碼塊,這個(gè)表達(dá)式的結(jié)果作為函數(shù)的結(jié)果返回。

  lambda只有一行表達(dá)式,只能用于創(chuàng)建簡(jiǎn)單的函數(shù),而def 可以包含多條語(yǔ)句,用于處理復(fù)雜的任務(wù)。

  對(duì)于簡(jiǎn)單的處理流程,既可以使用def,也可以用lambda來(lái)實(shí)現(xiàn),例如:

  def func(x,y,z): return x+y+z

  func=lambda x,y,z: x+y+z

  由于lambda表達(dá)式返回的是一個(gè)函數(shù)對(duì)象,因此,可以用于map()、filter()和reduce()函數(shù)中:

  list(map((lambda x: x+3), range(0,5)))

  list(filter((lambda x: x>2), range(0,5)))

  from functools import reduce

  reduce((lambda x,y: x+y),range(0,5))

  reduce()函數(shù)對(duì)每對(duì)元素都應(yīng)用函數(shù),并運(yùn)行到最后結(jié)果,上述reduce()函數(shù)的作用是把序列中的所有元素相加,等價(jià)的寫(xiě)法是:

  x=list(range(0,5)]

  res=x[0]

  for i in x[1:] :

  res+=i

  四,函數(shù)的屬性

  可以向函數(shù)添加任意多個(gè)用戶定義的屬性,函數(shù)屬性的格式是:函數(shù)名稱.變量名

  例如,向函數(shù)func中添加state屬性:

  def func():

  func.state='begin'


網(wǎng)站欄目:Python語(yǔ)言學(xué)習(xí)函數(shù)(參數(shù)、lamdba和函數(shù)屬性)
當(dāng)前地址:http://weahome.cn/article/jejiej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部