? ? ? ? ? ? ?Python之函數(shù)詳解
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名申請、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、港南網(wǎng)站維護、網(wǎng)站推廣。一、函數(shù)的概述
? ?簡單地說,函數(shù)就是個黑匣子,它接收輸入(參數(shù)),然后執(zhí)行特定任務(wù)以完成特定功能,最后生成輸出(返回值)。其中,輸入(參數(shù))和輸出(返回值)都是可選的,也就是說,可以有也可以沒有函數(shù)就是執(zhí)行特定任務(wù)以完成特定功能的一段代碼??梢栽诔绦蛑袑⒛扯未a定義成函數(shù),并指定函數(shù)名及接收的輸入(參數(shù)),這樣,就可以在程序的其它地方通過函數(shù)名多次調(diào)用并執(zhí)行該段代碼了每次調(diào)用并執(zhí)行后,都會根據(jù)接收的輸入(參數(shù))執(zhí)行特定任務(wù)以完成特定功能從而生成相應(yīng)的輸出(返回值)Python語言已經(jīng)定義了很多內(nèi)置函數(shù)。我們可以在程序中通過函數(shù)名直接調(diào)用這些內(nèi)置函數(shù)。例如:當(dāng)我們調(diào)用內(nèi)置函數(shù)id()時,輸入(參數(shù))是任意的對象,完成的特定功能是獲取輸入(參數(shù))的唯一標(biāo)識,輸出(返回值)是輸入(參數(shù))的唯一標(biāo)識。
二、為什么需要函數(shù)
1.復(fù)用代碼? 如果在程序中需要多次完成某個特定的功能,我們無需把這個特定功能的相關(guān)代碼在多個地方編寫多次,完全可以把這個特定功能的相關(guān)代碼定義成函數(shù),然后在多個地方調(diào)用該函數(shù),每次調(diào)用都會把函數(shù)對應(yīng)的相關(guān)代碼執(zhí)行一遍。
2.隱藏實現(xiàn)細節(jié)? 函數(shù)就是個黑匣子,將實現(xiàn)細節(jié)隱藏起來了。很多時候我們無需關(guān)注函數(shù)的實現(xiàn)細節(jié),只需關(guān)注其接收的輸入(參數(shù))及生成的輸出(返回值)就可以了。
3.提高可維護性? 把完成某段特定功能的代碼定義為函數(shù)后,如果需要對這段代碼進行修改,只需要在一個地方進行修改,提高了程序的可維護性。否則,你需要找到這段代碼的多個不同地方,每個地方都要進行同樣的修改,費事費力還容易出錯。
4.提高可讀性、便于調(diào)試每個函數(shù)都對應(yīng)一段完成特定功能的代碼,提高了程序的可讀性,也便于程序調(diào)試。
三、函數(shù)的定義和調(diào)用
1、定義函數(shù)定義
函數(shù)的語法格式
def 函數(shù)名([形式參數(shù)1,形式參數(shù)2,形式參數(shù)n]):
? 函數(shù)體
其中,def是 Python定義的關(guān)鍵字。
關(guān)于函數(shù)名的說明
a) 每個函數(shù)都有一個函數(shù)名,用于函數(shù)的調(diào)用。
b) 函數(shù)名屬于標(biāo)識符,因此,必須遵守標(biāo)識符的命名規(guī)則,推薦遵守標(biāo)識符的命名規(guī)范。
關(guān)于形式參數(shù)的說明
a)?形式參數(shù)簡稱形參
b) 形參用于在調(diào)用函數(shù)時接收輸入,也就是接收傳遞的實際參數(shù)(簡稱實參)
c) 形參用中括號括起來,表示形參時可選的,也就是說,可以定義也可以不定義。
d) 形參的本質(zhì)是變量,其作用域(起作用的范圍)僅限于函數(shù)體
關(guān)于函數(shù)體的說明
a) 函數(shù)體是用于執(zhí)行特定任務(wù)以完成特定功能的主體代碼
b) 函數(shù)體對應(yīng)的代碼塊必須縮進。
c) 如果函數(shù)需要有輸出(返回值),可以在函數(shù)體內(nèi)通過語句 return xxx進行返回,同時結(jié)束函數(shù)體的執(zhí)行。
如果函數(shù)不需要有輸出(返回值),可以在函數(shù)體內(nèi)通過語句 return直接結(jié)束函數(shù)體的執(zhí)行,或者讓函數(shù)體正常執(zhí)行結(jié)束,其實,函數(shù)在這兩種情況下都是有返回值的,其返回值都是None。
d) 函數(shù)體在調(diào)用函數(shù)時才會被執(zhí)行,因此,定義函數(shù)不會改變程序的執(zhí)行流程。
2、函數(shù)調(diào)用
調(diào)用函數(shù)時,每個實參都被用于初始化相應(yīng)的形參。所有形參都被初始化之后,函數(shù)體對應(yīng)的代碼塊被執(zhí)行。程序的執(zhí)行流會跳轉(zhuǎn)到定義函數(shù)的函數(shù)體內(nèi),執(zhí)行函數(shù)體對應(yīng)的代碼塊,執(zhí)行完函數(shù)體后再跳回到調(diào)用函數(shù)的地方,繼續(xù)執(zhí)行下一條語句。
def?test(arg1,arg2): ????if?arg1?and?arg2: ????????return?arg1?and?arg2 ????elif?arg1?or?arg2: ????????return?arg1?or?arg2 ????else: ????????return?False ???????? print(test('hi',1))?#?1 print(test(1,[]))?#?1 print(test('',[]))?#?False四、函數(shù)調(diào)用之位置實參
調(diào)用函數(shù)時,可以根據(jù)每個形參在所有形參中的位置傳遞對應(yīng)位置的實參,從而用每個實參初始化對應(yīng)位置的形參,這樣的實參稱為位置實參。
def?test1(arg1,arg2,arg3): ????print('a?=?',?arg1,?'b?=?',?arg2,?'c?=',?arg3) #?實參位置不同是,初始化的形參值也不同,返回的值也會有變化 test1(1,2,3)?#?a?=??1?b?=??2?c?=?3 test1(3,2,1)?#?a?=??3?b?=??2?c?=?1五、函數(shù)調(diào)用之關(guān)鍵字實參
調(diào)用函數(shù)時,傳遞的實參的形式可以為: 形參名=實參值,從而用指定的實參值初始化指定名稱的形參這樣的實參稱為關(guān)鍵字實參。
def?test2(a,b,c): ????print('a?=?',?a,?'b?=?',?b,?'c?=?',?c) #?調(diào)用函數(shù)時,可以指定實參值初始化指定名稱的形參 test2(a?=?1,?b?=?2,?c?=?3)?#?a?=??1?b?=??2?c?=??3 test2(a?=?3,?b?=?1,?c?=?2)?#?a?=??3?b?=??1?c?=??2六、函數(shù)調(diào)用之實參傳遞
對于傳遞不可變類型的實參和可變類型的實參,傳入可變類型的實參值會受到函數(shù)體內(nèi)運算的影響。不可變類型的實參則不受影響。
def?test3(arg1,arg2): ????arg1?*?10 ????arg2.append(4) ????print(arg1,arg2) i?=?10 L?=?[1,2,3] test3(i,L)?#?10?[1,?2,?3,?4] print('i的值',?i,?'L的值',?L)?#?i的值?10?L的值?[1,?2,?3,?4]七、函數(shù)的定義之多個返回值
如果需要在調(diào)用函數(shù)后有多個返回值,可以在定義函數(shù)時在函數(shù)體內(nèi)使用 return語句返回由多個返回值組成的元組。
def?test4(arg1): ????even?=?[] ????odd?=?[] ????for?i?in?arg1: ????????if?i?%?2: ????????????even.append(i) ????????else: ???????????odd.append(i) ????#?return?定義返回兩個列表的值 ????return?even,odd L?=?list(range(1,11)) print(test4(L))?#?([1,?3,?5,?7,?9],?[2,?4,?6,?8,?10])八、函數(shù)定定義之帶默認(rèn)值的形參
定義函數(shù)時,可以給形參設(shè)置默認(rèn)值,這樣,調(diào)用函數(shù)時如果不傳遞對應(yīng)的實參,就會使用設(shè)置的默認(rèn)值初始化形參。給形參設(shè)置默認(rèn)值的語法格式為: 形參=默認(rèn)值 給形參設(shè)置默認(rèn)值之后,可以簡化函數(shù)的調(diào)用,只有與默認(rèn)值不符的形參才需要傳遞額外的實參。
def?test5(a,b?=?5): ????print('a?=?',?a,?'b?=?',?b) ???? test5(10)?#?a?=??10?b?=??5?未傳入b的實參,使用默認(rèn)值b?=?5九、函數(shù)定義之使用*定義關(guān)鍵字形參
定義函數(shù)時,可以在所有形參的某個位置添加一個*,這樣,*后面的所有形參都被定義為只能接收關(guān)鍵字實參的關(guān)鍵字形參。
def?test6(a,b,*,c,d): ????print('a?=?',?a,?'b?=?',?b,?'c?=?',?c,?'d?=?',?d) #?調(diào)用函數(shù)時,必須傳入c?=?xx?d?=?xx的關(guān)鍵字參數(shù) test6(1,2,c?=?3,d?=?4)?#?a?=??1?b?=??2?c?=??3?d?=??4 #test6(1,2,3,4)??test6()?takes?2?positional?arguments?but?4?were?given十、函數(shù)定義之使用*定義個數(shù)可變的位置形參
定義函數(shù)時,可能無法事先確定傳遞的位置實參的個數(shù),在這種情況下,可以在形參前添加一個*,將形參定義為個數(shù)可變的位置形參,從而可以接收0個或任意多個位置實參。這些位置實參會將個數(shù)可變的位置形參初始化為一個元組。
def?test7(arg1,*arg2): ????print('arg1?=?',?arg1,?'*arg2?=?',?arg2) ???? #?傳入實參時可以傳入多個參數(shù),arg1接收第一個參數(shù),*arg2接收剩余的參數(shù) test7(1,2,3,4)?#?arg1?=??1?*arg2?=??(2,?3,?4)十一、函數(shù)調(diào)用之使用*將序列中的每個元素轉(zhuǎn)換為位置實參
調(diào)用函數(shù)時,可以在序列前面添加一個*,從而將序列中的每個元素都轉(zhuǎn)換為一個單獨的位置實參。
def?test8(a,b,c): ????print('a?=?',?a,?'b?=?',?b,?'c?=?',?c) ???? L?=?[1,2,3] #?正常調(diào)用,需要依次傳遞L的索引作為實參,然后初始化形參 test8(L[0],L[1],L[2])?#?a?=??1?b?=??2?c?=??3 #?調(diào)用時使用*,將序列中的每一個元素轉(zhuǎn)換成單獨的位置實參 test8(*L)?#?a?=??1?b?=??2?c?=??3十二、函數(shù)定義之使用**定義個數(shù)可變的關(guān)鍵字形參
定義函數(shù)時,可能無法事先確定傳遞的關(guān)鍵字實參的個數(shù),在這種情況下,可以在形參前添加兩個*將形參定義為個數(shù)可變的關(guān)鍵字形參,從而可以接收0個或任意多個關(guān)鍵字實參。這些關(guān)鍵字實參會將個數(shù)可變的關(guān)鍵字形參初始化為一個字典。
def?test9(**kwargs): ????print(kwargs) ???? #傳入多個關(guān)鍵字實參,初始華**kwargs,以字典的形式返回值 test9(a?=?1,?b?=?2,?c?=?3)?#?{'a':?1,?'b':?2,?'c':?3} #?因為位置形參必須要在關(guān)鍵字形參之前,所以個數(shù)可變的位置參數(shù)必須在個數(shù)可變的關(guān)鍵字參數(shù)之前 def?test10(*args,**kwargs): ????print(args,kwargs) test10(1,2,3,a?=?11,?b?=?12)?#?(1,?2,?3)?{'a':?11,?'b':?12}十三、函數(shù)調(diào)用值使用**將字典的每個鍵值對都轉(zhuǎn)換為關(guān)鍵字參數(shù)
調(diào)用函數(shù)時,可以在字典前添加兩個**,從而將字典中的每個鍵值對都轉(zhuǎn)換為一個單獨的關(guān)鍵字實參。
def?test11(a,b,c): ????print('a?=?',a,?'b?=?',?b,?'c?=?',?c) ???? d?=?{'a':1,'b':2,'c':3} test11(**d)?#?a?=??1?b?=??2?c?=??3另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁題目:Python之函數(shù)詳解-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://jinyejixie.com/article18/ddeegp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、域名注冊、網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容