中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Python函數(shù)參數(shù)類型*、**的區(qū)別
來(lái)源:易賢網(wǎng) 閱讀:1387 次 日期:2015-04-14 15:26:11
溫馨提示:易賢網(wǎng)小編為您整理了“Python函數(shù)參數(shù)類型*、**的區(qū)別”,方便廣大網(wǎng)友查閱!

剛開(kāi)始學(xué)習(xí)python,python相對(duì)于java確實(shí)要簡(jiǎn)潔易用得多。內(nèi)存回收類似hotspot的可達(dá)性分析, 不可變對(duì)象也如同java得Integer類型,with函數(shù)類似新版本C++的特性,總體來(lái)說(shuō)理解起來(lái)比較輕松。只是函數(shù)部分參數(shù)的"*"與"**",閉包等問(wèn)題,著實(shí)令人迷糊了一把,弄清概念后寫(xiě)下此文記錄下來(lái),也希望本文能夠幫助其他初學(xué)者。

所以本文是一篇學(xué)習(xí)筆記,著重于使用的細(xì)節(jié)和理解上,首先分別介紹了函數(shù)各種參數(shù)類型在調(diào)用和聲明時(shí)的區(qū)別,及其在混用時(shí)需要注意的一些細(xì)節(jié),之后講了閉包相關(guān)的內(nèi)容。如果有不對(duì)的地方歡迎指正。

函數(shù)參數(shù)不帶“*”,"*" 與 "**"的區(qū)別

理解這個(gè)問(wèn)題得關(guān)鍵在于要分開(kāi)理解調(diào)用和聲明語(yǔ)法中3者得區(qū)別.

函數(shù)調(diào)用區(qū)別

1. 不同類型的參數(shù)簡(jiǎn)述

#這里先說(shuō)明python函數(shù)調(diào)用得語(yǔ)法為:

代碼如下:

func(positional_args, keyword_args,

*tuple_grp_nonkw_args, **dict_grp_kw_args)

#為了方便說(shuō)明,之后用以下函數(shù)進(jìn)行舉例

def test(a,b,c,d,e):

print a,b,c,d,e

舉個(gè)例子來(lái)說(shuō)明這4種調(diào)用方式得區(qū)別:

代碼如下:

#-------------------------------

#positional_args方式

>>> test(1,2,3,4,5)

1 2 3 4 5

#這種調(diào)用方式的函數(shù)處理等價(jià)于

a,b,c,d,e = 1,2,3,4,5

print a,b,c,d,e

#-------------------------------

#keyword_args方式

>>> test(a=1,b=3,c=4,d=2,e=1)

1 3 4 2 1

#這種處理方式得函數(shù)處理等價(jià)于

a=1

b=3

c=4

d=2

e=1

print a,b,c,d,e

#-------------------------------

#*tuple_grp_nonkw_args方式

>>> x = 1,2,3,4,5

>>> test(*x)

1 2 3 4 5

#這種方式函數(shù)處理等價(jià)于

代碼如下:

a,b,c,d,e = x

print a,b,c,d,e

#特別說(shuō)明:x也可以為dict類型,x為dick類型時(shí)將鍵傳遞給函數(shù)

>>> y

{'a': 1, 'c': 6, 'b': 2, 'e': 1, 'd': 1}

>>> test(*y)

a c b e d

#---------------------------------

#**dict_grp_kw_args方式

>>> y

{'a': 1, 'c': 6, 'b': 2, 'e': 1, 'd': 1}

>>> test(**y)

1 2 6 1 1

#這種函數(shù)處理方式等價(jià)于

a = y['a']

b = y['b']

... #c,d,e不再贅述

print a,b,c,d,e

2. 不同類型參數(shù)混用需要注意的一些細(xì)節(jié)

  接下來(lái)說(shuō)明不同參數(shù)類型混用的情況,要理解不同參數(shù)混用得語(yǔ)法需要理解以下幾方面內(nèi)容.

  首先要明白,函數(shù)調(diào)用使用參數(shù)類型必須嚴(yán)格按照順序,不能隨意調(diào)換順序,否則會(huì)報(bào)錯(cuò). 如 (a=1,2,3,4,5)會(huì)引發(fā)錯(cuò)誤,; (*x,2,3)也會(huì)被當(dāng)成非法.

  其次,函數(shù)對(duì)不同方式處理的順序也是按照上述的類型順序.因?yàn)?keyword_args方式和**dict_grp_kw_args方式對(duì)參數(shù)一一指定,所以無(wú)所謂順序.所以只需要考慮順序賦值(positional_args)和列表賦值(*tuple_grp_nonkw_args)的順序.因此,可以簡(jiǎn)單理解為只有#positional_args方式,#*tuple_grp_nonkw_args方式有邏輯先后順序的.

  最后,參數(shù)是不允許多次賦值的.

  舉個(gè)例子說(shuō)明,順序賦值(positional_args)和列表賦值(*tuple_grp_nonkw_args)的邏輯先后關(guān)系:

