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

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

python函數(shù)可變 python函數(shù)可變長參數(shù)

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

Python函數(shù)的參數(shù)類型主要包括必選參數(shù)、可選參數(shù)、可變參數(shù)、位置參數(shù)和關(guān)鍵字參數(shù),本文介紹一下他們的定義以及可變數(shù)據(jù)類型參數(shù)傳遞需要注意的地方。

目前創(chuàng)新互聯(lián)公司已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、杭錦后網(wǎng)站維護等服務(wù),公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

必選參數(shù)(Required arguments)是必須輸入的參數(shù),比如下面的代碼,必須輸入2個參數(shù),否則就會報錯:

其實上面例子中的參數(shù) num1和num2也屬于關(guān)鍵字參數(shù),比如可以通過如下方式調(diào)用:

執(zhí)行結(jié)果:

可選參數(shù)(Optional arguments)可以不用傳入函數(shù),有一個默認值,如果沒有傳入會使用默認值,不會報錯。

位置參數(shù)(positional arguments)根據(jù)其在函數(shù)定義中的位置調(diào)用,下面是pow()函數(shù)的幫助信息:

x,y,z三個參數(shù)的的順序是固定的,并且不能使用關(guān)鍵字:

輸出:

在上面的pow()函數(shù)幫助信息中可以看到位置參數(shù)后面加了一個反斜杠 / ,這是python內(nèi)置函數(shù)的語法定義,Python開發(fā)人員不能在python3.8版本之前的代碼中使用此語法。但python3.0到3.7版本可以使用如下方式定義位置參數(shù):

星號前面的參數(shù)為位置參數(shù)或者關(guān)鍵字參數(shù),星號后面是強制關(guān)鍵字參數(shù),具體介紹見強制關(guān)鍵字參數(shù)。

python3.8版本引入了強制位置參數(shù)(Positional-Only Parameters),也就是我們可以使用反斜杠 / 語法來定義位置參數(shù)了,可以寫成如下形式:

來看下面的例子:

python3.8運行:

不能使用關(guān)鍵字參數(shù)形式賦值了。

可變參數(shù) (varargs argument) 就是傳入的參數(shù)個數(shù)是可變的,可以是0-n個,使用星號( * )將輸入?yún)?shù)自動組裝為一個元組(tuple):

執(zhí)行結(jié)果:

關(guān)鍵字參數(shù)(keyword argument)允許將任意個含參數(shù)名的參數(shù)導入到python函數(shù)中,使用雙星號( ** ),在函數(shù)內(nèi)部自動組裝為一個字典。

執(zhí)行結(jié)果:

上面介紹的參數(shù)可以混合使用:

結(jié)果:

注意:由于傳入的參數(shù)個數(shù)不定,所以當與普通參數(shù)一同使用時,必須把帶星號的參數(shù)放在最后。

強制關(guān)鍵字參數(shù)(Keyword-Only Arguments)是python3引入的特性,可參考:。 使用一個星號隔開:

在位置參數(shù)一節(jié)介紹過星號前面的參數(shù)可以是位置參數(shù)和關(guān)鍵字參數(shù)。星號后面的參數(shù)都是強制關(guān)鍵字參數(shù),必須以指定參數(shù)名的方式傳參,如果強制關(guān)鍵字參數(shù)沒有設(shè)置默認參數(shù),調(diào)用函數(shù)時必須傳參。

執(zhí)行結(jié)果:

也可以在可變參數(shù)后面命名關(guān)鍵字參數(shù),這樣就不需要星號分隔符了:

執(zhí)行結(jié)果:

在Python對象及內(nèi)存管理機制中介紹了python中的參數(shù)傳遞屬于對象的 引用傳遞 (pass by object reference),在編寫函數(shù)的時候需要特別注意。

先來看個例子:

執(zhí)行結(jié)果:

l1 和 l2指向相同的地址,由于列表可變,l1改變時,l2也跟著變了。

接著看下面的例子:

結(jié)果:

l1沒有變化!為什么不是[1, 2, 3, 4]呢?

l = l + [4]表示創(chuàng)建一個“末尾加入元素 4“的新列表,并讓 l 指向這個新的對象,l1沒有進行任何操作,因此 l1 的值不變。如果要改變l1的值,需要加一個返回值:

