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

python函數參數圖解 函數參數Python

python 函數參數的類型

1. 不同類型的參數簡述

我們提供的服務有:做網站、網站制作、微信公眾號開發(fā)、網站優(yōu)化、網站認證、長陽ssl等。為成百上千企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的長陽網站制作公司

#這里先說明python函數調用得語法為:

復制代碼

代碼如下:

func(positional_args,

keyword_args,

*tuple_grp_nonkw_args,

**dict_grp_kw_args)

#為了方便說明,之后用以下函數進行舉例

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

print a,b,c,d,e

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

復制代碼

代碼如下:

#

#positional_args方式

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

1 2 3 4 5

#這種調用方式的函數處理等價于

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

#這種處理方式得函數處理等價于

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

#這種方式函數處理等價于

復制代碼

代碼如下:

a,b,c,d,e = x

print

a,b,c,d,e

#特別說明:x也可以為dict類型,x為dick類型時將鍵傳遞給函數

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

#這種函數處理方式等價于

a = y['a']

b = y['b']

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

print

a,b,c,d,e

2.

不同類型參數混用需要注意的一些細節(jié)

接下來說明不同參數類型混用的情況,要理解不同參數混用得語法需要理解以下幾方面內容.

首先要明白,函數調用使用參數類型必須嚴格按照順序,不能隨意調換順序,否則會報錯. 如 (a=1,2,3,4,5)會引發(fā)錯誤,;

(*x,2,3)也會被當成非法.

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

最后,參數是不允許多次賦值的.

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

復制代碼

代碼如下:

#只有在順序賦值,列表賦值在結果上存在羅輯先后關系

#正確的例子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

#錯誤的例子

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,處理等價于

a,b = 1,2 #順序參數

c,d,e = x #列表參數

print a,b,c,d,e

#正確的例子2,處理等價于

a = 1 #順序參數

e = 2 #關鍵字參數

b,c,d = x #列表參數

#錯誤的例子,處理等價于

a = 1 #順序參數

b = 2 #關鍵字參數

b,c,d = x

#列表參數

#這里由于b多次賦值導致異常,可見只有順序參數和列表參數存在羅輯先后關系

函數聲明區(qū)別

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

1. 函數聲明中的參數類型說明

函數聲明只有3種類型, arg, *arg , **arg 他們得作用和函數調用剛好相反.

調用時*tuple_grp_nonkw_args將列表轉換為順序參數,而聲明中的*arg的作用是將順序賦值(positional_args)轉換為列表.

調用時**dict_grp_kw_args將字典轉換為關鍵字參數,而聲明中**arg則反過來將關鍵字參數(keyword_args)轉換為字典.

特別提醒:*arg

和 **arg可以為空值.

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

復制代碼

代碼如下:

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

def

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

print a,b,c

#

#*arg 和

**arg可以不傳遞參數

test2(1)

1 () {}

#arg必須傳遞參數

test2()

Traceback (most recent call last):

File "stdin", line 1,

in module

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

#

#*arg將順positional_args轉換為列表

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

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

{}

#該處理等價于

a = 1 #arg參數處理

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

c =

dict() #**arg參數處理

print a,b,c

#

#**arg將keyword_args轉換為字典

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}}

#該處理等價于

a = 1 #arg參數處理

b= 2,3 #*arg參數處理

#**arg參數處理

c =

dict()

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

c['c'] = 12

c['b'] = 1

print

a,b,c

2. 處理順序問題

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

因為*arg和**arg針對的調用參數類型不同,所以不需要考慮他們得順序.

復制代碼

代碼如下:

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'

#這里會報錯得原因是,總是先處理arg類型得參數

#該函數調用等價于

#處理arg類型參數:

a = 1

a = 1

#多次賦值,導致異常

#處理其他類型參數

...

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

#可變對象仍然能被修改

a.append(3)

b.func_closure[0].cell_contents

[1, 2, 3]

b()

[1, 2, 3] 0

python 函數參數類型

python 的函數參數類型分為4種:

1.位置參數:調用函數時根據函數定義的參數位置來傳遞參數,位置參數也可以叫做必要參數,函數調用時必須要傳的參數。

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

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

當我們運行上面的程序,輸出:

當函數需要兩個必要參數,但是調用函數只給了一個參數時,程序會拋出異常

add(1)

當我們運行上面的程序,輸出:

當函數需要兩個必要參數,但是調用函數只給了三個參數時,程序會拋出異常

add(1,2,3)

當我們運行上面的程序,輸出

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

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

add(y=2,x=1) #以關健字方式傳入參數(可以不按順序)

正確的調用方式

add(x=1, y=2)

add(y=2, x=1)

add(1, y=2)

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

錯誤的調用方式

add(x=1, 2)

add(y=2, 1)

以上調用都會拋出SyntaxError 異常

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

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

默認參數的函數定義

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

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

默認參數的函數調用

注意:定義默認參數默認參數最好不要定義為可變對象,容易掉坑

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

可變對象,該對象所指向的內存中的值可以被改變,dict,list

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

舉一個簡單示例

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

可變參數主要有兩類:

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

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

*args 的用法

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

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

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

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

理解* * kwargs

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

下篇詳細講解 *args, **kwargs 的參數傳遞和使用敬請關注

python怎么查看函數有什么參數

在開發(fā)中我們可以借助于相關插件或使用Python內置函數"help()”來查看某個函數的參數說明,以查看內置函數sorted()為例:

函數參數包括:必選參數、默認參數、可選參數、關鍵字參數。

1、默認參數:放在必選參數之后,計算x平方的函數:

這樣的話每次計算不同冪函數都要重寫函數,非常麻煩,可使用以下代碼計算:

默認參數最大好處就是降低調用函數的難度。

2、可變參數:就是傳入的參數個數是可變的,可以是1個、2個到任意個,還可以是0個,在參數前面加上*就是可變參數。在函數內部,參數numbers接收得到的是一個tuple,調用該函數時,可以傳入任意個參數,包括0個參數:

也可以類似可變參數,先組裝一個dict,然后,把該dict轉換為關鍵字參數傳進去:

分享文章:python函數參數圖解 函數參數Python
本文路徑:http://chinadenli.net/article8/doojcip.html

成都網站建設公司_創(chuàng)新互聯,為您提供軟件開發(fā)營銷型網站建設微信公眾號定制開發(fā)用戶體驗定制網站

廣告

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

成都定制網站網頁設計