代碼如下:

#只有在順序賦值,列表賦值在結(jié)果上存在羅輯先后關(guān)系

#正確的例子1

>>> x = {3,4,5}

>>> test(1,2,*x)

1 2 3 4 5

#正確的例子2

>>> test(1,e=2,*x)

1 3 4 5 2

#錯(cuò)誤的例子

>>> test(1,b=2,*x)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: test() got multiple values for keyword argument 'b'

#正確的例子1,處理等價(jià)于

a,b = 1,2 #順序參數(shù)

c,d,e = x #列表參數(shù)

print a,b,c,d,e

#正確的例子2,處理等價(jià)于

a = 1 #順序參數(shù)

e = 2 #關(guān)鍵字參數(shù)

b,c,d = x #列表參數(shù)

#錯(cuò)誤的例子,處理等價(jià)于

a = 1 #順序參數(shù)

b = 2 #關(guān)鍵字參數(shù)

b,c,d = x #列表參數(shù)

#這里由于b多次賦值導(dǎo)致異常,可見(jiàn)只有順序參數(shù)和列表參數(shù)存在羅輯先后關(guān)系

函數(shù)聲明區(qū)別

  理解了函數(shù)調(diào)用中不同類型參數(shù)得區(qū)別之后,再來(lái)理解函數(shù)聲明中不同參數(shù)得區(qū)別就簡(jiǎn)單很多了.

1. 函數(shù)聲明中的參數(shù)類型說(shuō)明

  函數(shù)聲明只有3種類型, arg, *arg , **arg 他們得作用和函數(shù)調(diào)用剛好相反. 調(diào)用時(shí)*tuple_grp_nonkw_args將列表轉(zhuǎn)換為順序參數(shù),而聲明中的*arg的作用是將順序賦值(positional_args)轉(zhuǎn)換為列表. 調(diào)用時(shí)**dict_grp_kw_args將字典轉(zhuǎn)換為關(guān)鍵字參數(shù),而聲明中**arg則反過(guò)來(lái)將關(guān)鍵字參數(shù)(keyword_args)轉(zhuǎn)換為字典.

特別提醒:*arg 和 **arg可以為空值.

以下舉例說(shuō)明上述規(guī)則:

代碼如下:

#arg, *arg和**arg作用舉例

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

print a,b,c

#---------------------------

#*arg 和 **arg可以不傳遞參數(shù)

>>> test2(1)

1 () {}

#arg必須傳遞參數(shù)

>>> test2()

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: test2() takes at least 1 argument (0 given)

#----------------------------

#*arg將順positional_args轉(zhuǎn)換為列表

>>> test2(1,2,[1,2],{'a':1,'b':2})

1 (2, [1, 2], {'a': 1, 'b': 2}) {}

#該處理等價(jià)于

a = 1 #arg參數(shù)處理

b = 2,[1,2],{'a':1,'b':2} #*arg參數(shù)處理

c = dict() #**arg參數(shù)處理

print a,b,c

#-----------------------------

#**arg將keyword_args轉(zhuǎn)換為字典

>>> test2(1,2,3,d={1:2,3:4}, c=12, b=1)

1 (2, 3) {'c': 12, 'b': 1, 'd': {1: 2, 3: 4}}

#該處理等價(jià)于

a = 1 #arg參數(shù)處理

b= 2,3 #*arg參數(shù)處理

#**arg參數(shù)處理

c = dict()

c['d'] = {1:2, 3:4}

c['c'] = 12

c['b'] = 1

print a,b,c

2. 處理順序問(wèn)題

  函數(shù)總是先處理arg類型參數(shù),再處理*arg和**arg類型的參數(shù). 因?yàn)?arg和**arg針對(duì)的調(diào)用參數(shù)類型不同,所以不需要考慮他們得順序.

代碼如下:

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

print a,b,c

>>> test2(1, b=[1,2,3], c={1:2, 3:4},a=1)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: test2() got multiple values for keyword argument 'a'

