亚洲AVI,黑人巨茎大战欧美白妇,初高中生洗澡自慰高清网站,欧美日韩无砖专区一中文字

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)

python函數(shù)參數(shù)是類的簡單介紹

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

python 的函數(shù)參數(shù)類型分為4種:

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站制作、成都做網(wǎng)站與策劃設(shè)計,五大連池網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:五大連池等地區(qū)。五大連池做網(wǎng)站價格咨詢:13518219792

1.位置參數(shù):調(diào)用函數(shù)時根據(jù)函數(shù)定義的參數(shù)位置來傳遞參數(shù),位置參數(shù)也可以叫做必要參數(shù),函數(shù)調(diào)用時必須要傳的參數(shù)。

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

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

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

當函數(shù)需要兩個必要參數(shù),但是調(diào)用函數(shù)只給了一個參數(shù)時,程序會拋出異常

add(1)

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

當函數(shù)需要兩個必要參數(shù),但是調(diào)用函數(shù)只給了三個參數(shù)時,程序會拋出異常

add(1,2,3)

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

2.關(guān)鍵字參數(shù):用于函數(shù)調(diào)用,通過“鍵-值”形式加以指定??梢宰尯瘮?shù)更加清晰、容易使用,同時也清除了參數(shù)的順序需求。

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

add(y=2,x=1) #以關(guān)健字方式傳入?yún)?shù)(可以不按順序)

正確的調(diào)用方式

add(x=1, y=2)

add(y=2, x=1)

add(1, y=2)

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

錯誤的調(diào)用方式

add(x=1, 2)

add(y=2, 1)

以上調(diào)用都會拋出SyntaxError 異常

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

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

默認參數(shù)的函數(shù)定義

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

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

默認參數(shù)的函數(shù)調(diào)用

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

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

可變對象,該對象所指向的內(nèi)存中的值可以被改變,dict,list

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

舉一個簡單示例

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

可變參數(shù)主要有兩類:

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

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

*args 的用法

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

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

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

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

理解* * kwargs

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

下篇詳細講解 *args, **kwargs 的參數(shù)傳遞和使用敬請關(guān)注

python-函數(shù)可變參數(shù)類型

python中的函數(shù),大多需要配置參數(shù),以下是幾種函數(shù)的參數(shù)類型:

1.必備參數(shù):以正確的順序、個數(shù)傳入函數(shù)。調(diào)用時的參數(shù)情況要和聲明時一樣。最常用的情況。

def tplink(a,b):

c=a+b+b

return c?

tplink(4,2)

2.關(guān)鍵字參數(shù):使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時參數(shù)的順序和聲明時不一致,因為python解析器會在調(diào)用函數(shù)時,用參數(shù)名匹配參數(shù)值。

def tplink(age1,age2):

ageall=age1+age2+age2

return ageall

tplink(age2=4,age1=2)

3.默認參數(shù):默認某個參數(shù)的取值

def tplink(age1,age2=5):

ageall=age1+age2+age2

return ageall

tplink(age1=4)

4.不定長參數(shù):在聲明時并不確定 調(diào)用時的參數(shù)數(shù)量。這種情況,可以用不定長參數(shù)進行解決,具體操作是在參數(shù)名前用*。

但不能和 關(guān)鍵字參數(shù)并用。一般在正常參數(shù)arg之后。

*args、**kwargs的定義:

這兩個都是python中的不定長參數(shù),又稱為可變參數(shù)。

*args 表示任何多個無名參數(shù),它是一個 tuple ;

**kwargs 表示關(guān)鍵字參數(shù),它是一個dict。

同時使用 * args和 ** kwargs 時,必須 * args參數(shù)列要在 ** kwargs前。且都在arg之后。

函數(shù)在調(diào)用時,會根據(jù)順序,看是否放進 *args 或者 **kwargs中。

具體可根據(jù)實際情況使用,可以 更方便靈活的接收信息。

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

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

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

復(fù)制代碼

代碼如下:

func(positional_args,

keyword_args,

*tuple_grp_nonkw_args,

**dict_grp_kw_args)

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

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

print a,b,c,d,e

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

復(fù)制代碼

代碼如下:

#

#positional_args方式

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

1 2 3 4 5

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

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

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

復(fù)制代碼

代碼如下:

a,b,c,d,e = x

print

a,b,c,d,e

#特別說明:x也可以為dict類型,x為dick類型時將鍵傳遞給函數(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ù)處理方式等價于

a = y['a']