結(jié)果:

下面的代碼執(zhí)行結(jié)果又是什么呢?

執(zhí)行結(jié)果:

和第一個例子一樣,l1 和 l2指向相同的地址,所以會一起改變。這個問題怎么解決呢?

可以使用下面的方式:

也可以使用淺拷貝或者深度拷貝,具體使用方法可參考Python對象及內(nèi)存管理機制。這個問題在Python編程時需要特別注意。

本文主要介紹了python函數(shù)的幾種參數(shù)類型:必選參數(shù)、可選參數(shù)、可變參數(shù)、位置參數(shù)、強制位置參數(shù)、關(guān)鍵字參數(shù)、強制關(guān)鍵字參數(shù),注意他們不是完全獨立的,比如必選參數(shù)、可選參數(shù)也可以是關(guān)鍵字參數(shù),位置參數(shù)可以是必選參數(shù)或者可選參數(shù)。

另外,python中的參數(shù)傳遞屬于對象的 引用傳遞 ,在對可變數(shù)據(jù)類型進行參數(shù)傳遞時需要特別注意,如有必要,使用python的拷貝方法。

參考文檔:

--THE END--

python中變量的引用、可變和不可變類型、局部變量和全局變量

變量的引用

變量和數(shù)據(jù)都是保存在內(nèi)存中的

變量和數(shù)據(jù)是分開存儲的

數(shù)據(jù)保存在內(nèi)存中某個位置,通過地址來標記

變量保存的是數(shù)據(jù)的地址,通過地址可以找到數(shù)據(jù)在內(nèi)存空間的位置

把變量保存數(shù)據(jù)地址的過程稱為引用

變量的重新賦值修改的是變量中引用數(shù)據(jù)的內(nèi)存地址

變量之間的賦值實際是引用的傳遞

函數(shù)參數(shù)的傳遞,本質(zhì)也是引用的傳遞

函數(shù)的返回值本身也是引用的傳遞

可變和不可變類型