#這里會(huì)報(bào)錯(cuò)得原因是,總是先處理arg類型得參數(shù)

#該函數(shù)調(diào)用等價(jià)于

#處理arg類型參數(shù):

a = 1

a = 1 #多次賦值,導(dǎo)致異常

#處理其他類型參數(shù)

...

print a,b,c

閉包

  python的函數(shù),原本只能訪問(wèn)兩個(gè)區(qū)域的變量:全局,和局部(函數(shù)上下文). 實(shí)際上,函數(shù)本身也是一個(gè)對(duì)象,也有自己的作用域. 閉包通過(guò)函數(shù)與引用集合的組合,使得函數(shù)可以在它被定義的區(qū)域之外執(zhí)行. 這個(gè)集合可以通過(guò)func_closure來(lái)獲取這個(gè)引用集合. 這與python處理全局變量得方式一樣,只不過(guò)全局變量將引用集合存儲(chǔ)在__globals__字段中.func_closure是一個(gè)存儲(chǔ)cell類型的元組,每個(gè)cell存儲(chǔ)一個(gè)上下文變量.

  另外,舊版本得python的內(nèi)部函數(shù)不能在其他作用域使用的原因,并不是因?yàn)槊總€(gè)作用域的變量嚴(yán)格相互隔離,而是脫離原本的作用域后,函數(shù)失去了原本上下文的引用。需要注意的是,閉包存儲(chǔ)的上下文信息一樣是淺拷貝,所以傳遞給內(nèi)部函數(shù)的可變對(duì)象仍然會(huì)被其他擁有該對(duì)象引用得變量修改.

舉個(gè)例子:

代碼如下:

>>> def foo(x,y):

... def bar():

... print x,y

... return bar

...

#查看func_closure的引用信息

>>> a = [1,2]

>>> b = foo(a,0)

>>> b.func_closure[0].cell_contents

[1, 2]

>>> b.func_closure[1].cell_contents

0

>>> b()

[1, 2] 0

#可變對(duì)象仍然能被修改

>>> a.append(3)

>>> b.func_closure[0].cell_contents

[1, 2, 3]

>>> b()

