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

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

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

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、臨武網(wǎng)絡(luò)推廣、小程序制作、臨武網(wǎng)絡(luò)營(yíng)銷、臨武企業(yè)策劃、臨武品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供臨武建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:muchs.cn

必選參數(shù)(Required arguments)是必須輸入的參數(shù),比如下面的代碼,必須輸入2個(gè)參數(shù),否則就會(huì)報(bào)錯(cuò):

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

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

可選參數(shù)(Optional arguments)可以不用傳入函數(shù),有一個(gè)默認(rèn)值,如果沒(méi)有傳入會(huì)使用默認(rèn)值,不會(huì)報(bào)錯(cuò)。

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

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

輸出:

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

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

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

來(lái)看下面的例子:

python3.8運(yùn)行:

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

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

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

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

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

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

結(jié)果:

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

強(qiáng)制關(guān)鍵字參數(shù)(Keyword-Only Arguments)是python3引入的特性,可參考:。 使用一個(gè)星號(hào)隔開(kāi):

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

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

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

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

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

先來(lái)看個(gè)例子:

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

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

接著看下面的例子:

結(jié)果:

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

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

結(jié)果:

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

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

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

可以使用下面的方式:

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

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

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

參考文檔:

--THE END--

python中視圖函數(shù)傳值的數(shù)據(jù)類型可以傳對(duì)象嗎

python的一切數(shù)據(jù)類型都是對(duì)象。但是python的對(duì)象分為不可變對(duì)象和可變對(duì)象。python的變量是引用,對(duì)python變量的賦值是引用去綁定該對(duì)象。

可變對(duì)象的數(shù)據(jù)發(fā)生改變,例如列表和字典,引用不會(huì)更改綁定對(duì)象,畢竟本身就是用于增刪改查的,頻繁地產(chǎn)生新對(duì)象必然導(dǎo)致開(kāi)銷巨大,只需要該對(duì)象內(nèi)部變化就行;但對(duì)于綁定了不可變對(duì)象的引用,對(duì)象一旦改變就會(huì)使引用綁定新的對(duì)象。

這一點(diǎn)也會(huì)反應(yīng)到函數(shù)的參數(shù)上。python的傳值方式是“傳對(duì)象”引用。python的函數(shù),形參實(shí)際上是引用,實(shí)參便是對(duì)象綁定到該引用上。本質(zhì)是形參會(huì)被作為函數(shù)的局部變量,在開(kāi)辟的函數(shù)的棧內(nèi)存中被聲明。

簡(jiǎn)要來(lái)講:

如果參數(shù)是數(shù),則類似值傳遞,

如果參數(shù)是列表和字典,則類似引用傳遞。

每個(gè)對(duì)象都會(huì)有個(gè)id, 可以用id()驗(yàn)證以上說(shuō)法:

這個(gè)函數(shù)的參數(shù)是列表,是可變對(duì)象。

python函數(shù)調(diào)用的參數(shù)傳遞

python的函數(shù)參數(shù)傳遞是"引用傳遞(地址傳遞)"。

python中賦值語(yǔ)句的過(guò)程(x = 1):先申請(qǐng)一段內(nèi)存分配給一個(gè)整型對(duì)象來(lái)存儲(chǔ)數(shù)據(jù)1,然后讓變量x去指向這個(gè)對(duì)象,實(shí)際上就是指向這段內(nèi)存(這里有點(diǎn)和C語(yǔ)言中的指針類似)。

在Python中,會(huì)為每個(gè)層次生成一個(gè)符號(hào)表,里層能調(diào)用外層中的變量,而外層不能調(diào)用里層中的變量,并且當(dāng)外層和里層有同名變量時(shí),外層變量會(huì)被里層變量屏蔽掉。函數(shù)? 調(diào)用 ?會(huì)為函數(shù)局部變量生成一個(gè)新的符號(hào)表。

局部變量:作用于該函數(shù)內(nèi)部,一旦函數(shù)執(zhí)行完成,該變量就被回收。

全局變量:它是在函數(shù)外部定義的,作用域是整個(gè)文件。全局變量可以直接在函數(shù)里面應(yīng)用,但是如果要在函數(shù)內(nèi)部改變?nèi)肿兞?,必須使用global關(guān)鍵字進(jìn)行聲明。

注意 :默認(rèn)值在函數(shù)? 定義 ?作用域被解析

在定義函數(shù)時(shí),就已經(jīng)執(zhí)行力它的局部變量

python中不可變類型是共享內(nèi)存地址的:把相同的兩個(gè)不可變類型數(shù)據(jù)賦給兩個(gè)不同變量a,b,a,b在內(nèi)存中的地址是一樣的。

網(wǎng)站欄目:python函數(shù)傳遞類型 python類傳遞參數(shù)
地址分享:http://muchs.cn/article2/hheooc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、電子商務(wù)、網(wǎng)站改版App開(kāi)發(fā)、網(wǎng)站制作企業(yè)建站

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)