不可變類型,內(nèi)存中的數(shù)據(jù)不允許被修改:數(shù)字類型(int,bool,float,complex,long(2,x)、字符串、元組(tuple)

可變類型,內(nèi)存中的數(shù)據(jù)可以被修改:列表list、字典dict

無論是可變還是不可變數(shù)據(jù)類型,通過賦值語句,都會改變變量的引用

Hash函數(shù)只能接收不可變數(shù)據(jù)類型,字典的鍵也只能是不可變數(shù)據(jù)類型,字典的value值可以是任意數(shù)據(jù)類型

局部變量

1.在函數(shù)內(nèi)部定義的變量就是局部變量(作用范圍只能是當前函數(shù)內(nèi)部)

2.在函數(shù)外部無法直接訪問局部變量

3.不同的函數(shù)中可以定義同名的局部變量

4.局部變量的生命周期:從定義變量時開始,到函數(shù)運行結(jié)束

全局變量

1.在所有函數(shù)外邊定義的變量就是全局變量

2.讓所有函數(shù)都能訪問到,可以作為函數(shù)通信的橋梁

3.一般情況下,為了和普通變量的區(qū)別,需要加上g_或gl_前綴

4.全局變量一般放在所有函數(shù)的最上面

5.在函數(shù)內(nèi)部修改全局變量,必須要加上global關(guān)鍵字,如果不加global只是定義了一個同名的局部變量

函數(shù)的多個返回值

Python的位置參數(shù)、默認參數(shù)、關(guān)鍵字參數(shù)、可變參數(shù)區(qū)別

對于python函數(shù)參數(shù),對于初學者可能就是進入了迷宮,盡管我也是初學者,簡單總結(jié)一下。

說參數(shù)之前,先講一下兩個packing(包裹)和unpacking(解包裹):

輸出:

我總結(jié)不了這個概念,只能幫大家到這了

一、位置參數(shù)和關(guān)鍵字參數(shù):

調(diào)用函數(shù)時根據(jù)函數(shù)定義的參數(shù)位置來傳遞參數(shù)。

注意:

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

二、默認參數(shù):

用于定義函數(shù),為參數(shù)提供默認值,調(diào)用函數(shù)時可傳可不傳該默認參數(shù)的值(注意:所有位置參數(shù)必須出現(xiàn)在默認參數(shù)前,包括函數(shù)定義和調(diào)用)

三、可變參數(shù):

定義函數(shù)時,有時候我們不確定調(diào)用的時候會傳遞多少個參數(shù)(不傳參也可以)。此時,可用包裹(packing)位置參數(shù),或者包裹關(guān)鍵字參數(shù),來進行參數(shù)傳遞,會顯得非常方便。

1、包裹位置傳遞

我們傳進的所有參數(shù)都會被args變量收集,它會根據(jù)傳進參數(shù)的位置合并為一個元組(tuple),args是元組類型,這就是包位置傳遞。

2、包裹關(guān)鍵字傳遞

kargs是一個字典(dict),收集所有關(guān)鍵字參數(shù)

四、解包裹參數(shù):

*args 和 **kargs ,也可以在函數(shù)調(diào)用的時候使用,稱之為解包(unpacking)

1、在傳遞元組時,讓元組的每一個元素對應一個位置參數(shù)

2、在傳遞詞典字典時,讓詞典的每個鍵值對作為一個關(guān)鍵字參數(shù)傳遞給函數(shù)

五、位置參數(shù)、默認參數(shù)、可變參數(shù)的混合使用

1、基本原則是:先位置參數(shù),默認參數(shù),包裹位置,包裹關(guān)鍵字(定義和調(diào)用都應遵循)

2、Python中 *args 和 **kwargs 的區(qū)別

先看個demo:

輸出結(jié)果:

分析一下:可以看到,這兩個是[Python]中的可變參數(shù)。 *args 表示任何多個無名參數(shù),它是一個tuple; **kwargs 表示關(guān)鍵字參數(shù),它是一個dict。并且同時使用 *args 和 **kwargs 時,必須 *args 參數(shù)列要在 **kwargs 前,否則會報語法錯誤?。。?/p>

還有個小應用場景:創(chuàng)建字典

其實python中就帶有dict類,使用dict(a=1,b=2,c=3)即可創(chuàng)建一個字典了。

*args:

重點在*,后面的args相當于一個變量名,可以自己定義的。它的本質(zhì)就是將標準調(diào)用剩下的值集中轉(zhuǎn)變?yōu)樵M。

從形參的角度:

從實參的角度:

從不同角度看**kwargs:

**kwargs與位置參數(shù)和默認參數(shù)混用:

超復雜混合參數(shù)混用記:

總結(jié):

位置參數(shù):

調(diào)用函數(shù)時所傳參數(shù)的位置必須與定義函數(shù)時參數(shù)的位置相同

關(guān)鍵字參數(shù):

使用關(guān)鍵字參數(shù)會指定參數(shù)值賦給哪個形參,調(diào)用時所傳參數(shù)的位置可以任意

*位置參數(shù):可接受任意數(shù)量的位置參數(shù)(元組);只能作為最后一個位置參數(shù)出現(xiàn),其后參數(shù)均為關(guān)鍵字參數(shù)

**關(guān)鍵字參數(shù):可接受任意數(shù)量的關(guān)鍵字參數(shù)(字典);只能作為最后一個參數(shù)出現(xià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ù)求和

在Python函數(shù)中,還可以定義可變參數(shù)。顧名思義,可變參數(shù)就是傳入的參數(shù)個數(shù)是可變的,可以是1個、2個到任意個,還可以是0個。

我們以數(shù)學題為例子,給定一組數(shù)字a,b,c……,請計算a^2 + b^2 + c^2 + ……。

def calc(*numbers):

sum = 0

for n in numbers:

sum = sum + n * n

return sum

定義可變參數(shù)和定義一個list或tuple參數(shù)相比,僅僅在參數(shù)前面加了一個*號。在函數(shù)內(nèi)部,參數(shù)numbers接收到的是一個tuple,因此,函數(shù)代碼完全不變。但是,調(diào)用該函數(shù)時,可以傳入任意個參數(shù),包括0個參數(shù):

calc(1, 2)

5

calc()


新聞名稱:python函數(shù)可變 python函數(shù)可變長參數(shù)
本文地址:http://weahome.cn/article/hgggoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部