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

arg函數(shù)python arg函數(shù)怎么算

Python 的函數(shù)是怎么傳遞參數(shù)的?

首先你要明白,Python的函數(shù)傳遞方式是賦值,而賦值是通過建立變量與對(duì)象的關(guān)聯(lián)實(shí)現(xiàn)的。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、剛察網(wǎng)站維護(hù)、網(wǎng)站推廣。

對(duì)于你的代碼:

執(zhí)行 d = 2時(shí),你在__main__里創(chuàng)建了d,并讓它指向2這個(gè)整型對(duì)象。

執(zhí)行函數(shù)add(d)過程中:

d被傳遞給add()函數(shù)后,在函數(shù)內(nèi)部,num也指向了__main__中的2

但執(zhí)行num = num + 10之后,新建了對(duì)象12,并讓num指向了這個(gè)新對(duì)象——12。

如果你明白函數(shù)中的局部變量與__main__中變量的區(qū)別,那么很顯然,在__main__中,d仍在指著2這個(gè)對(duì)象,它沒有改變。因此,你打印d時(shí)得到了2。

如果你想讓輸出為12,最簡(jiǎn)潔的辦法是:

在函數(shù)add()里增加return num

調(diào)用函數(shù)時(shí)使用d = add(d)

代碼如下:

def add(num):

num += 10

return num

d = 2

d = add(d)

print d

python中對(duì)組合數(shù)據(jù)類型x進(jìn)行排序的內(nèi)置函數(shù)是

python有兩個(gè)內(nèi)置的函數(shù)用于實(shí)現(xiàn)排序,一個(gè)是list.sort()函數(shù),一個(gè)是sorted()函數(shù)。

區(qū)別1:list.sort()函數(shù)只能處理list類型數(shù)據(jù)的排序;sorted()則可以處理多種類型數(shù)據(jù)的排序。

區(qū)別2:list.sort()會(huì)修改原來的list為排序后的結(jié)果;sorted()不會(huì)修改原來的數(shù)據(jù),只是返回一個(gè)排序后的對(duì)象。

下面來動(dòng)手寫點(diǎn)代碼進(jìn)行測(cè)試:

list進(jìn)行簡(jiǎn)單的排序

1 a=['a','f','c','x','e']2 a.sort()3 a4 [a','c','e','f','x']

sorted()進(jìn)行簡(jiǎn)單排序

1 a=['a','f','c','x','e']2 a_new=sorted(a)3 a_new4 ['a', 'c', 'e', 'f', 'x']

list.sort()和sorted都有默認(rèn)的參數(shù)reverse,該參數(shù)的默認(rèn)值為“False”,即默認(rèn)升序排列。如果要進(jìn)行降序排列:

1 a=['a','f','c','x','e']2 a_new=sorted(a,reverse=True)3 a_new4 ['x', 'f', 'e', 'c', 'a']

對(duì)元組進(jìn)行排列,不能使用list.sort()函數(shù):

1 a=('a','f','c','x','e')2 a_new=a.sort()3

4 ttributeError: 'tuple' object has no attribute 'sort'

對(duì)字典的排序可以按照字典的key或者value進(jìn)行排序:

1 dic={"aa":11,"ff":5,"ee":22}2 printsorted(dic.keys())3 ['aa', 'ee', 'ff']

從python2.4開始list.sort()和sorted()都引入了key參數(shù)來指定一個(gè)函數(shù)進(jìn)行排序,有了key參數(shù)以后我們就可以對(duì)更加復(fù)雜的數(shù)據(jù)進(jìn)行排序 。

假如需要排序的數(shù)據(jù)為一個(gè)list,但list的每一個(gè)元素都是一個(gè)字典,排序的方法如下:

dic=[{"name":"sunny","age":20},

{"name":"bell","age":5},

{"name":"jim","age":1},

{"name":"jan","age":10}]print sorted(dic,key=lambda arg:arg.get('age'),reverse=False) #按照每個(gè)字典的age的值進(jìn)行排序,字典的方法dict.get(key)將返回指定鍵的值。

#輸出結(jié)果為:[{'age': 1, 'name': 'jim'}, {'age': 5, 'name': 'bell'}, {'age': 10, 'name': 'jan'}, {'age': 20, 'name': 'sunny'}]

print sorted(dic,key=lambda arg:arg.get('name'),reverse=False) #按照每個(gè)字典的name的值進(jìn)行排序

#輸出結(jié)果為:[{'age': 5, 'name': 'bell'}, {'age': 10, 'name': 'jan'}, {'age': 1, 'name': 'jim'}, {'age': 20, 'name': 'sunny'}]

假如需要排序的數(shù)據(jù)為一個(gè)二維的list,即list的每一個(gè)元素也是一個(gè)list,方法與上面的例子類似:

a=[['100','8','30'],['200','5','50'],['300','1','20']]print sorted(a,key=lambda arg:arg[1]) #按照每個(gè)list的第1個(gè)元素進(jìn)行排序

[['300', '1', '20'], ['200', '5', '50'], ['100', '8', '30']]

前面的2個(gè)例子中,key參數(shù)的值都是函數(shù)。在sorted函數(shù)中,key參數(shù)后面的函數(shù)的參數(shù)的數(shù)量只能是一個(gè)。lambda arg:arg.get('age')是一個(gè)lambda匿名函數(shù),它是一個(gè)沒有函數(shù)名的單語句函數(shù)。冒號(hào)左邊是參數(shù),冒號(hào)右邊的返回值,返回值將被用于排序。

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

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

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

復(fù)制代碼

代碼如下:

func(positional_args,

keyword_args,

*tuple_grp_nonkw_args,

**dict_grp_kw_args)

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

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

print a,b,c,d,e

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

復(fù)制代碼

代碼如下:

#

#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à)于

復(fù)制代碼

代碼如下:

a,b,c,d,e = x

print

a,b,c,d,e

#特別說明: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é)

接下來說明不同參數(shù)類型混用的情況,要理解不同參數(shù)混用得語法需要理解以下幾方面內(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ù)一一指定,所以無所謂順序.所以只需要考慮順序賦值(positional_args)和列表賦值(*tuple_grp_nonkw_args)的順序.因此,可以簡(jiǎn)單理解為只有#positional_args方式,#*tuple_grp_nonkw_args方式有邏輯先后順序的.

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

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

復(fù)制代碼

代碼如下:

#只有在順序賦值,列表賦值在結(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)致異常,可見只有順序參數(shù)和列表參數(shù)存在羅輯先后關(guān)系

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

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

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

函數(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ān)鍵字參數(shù)(keyword_args)轉(zhuǎn)換為字典.

特別提醒:*arg

和 **arg可以為空值.

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

復(fù)制代碼

代碼如下:

#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. 處理順序問題

函數(shù)總是先處理arg類型參數(shù),再處理*arg和**arg類型的參數(shù).

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

復(fù)制代碼

代碼如下:

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

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

b()

[1, 2] 0

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

a.append(3)

b.func_closure[0].cell_contents

[1, 2, 3]

b()

[1, 2, 3] 0

當(dāng)前標(biāo)題:arg函數(shù)python arg函數(shù)怎么算
當(dāng)前URL:http://chinadenli.net/article16/dojoddg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管移動(dòng)網(wǎng)站建設(shè)虛擬主機(jī)云服務(wù)器響應(yīng)式網(wǎng)站標(biāo)簽優(yōu)化

廣告

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

商城網(wǎng)站建設(shè)