版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
函數(shù)的參數(shù)摘要定義函數(shù)的時(shí)候,我們把參數(shù)的名字和位置確定下來(lái),函數(shù)的接口定義就完成了。對(duì)于函數(shù)的調(diào)用者來(lái)說(shuō),只需要知道如何傳遞正確的參數(shù),以及函數(shù)將返回什么樣的值就夠了,函數(shù)內(nèi)部的復(fù)雜邏輯被封裝起來(lái),調(diào)用者無(wú)需了解。Python的函數(shù)定義非常簡(jiǎn)單,但靈活度卻非常大。除了正常定義的必選參數(shù)外,還可以使用默認(rèn)參數(shù)、可變參數(shù)和關(guān)鍵字參數(shù),使得函數(shù)定義出來(lái)的接口,不但能處理復(fù)雜的參數(shù),還可以簡(jiǎn)化調(diào)用者的代碼。關(guān)鍵詞位置參數(shù)形參和實(shí)參傳遞列表字典等可修改對(duì)象的參數(shù)關(guān)鍵字參數(shù)默認(rèn)參數(shù)可變參數(shù)解包參數(shù)2傳遞參數(shù)上一節(jié)可以看出參數(shù)是通過(guò)賦值來(lái)傳遞的,Python中參數(shù)傳遞有如下特點(diǎn):?參數(shù)的傳遞是通過(guò)自動(dòng)將對(duì)象賦值給本地變量名來(lái)實(shí)現(xiàn)的。?在函數(shù)內(nèi)部的參數(shù)名的賦值不會(huì)影響調(diào)用者。?改變函數(shù)的可變對(duì)象參數(shù)的值也許會(huì)對(duì)調(diào)用者有影響。3位置參數(shù)一個(gè)計(jì)算X平方的函數(shù):4
對(duì)于power(x)函數(shù),參數(shù)x就是一個(gè)位置參數(shù)。當(dāng)調(diào)用power函數(shù)時(shí),必須傳入有且僅有的一個(gè)參數(shù)x。
參數(shù)的順序必須一一對(duì)應(yīng),且少一個(gè)參數(shù)都不可以。上面的例子中a和b都是位置參數(shù),調(diào)用函數(shù)時(shí)傳入的兩個(gè)值按照位置順序依次賦給參數(shù)a和b。5形參和實(shí)參實(shí)參是一個(gè)實(shí)實(shí)在在存在的參數(shù),是實(shí)際占用內(nèi)存地址的,而形參只是意義上的一種參數(shù),在定義的時(shí)候是不占內(nèi)存地址的。通常,函數(shù)名后面的括號(hào)里的參數(shù)我們稱為形參,而實(shí)際調(diào)用時(shí)候提供的值為實(shí)參:注:當(dāng)執(zhí)行change(a)函數(shù)時(shí),程序會(huì)將a的值賦值給n,所以第一次會(huì)輸出0,執(zhí)行完n=10,接下來(lái)會(huì)輸出10,`change函數(shù)執(zhí)行完畢后,拷貝的n會(huì)被銷毀,再執(zhí)行print是顯示的就是a的值。正好應(yīng)證了:在函數(shù)內(nèi)部的參數(shù)名的賦值不會(huì)影響調(diào)用者。
如果要改變a的值只需要加入返回值:6
傳遞列表,字典等可修改對(duì)象的參數(shù)?不可變對(duì)象,該對(duì)象所指向的內(nèi)存中的值不能被改變。當(dāng)改變某個(gè)變量時(shí)候,由于其所指的值不能被改變,相當(dāng)于把原來(lái)的值復(fù)制一份后再改變,這會(huì)開(kāi)辟一個(gè)新的地址,變量再指向這個(gè)新的地址。?可變對(duì)象,該對(duì)象所指向的內(nèi)存中的值可以被改變。變量(準(zhǔn)確的說(shuō)是引用)改變后,實(shí)際上是其所指的值直接發(fā)生改變,并沒(méi)有發(fā)生復(fù)制行為,也沒(méi)有開(kāi)辟新的出地址,通俗點(diǎn)說(shuō)就是原地改變。Python中,數(shù)值類型(int和float)、字符串str、元組tuple都是不可變類型。而列表list、字典dict、集合set是可變類型。
不可變對(duì)象的例子:is就是判斷兩個(gè)對(duì)象的id是否相同,而==判斷的則是內(nèi)容是否相同。7
再來(lái)看字符串8和數(shù)值類型的結(jié)果一樣。如果是下面這種情況,變量修改后不在是good:9
由于是不可變對(duì)象,變量對(duì)應(yīng)內(nèi)存的值不允許被改變。當(dāng)變量要改變時(shí),實(shí)際上是把原來(lái)的值復(fù)制一份后再改變,開(kāi)辟一個(gè)新的地址,astr再指向這個(gè)新的地址(所以前后astr的id不一樣),原來(lái)astr對(duì)應(yīng)的值因?yàn)椴辉儆袑?duì)象指向它,就會(huì)被銷毀t和float類型也是一樣的。再來(lái)看下可變對(duì)象:10賦值的情況下:
所以,當(dāng)參數(shù)傳遞像列表和字典這樣的可修改對(duì)象的時(shí)候,需要注意,對(duì)這樣的對(duì)象的原處修改可能在函數(shù)退出后依然有效,并由此影響到調(diào)用者。11
如果不想函數(shù)內(nèi)部在原處的修改影響傳遞給它的對(duì)象,那么,可以簡(jiǎn)單地創(chuàng)建一個(gè)明確的可變對(duì)象的拷貝。也可以在函數(shù)內(nèi)部進(jìn)行拷貝:12關(guān)鍵字參數(shù)關(guān)鍵字參數(shù)允許通過(guò)變量名進(jìn)行匹配,而不是位置示例:13
這個(gè)調(diào)用中,c=3,意味著將3傳遞給參數(shù)c。注意到這時(shí)關(guān)鍵字參數(shù)使用時(shí)參數(shù)從左至右的關(guān)系不再重要了,因?yàn)閰?shù)是根據(jù)變量名進(jìn)行傳遞的,而不是根據(jù)位置。甚至在一個(gè)調(diào)用中混合使用基于位置的參數(shù)和基于關(guān)鍵字的參數(shù)都可以。在這種情況下,所有基于位置的參數(shù)先按照從左至右的順序匹配頭部的參數(shù),之后再進(jìn)行基于變量名進(jìn)行關(guān)鍵字的匹配。示例:14
關(guān)鍵字參數(shù)在Python中扮演了兩個(gè)典型的角色,首先,它們使調(diào)用顯得更文檔化一些(假設(shè)使用了比a,b,c更好的參數(shù)名),例如:
這種形式的調(diào)用比直接進(jìn)行一個(gè)由逗號(hào)分隔的三個(gè)值的調(diào)用明了得多:關(guān)鍵字參數(shù)在調(diào)用中起到了數(shù)據(jù)標(biāo)簽的作用。默認(rèn)參數(shù)默認(rèn)參數(shù)允許創(chuàng)建函數(shù)可選的參數(shù),如果沒(méi)有傳入值的話,在函數(shù)運(yùn)行前,參數(shù)就被賦了默認(rèn)值。示例:15
當(dāng)調(diào)用這個(gè)函數(shù)的時(shí)候,必須為a提供值,無(wú)論是通過(guò)位置參數(shù)還是關(guān)鍵字參數(shù)來(lái)實(shí)現(xiàn)。然而,為b和c提供值是可選的,如果不給它們賦值,它們會(huì)默認(rèn)分別賦值2和3.
當(dāng)給函數(shù)傳遞兩個(gè)值的時(shí)候,只有c得到默認(rèn)值,并且當(dāng)有三個(gè)值傳遞時(shí),不會(huì)使用默認(rèn)值:16
關(guān)鍵字和默認(rèn)參數(shù)一起使用后的情況:
這里,a通過(guò)位置得到了1,c通過(guò)關(guān)鍵字得到了6,而b在兩者之間,通過(guò)默認(rèn)值獲得了2.如果利用可變參數(shù),調(diào)用函數(shù)的方式可以簡(jiǎn)化成這樣:17把函數(shù)的參數(shù)改為可變參數(shù):
定義可變參數(shù)和定義一個(gè)列表或元組參數(shù)相比,僅僅在參數(shù)前面加了一個(gè)*號(hào)。在函數(shù)內(nèi)部,參數(shù)number接收到的是一個(gè)元組,因此,函數(shù)代碼完全不變。但是,調(diào)用該函數(shù)時(shí),可以傳入任意個(gè)參數(shù),包括0個(gè)參數(shù)。如果已經(jīng)有一個(gè)列表或者元組,要調(diào)用一個(gè)可變參數(shù)怎么辦?可以這樣做:18
這種寫(xiě)法當(dāng)然是可行的,問(wèn)題是太繁瑣,所以Python允許你在列表或元組前面加一個(gè)*號(hào),把列表或元組的元素變成可變參數(shù)傳進(jìn)去:**和*特性類似,但是它只對(duì)關(guān)鍵字參數(shù)有效。將這些關(guān)鍵字參數(shù)傳遞給一個(gè)新的字典,這個(gè)字典之后將能夠通過(guò)一般的字典工具進(jìn)行處理。如下所示:19
函數(shù)頭部能夠混合一般參數(shù)、*參數(shù)以及**去實(shí)現(xiàn)更加靈活的調(diào)用方式。例如:
在上述代碼中,1按照位置傳遞給a,2和3收集到pargs位置元組中,x和y放入kargs關(guān)鍵字字典中。解包參數(shù)在調(diào)用函數(shù)時(shí)能夠使用*語(yǔ)法。在這種情況下,它與函數(shù)定義的意思相反。它會(huì)解包參數(shù)的集合,而不是創(chuàng)建參數(shù)的集合。例如,我們能夠通過(guò)一個(gè)元祖給一個(gè)函數(shù)傳遞四個(gè)參
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)備技術(shù)支持工程師績(jī)效考核標(biāo)準(zhǔn)
- 軟件測(cè)試工程師面經(jīng)
- 2025年現(xiàn)代農(nóng)業(yè)綜合示范園項(xiàng)目可行性研究報(bào)告
- 2025年農(nóng)業(yè)無(wú)人機(jī)監(jiān)測(cè)系統(tǒng)項(xiàng)目可行性研究報(bào)告
- 2025年定制化家居產(chǎn)品生產(chǎn)線建設(shè)項(xiàng)目可行性研究報(bào)告
- 2026年煙臺(tái)工程職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及參考答案詳解1套
- 2026年天津仁愛(ài)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案詳解1套
- 2026年上海健康醫(yī)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)含答案詳解
- 2026年攀枝花攀西職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)及答案詳解1套
- 2026年貴州電子信息職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)參考答案詳解
- 極簡(jiǎn)化改造實(shí)施規(guī)范
- 達(dá)托霉素完整版本
- DBJ51-T 139-2020 四川省玻璃幕墻工程技術(shù)標(biāo)準(zhǔn)
- 一帶一路教學(xué)課件教學(xué)講義
- 中醫(yī)熱敏灸療法課件
- 工廠蟲(chóng)害控制分析總結(jié)報(bào)告
- 回顧性中醫(yī)醫(yī)術(shù)實(shí)踐資料(醫(yī)案)表
- 延期交房起訴狀
- 廣東省消防安全重點(diǎn)單位消防檔案
- 高考日語(yǔ)形式名詞わけ、べき、はず辨析課件
- 2023學(xué)年完整公開(kāi)課版節(jié)氣門
評(píng)論
0/150
提交評(píng)論