[1, 2, 3] 0

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:Python函數(shù)參數(shù)類型*、**的區(qū)別
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報(bào)班

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美在线日韩在线| 国产精品视频久久久| 国内一区二区在线视频观看| 欧美岛国在线观看| 久久天堂av综合合色| 久久精品国产77777蜜臀| 亚洲男人第一av网站| 一本色道综合亚洲| 亚洲美洲欧洲综合国产一区| 91久久精品国产91久久| 激情自拍一区| 亚洲国产高清aⅴ视频| 在线精品亚洲一区二区| 精品盗摄一区二区三区| 亚洲第一网站免费视频| 亚洲激情成人网| 亚洲精品一区二区三区不| 亚洲黄页一区| 99在线精品视频| 亚洲欧美视频在线观看| 欧美在线观看日本一区| 久久这里有精品视频| 免费在线国产精品| 欧美激情综合五月色丁香小说| 欧美激情视频网站| 国产精品极品美女粉嫩高清在线| 国产精品日韩在线观看| 国产亚洲一区二区精品| 羞羞答答国产精品www一本| 西西人体一区二区| 久久国产免费看| 牛人盗摄一区二区三区视频| 欧美精品在线观看| 国产精品久久二区| 精品51国产黑色丝袜高跟鞋| 亚洲精品一区二区三区蜜桃久| 亚洲毛片视频| 欧美亚洲视频| 欧美大片免费久久精品三p| 欧美日韩一区二| 国产偷国产偷亚洲高清97cao| 亚洲国产99| 亚洲欧美成人网| 麻豆freexxxx性91精品| 国产精品av一区二区| 国产一区二区三区成人欧美日韩在线观看| 国内精品久久久久伊人av| 亚洲精品美女久久久久| 欧美一区二区免费| 欧美激情视频网站| 国产亚洲精品aa午夜观看| 亚洲精品免费观看| 欧美一区二区三区电影在线观看| 欧美激情精品久久久久久大尺度 | 亚洲精品乱码久久久久久| 亚洲一区二区在线播放| 麻豆成人综合网| 国产精品一香蕉国产线看观看 | 国产欧美日韩一区| 亚洲日本视频| 久久九九国产精品怡红院| 欧美日韩精品中文字幕| 国产一区美女| 亚洲午夜日本在线观看| 蜜臀久久99精品久久久久久9| 国产精品制服诱惑| 一本久道久久综合中文字幕| 久久综合狠狠| 国产一区二区三区在线免费观看| 一区二区电影免费在线观看| 欧美69wwwcom| 一区在线播放| 久久精品一区二区国产| 国产精品人成在线观看免费| 艳妇臀荡乳欲伦亚洲一区| 女人色偷偷aa久久天堂| 极品av少妇一区二区| 欧美在线免费观看视频| 国产精品白丝jk黑袜喷水| 日韩亚洲欧美中文三级| 欧美va亚洲va香蕉在线| 尤物yw午夜国产精品视频明星| 欧美一区二区高清| 国产精品日韩欧美一区二区| 中文一区字幕| 狠狠色丁香久久婷婷综合_中| 午夜视频在线观看一区二区| 欧美无砖砖区免费| 亚洲图片在线观看| 欧美日韩精品免费观看视一区二区| 亚洲激情成人网| 欧美激情在线观看| 亚洲精品美女久久7777777| 欧美国产第二页| 亚洲日本中文| 欧美精品久久久久久久免费观看 | 麻豆成人在线观看| 激情亚洲网站| 欧美成人免费全部观看天天性色| 在线日韩欧美| 欧美激情黄色片| 亚洲最新视频在线| 国产精品v欧美精品v日韩精品| 亚洲欧美激情视频| 国产亚洲欧洲一区高清在线观看| 久久精品99国产精品酒店日本| 国产曰批免费观看久久久| 久久久久九九九| 在线欧美日韩| 欧美人与禽性xxxxx杂性| 亚洲视频欧美视频| 国产婷婷色一区二区三区在线| 久久夜色精品国产| 亚洲精品在线一区二区| 国产精品久久久久久久7电影| 欧美一区二区三区日韩| 国内视频精品| 欧美波霸影院| 亚洲一二三级电影| 黑人中文字幕一区二区三区| 欧美国产综合视频| 亚洲男人第一av网站| 黄色成人在线网址| 欧美日韩国产色综合一二三四 | 亚洲最快最全在线视频| 国产欧美精品| 欧美国产日韩在线| 性久久久久久| 亚洲国产欧美日韩| 国产精品日日摸夜夜摸av| 久久亚洲欧美国产精品乐播| 亚洲最新在线| 精品999在线观看| 国产精品爱久久久久久久| 玖玖玖国产精品| 亚洲影视综合| 亚洲黄色成人| 国产视频在线一区二区| 欧美日韩成人一区| 久久蜜臀精品av| 亚洲在线免费视频| 亚洲精品国产精品国产自| 国产精品亚洲综合天堂夜夜| 欧美激情综合五月色丁香| 欧美主播一区二区三区| 欧美日韩国产经典色站一区二区三区| 性久久久久久久| 99视频精品免费观看| 影音先锋日韩精品| 国产精品播放| 欧美精品在线一区二区| 米奇777超碰欧美日韩亚洲| 欧美一区二区三区的| 亚洲无毛电影| 一本色道久久精品| 亚洲精品四区| 亚洲国产岛国毛片在线| 国产综合色在线视频区| 国产伦精品免费视频| 国产精品爱啪在线线免费观看| 欧美日韩xxxxx| 欧美精品在线视频| 欧美乱妇高清无乱码| 欧美福利视频一区| 免费观看日韩av| 噜噜噜久久亚洲精品国产品小说| 久久精品91久久久久久再现| 欧美一区二区三区在线播放| 午夜免费日韩视频| 亚洲欧美国产日韩中文字幕| 亚洲一区二区毛片| 亚洲视频成人| 亚洲男人av电影| 欧美一级成年大片在线观看| 午夜精品理论片| 欧美一区二区三区免费大片| 欧美自拍丝袜亚洲| 久久久久久久一区二区| 久久婷婷亚洲| 欧美不卡在线| 欧美日韩色一区| 国产精品成人一区二区三区夜夜夜| 国产精品ⅴa在线观看h| 国产美女精品视频免费观看| 国产一区二区成人| 亚洲成色999久久网站| 亚洲人久久久| 一区二区电影免费观看| 亚洲一区二区三区在线| 亚洲精品少妇网址| 亚洲一区二区三区成人在线视频精品| 亚洲中无吗在线| 久久久久久久91| 欧美成人免费播放| 欧美视频在线一区二区三区| 国产欧美日本在线| 亚洲国产岛国毛片在线| 一区二区三区日韩精品| 久久爱www| 欧美另类高清视频在线|