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

為環(huán)翠等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及環(huán)翠網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、環(huán)翠網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
必選參數(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)值,如果沒有傳入會(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開發(fā)人員不能在python3.8版本之前的代碼中使用此語(yǔ)法。但python3.0到3.7版本可以使用如下方式定義位置參數(shù):
星號(hào)前面的參數(shù)為位置參數(shù)或者關(guān)鍵字參數(shù),星號(hào)后面是強(qiáng)制關(guān)鍵字參數(shù),具體介紹見強(qiáng)制關(guān)鍵字參數(shù)。
python3.8版本引入了強(qiáng)制位置參數(shù)(Positional-Only Parameters),也就是我們可以使用反斜杠 / 語(yǔ)法來(lái)定義位置參數(shù)了,可以寫成如下形式:
來(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)隔開:
在位置參數(shù)一節(jié)介紹過(guò)星號(hào)前面的參數(shù)可以是位置參數(shù)和關(guān)鍵字參數(shù)。星號(hào)后面的參數(shù)都是強(qiáng)制關(guān)鍵字參數(shù),必須以指定參數(shù)名的方式傳參,如果強(qiáng)制關(guān)鍵字參數(shù)沒有設(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),在編寫函數(shù)的時(shí)候需要特別注意。
先來(lái)看個(gè)例子:
執(zhí)行結(jié)果:
l1 和 l2指向相同的地址,由于列表可變,l1改變時(shí),l2也跟著變了。
接著看下面的例子:
結(jié)果:
l1沒有變化!為什么不是[1, 2, 3, 4]呢?
l = l + [4]表示創(chuàng)建一個(gè)“末尾加入元素 4“的新列表,并讓 l 指向這個(gè)新的對(duì)象,l1沒有進(jìn)行任何操作,因此 l1 的值不變。如果要改變l1的值,需要加一個(gè)返回值:
結(jié)果:
下面的代碼執(zhí)行結(jié)果又是什么呢?
執(zhí)行結(jié)果:
和第一個(gè)例子一樣,l1 和 l2指向相同的地址,所以會(huì)一起改變。這個(gè)問題怎么解決呢?
可以使用下面的方式:
也可以使用淺拷貝或者深度拷貝,具體使用方法可參考Python對(duì)象及內(nèi)存管理機(jī)制。這個(gè)問題在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--
。 say_id就是對(duì)象的函數(shù),你能夠調(diào)用它。每個(gè)對(duì)象的函數(shù)都需要一個(gè)self參數(shù),表示[color]這個(gè)對(duì)象。 圖形界面的奧秘其實(shí)并不深?yuàn)W。我相信很多人學(xué)習(xí)windows編程都是從寫一個(gè)窗口開始的,而且都是從嘗試?yán)斫饽莻€(gè)消息和事件驅(qū)動(dòng)的模型入手的。大體的過(guò)程是這樣的,窗口就是用象素畫出來(lái)的。你可以把一個(gè)窗口想象成一個(gè)窗口,也可以把窗口看成一堆象素的集合。就像有人說(shuō)看女色不過(guò)是皮肉色相一樣。 而對(duì)于圖形界面的操控一般是通過(guò)鼠標(biāo)和鍵盤來(lái)完成的。鼠標(biāo)在屏幕上有一個(gè)自己的形象,那就是一個(gè)箭頭(當(dāng)然你也可以調(diào)整這個(gè)圖形為其他好玩的東西,it is your freedom)。而鍵盤呢則一般表示為一個(gè)虛線的框,表示這個(gè)是鍵盤的”焦點(diǎn)“所在的地方。 或者是編輯框中閃動(dòng)的豎杠。 Python函數(shù)這兩點(diǎn)中有一個(gè)共同點(diǎn),就是都有一個(gè)位置來(lái)確定要操作的對(duì)象。你點(diǎn)下鼠標(biāo)的時(shí)候,你操作的就是鼠標(biāo)的箭頭尖端指向的那個(gè)空間,而鍵盤按下也是在其焦點(diǎn)所在的控件那兒放聲。 然后就像一封信一樣從操作系統(tǒng)投遞到了窗口所在的應(yīng)用程序。然后應(yīng)用程序有一個(gè)事先注冊(cè)的”窗口過(guò)程“,其實(shí)就是一個(gè)函數(shù),用來(lái)接收這封“信”。其實(shí)就是接收到傳過(guò)來(lái)的參數(shù)。 然后再進(jìn)行一些判斷,作出一定的響應(yīng)。這個(gè)就是所謂的事件驅(qū)動(dòng)。在沒有冗長(zhǎng)的代碼,和展示所有細(xì)節(jié)的情況下,如果你真的以前對(duì)這個(gè)過(guò)程一無(wú)所知,肯定會(huì)覺得非常茫然。這個(gè)一筆帶過(guò)的敘述其實(shí)只是讓你有一個(gè)感性的認(rèn)識(shí)。其實(shí)在Python中使用窗口根本不用管諸葛么多。 基本上只是把自己要的窗口和控件,給一些位置的參數(shù),一些文字的提示內(nèi)容的參數(shù)就能把窗口擺好,顯示出來(lái)。然后再通過(guò)代碼告訴Python函數(shù) ,當(dāng)“這個(gè)按鈕按下的時(shí)候執(zhí)行這個(gè)函數(shù)”源碼天空 ,然后就能讓窗口有響應(yīng)。 最后記得給一個(gè)退出窗口的辦法就一切OK了。其中能省的復(fù)雜度基本上都被庫(kù)給隱藏掉了。付出的代價(jià)是慢一些,但是我就不相信你能感覺出來(lái),除非你用的電腦連vcd都看不流暢。所以大可放心的享受這種便利。
打字不易,如滿意,望采納。
python 的函數(shù)參數(shù)類型分為4種:
1.位置參數(shù):調(diào)用函數(shù)時(shí)根據(jù)函數(shù)定義的參數(shù)位置來(lái)傳遞參數(shù),位置參數(shù)也可以叫做必要參數(shù),函數(shù)調(diào)用時(shí)必須要傳的參數(shù)。
當(dāng)參數(shù)滿足函數(shù)必要參數(shù)傳參的條件,函數(shù)能夠正常執(zhí)行:
add(1,2) #兩個(gè)參數(shù)的順序必須一一對(duì)應(yīng),且少一個(gè)參數(shù)都不可以
當(dāng)我們運(yùn)行上面的程序,輸出:
當(dāng)函數(shù)需要兩個(gè)必要參數(shù),但是調(diào)用函數(shù)只給了一個(gè)參數(shù)時(shí),程序會(huì)拋出異常
add(1)
當(dāng)我們運(yùn)行上面的程序,輸出:
當(dāng)函數(shù)需要兩個(gè)必要參數(shù),但是調(diào)用函數(shù)只給了三個(gè)參數(shù)時(shí),程序會(huì)拋出異常
add(1,2,3)
當(dāng)我們運(yùn)行上面的程序,輸出
2.關(guān)鍵字參數(shù):用于函數(shù)調(diào)用,通過(guò)“鍵-值”形式加以指定。可以讓函數(shù)更加清晰、容易使用,同時(shí)也清除了參數(shù)的順序需求。
add(1,2) # 這種方式傳參,必須按順序傳參:x對(duì)應(yīng)1,y對(duì)應(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í)行
錯(cuò)誤的調(diào)用方式
add(x=1, 2)
add(y=2, 1)
以上調(diào)用都會(huì)拋出SyntaxError 異常
上面例子可以看出:有位置參數(shù)時(shí),位置參數(shù)必須在關(guān)鍵字參數(shù)的前面,但關(guān)鍵字參數(shù)之間不存在先后順序的
3.默認(rèn)參數(shù):用于定義函數(shù),為參數(shù)提供默認(rèn)值,調(diào)用函數(shù)時(shí)可傳可不傳該默認(rèn)參數(shù)的值,所有位置參數(shù)必須出現(xiàn)在默認(rèn)參數(shù)前,包括函數(shù)定義和調(diào)用,有多個(gè)默認(rèn)參數(shù)時(shí),調(diào)用的時(shí)候,既可以按順序提供默認(rèn)參數(shù),也可以不按順序提供部分默認(rèn)參數(shù)。當(dāng)不按順序提供部分默認(rèn)參數(shù)時(shí),需要把參數(shù)名寫上
默認(rèn)參數(shù)的函數(shù)定義
上面示例第一個(gè)是正確的定義位置參數(shù)的方式,第二個(gè)是錯(cuò)誤的,因?yàn)槲恢脜?shù)在前,默認(rèn)參數(shù)在后
def add1(x=1,y) 的定義會(huì)拋出如下異常
默認(rèn)參數(shù)的函數(shù)調(diào)用
注意:定義默認(rèn)參數(shù)默認(rèn)參數(shù)最好不要定義為可變對(duì)象,容易掉坑
不可變對(duì)象:該對(duì)象所指向的內(nèi)存中的值不能被改變,int,string,float,tuple
可變對(duì)象,該對(duì)象所指向的內(nèi)存中的值可以被改變,dict,list
這里只要理解一下這個(gè)概念就行或者自行百度,后續(xù)會(huì)寫相關(guān)的專題文章講解
舉一個(gè)簡(jiǎn)單示例
4.可變參數(shù)區(qū)別:定義函數(shù)時(shí),有時(shí)候我們不確定調(diào)用的時(shí)候會(huì)多少個(gè)參數(shù),j就可以使用可變參數(shù)
可變參數(shù)主要有兩類:
*args: (positional argument) 允許任意數(shù)量的可選位置參數(shù)(參數(shù)),將被分配給一個(gè)元組, 參數(shù)名前帶*,args只是約定俗成的變量名,可以替換其他名稱
**kwargs:(keyword argument) 允許任意數(shù)量的可選關(guān)鍵字參數(shù),,將被分配給一個(gè)字典,參數(shù)名前帶**,kwargs只是約定俗成的變量名,可以替換其他名稱
*args 的用法
args 是用來(lái)傳遞一個(gè)非鍵值對(duì)的可變數(shù)量的參數(shù)列表給函數(shù)
語(yǔ)法是使用 符號(hào)的數(shù)量可變的參數(shù); 按照慣例,通常是使用arg這個(gè)單詞,args相當(dāng)于一個(gè)變量名,可以自己定義的
在上面的程序中,我們使用* args作為一個(gè)可變長(zhǎng)度參數(shù)列表傳遞給add()函數(shù)。 在函數(shù)中,我們有一個(gè)循環(huán)實(shí)現(xiàn)傳遞的參數(shù)計(jì)算和輸出結(jié)果。
還可以直接傳遞列表或者數(shù)組的方式傳遞參數(shù),以數(shù)組或者列表方式傳遞參數(shù)名前面加(*) 號(hào)
理解* * kwargs
**kwargs 允許你將不定長(zhǎng)度的鍵值對(duì), 作為參數(shù)傳遞給函數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動(dòng)組裝為一個(gè)dict
下篇詳細(xì)講解 *args, **kwargs 的參數(shù)傳遞和使用敬請(qǐng)關(guān)注
在調(diào)用函數(shù)時(shí),通常會(huì)傳遞參數(shù),函數(shù)內(nèi)部的代碼保持不變,針對(duì) 不同的參數(shù)處理不同的數(shù)據(jù)。
有位置傳參、關(guān)鍵字傳參、默認(rèn)值參數(shù)、多值參數(shù)等。
1、參數(shù)傳遞
形參和實(shí)參:
形參:定義 函數(shù)時(shí)的 參數(shù)變量
實(shí)參:調(diào)用 函數(shù)時(shí),使用的參數(shù)變量
參數(shù)傳遞的過(guò)程,就是 把實(shí)參的引用 傳遞給 形參 ,使用實(shí)參的值來(lái)執(zhí)行函數(shù)體的過(guò)程。
在 Python 中,函數(shù)的 實(shí)參/返回值 都是是靠 引用 來(lái)傳遞來(lái)的
2、位置實(shí)參
按照參數(shù)位置,依次傳遞參數(shù),這是最普通的方式。
?
網(wǎng)站題目:python中帶參函數(shù) python函數(shù)包括參數(shù)函數(shù)嗎
文章分享:http://www.yijiale78.com/article36/hhsosg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站維護(hù)、定制開發(fā)、企業(yè)網(wǎng)站制作、網(wǎng)站導(dǎo)航、軟件開發(fā)
聲明:本網(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)