b = y['b']

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

print

a,b,c,d,e

2.

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

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

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

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

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

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

舉個例子說明,順序賦值(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

#錯誤的例子

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 #順序參數(shù)

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

print a,b,c,d,e

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

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

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

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

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

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ū)別就簡單很多了.

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

函數(shù)聲明只有3種類型, arg, *arg , **arg 他們得作用和函數(shù)調(diào)用剛好相反.

調(diào)用時*tuple_grp_nonkw_args將列表轉(zhuǎn)換為順序參數(shù),而聲明中的*arg的作用是將順序賦值(positional_args)轉(zhuǎn)換為列表.

調(diào)用時**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})

{}

#該處理等價于

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

#該處理等價于

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ù).

因為*arg和**arg針對的調(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'

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

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

#處理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

#可變對象仍然能被修改

a.append(3)

b.func_closure[0].cell_contents

[1, 2, 3]

b()

[1, 2, 3] 0

Python參數(shù)類型

上一期我們學習參數(shù)傳遞怎么傳遞,也了解了參數(shù)的幾種類型。

首先,我們再來回顧一下,形參和實參:

形參是在定義函數(shù)時定義的,放在函數(shù)名后面的圓括號里,可為空

實參是調(diào)用函數(shù)時為形參傳入具體的參數(shù)值

簡單總結(jié)一下,誰調(diào)用函數(shù),誰就負責傳入?yún)?shù)。

好吶,本期我們來詳細學習函數(shù)幾種參數(shù)類型,大綱如下:

python函數(shù)的參數(shù)名是無意義的,Python允許在調(diào)用函數(shù)時通過通過名字來傳入?yún)?shù)值。

位置參數(shù):按照形參位置傳入的參數(shù)

調(diào)用函數(shù)時,實參默認按位置順序傳遞的。同時實參個數(shù)也要和形參匹配

舉一個小栗子

如果實參的個數(shù)與形參不匹配時,調(diào)用函數(shù)運行就會報錯

Python中,形參與調(diào)用函數(shù)緊密聯(lián)系在一起的。

關(guān)鍵字參數(shù):調(diào)用函數(shù)時,使形參名稱來傳遞參數(shù),形式為“形參名=實參”

關(guān)鍵字參數(shù),又叫命名參數(shù),傳遞時無需考慮參數(shù)位置和順序

舉一個小栗子

默認參數(shù):定義函數(shù)時,我們可以為形參提前設(shè)置具體的值。

在定義函數(shù)時,默認參數(shù)要放到位置等其他參數(shù)后面

在調(diào)用函數(shù)時,默認參數(shù)是可選的。如果傳入新值,則會覆蓋默認值

舉一個小栗子

注意,默認值不能位于位置參數(shù)前面,否則程序會報錯誤

不定長參數(shù)又名可變參數(shù)。

不定長參數(shù)指的是可變數(shù)量的參數(shù),分兩種情況:

如果不定長參數(shù)后面,可以新增參數(shù)嗎?

我們通過例子來看,會發(fā)生什么?

運行上面的程序,Python解釋器會報錯

原因是,形參a已經(jīng)是不定長參數(shù),我們調(diào)用的test(2,3,4)傳入的三個實參,系統(tǒng)自動把它們屬于形參a的值,形參b 和形參c就等于沒有值傳入,這時候系統(tǒng)就認為,調(diào)用函數(shù)的對象,參數(shù)沒有傳夠。

為了解決這一報錯,python引入了 強制命名參數(shù)

規(guī)定,調(diào)用不定參數(shù)后面有跟位置參數(shù)的函數(shù)時,傳入給位置參數(shù)時,必須要強制命名參進行傳參。

逆向參數(shù)收集針對的對象傳入函數(shù)的實參

調(diào)用函數(shù)時,如果實參是元組,列表或者字典,通過在實參前面加入星號,可以自動把元素進行隔開,然后再轉(zhuǎn)入給函數(shù)進行處理

舉一個小栗子

本期,我們詳細學習了參數(shù)幾種類型,為后面我們學習函數(shù),打好基礎(chǔ)。

實踐是檢驗真理的過程,大家多動手練習練習,會有不一樣的奇妙旅程~

好吶,以上是本期內(nèi)容,歡迎大佬們評論區(qū)指正~


網(wǎng)頁題目:python函數(shù)參數(shù)是類的簡單介紹
分享網(wǎng)址:http://news.spvevtbd.cn/article/doipedi.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP