創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
我們是于2013年創(chuàng)立的成都網(wǎng)站建設(shè)公司,提供網(wǎng)站建設(shè),電商網(wǎng)站設(shè)計開發(fā),成都外貿(mào)網(wǎng)站建設(shè)公司,響應(yīng)式網(wǎng)頁設(shè)計,成都小程序開發(fā)、等服務(wù)。為客戶創(chuàng)造有價值的品牌營銷體驗,讓互聯(lián)網(wǎng)提升企業(yè)的競爭力!Python中什么是函數(shù)?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
函數(shù)是組織好的,可重復(fù)使用的,用來實現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。
函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。你已經(jīng)知道Python提供了許多內(nèi)建函數(shù),比如print()。但你也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。
你可以定義一個由自己想要功能的函數(shù),以下是簡單的規(guī)則:
(1)函數(shù)代碼塊以 def 關(guān)鍵詞開頭,后接函數(shù)標(biāo)識符名稱和圓括號 ()。
(2)任何傳入?yún)?shù)和自變量必須放在圓括號中間,圓括號之間可以用于定義參數(shù)。
(3)函數(shù)的第一行語句可以選擇性地使用文檔字符串—用于存放函數(shù)說明。
(4)函數(shù)內(nèi)容以冒號起始,并且縮進。
(5)return [表達式] 結(jié)束函數(shù),選擇性地返回一個值給調(diào)用方。不帶表達式的return相當(dāng)于返回 None。
Python 定義函數(shù)使用 def 關(guān)鍵字,一般格式如下:
def 函數(shù)名(參數(shù)列表): 函數(shù)體
def getNum(): pass
如果我們定義了一個函數(shù),里面什么也沒有寫,為了不讓代碼崩潰,我們可以寫一個 pass。
現(xiàn)在我們來定義一個可執(zhí)行的函數(shù):
def getNum(): print(123) getNum() # 123
如上我們定義了一個 getNum 的函數(shù),函數(shù)內(nèi)部 print 輸出 123,當(dāng)我們調(diào)用 getNum() 時,就會輸出 123。
如果我們不想輸出固定的 123,輸出結(jié)果有我們自己定義,我們可以通過傳參的形式解決:
def getNum(num): print(num) print(num * 2) getNum(123) # 123 246
可以通過 return 的方式把想要的結(jié)果 return 出來:
def getNum(num): return num print(getNum(123)) # 123
函數(shù)中也可以使用嵌套函數(shù)的方式:
def getNum(num): getName(num) def getName(name): print(name) getNum("zhangsan") # zhangsan
我們通過向函數(shù)傳值來獲取我們的結(jié)果,也可以通過設(shè)置變量的形式來解決:
num = 1 def getNum(): print(num) getNum() # 1
上面的代碼我們設(shè)置了一個全局變量,當(dāng)然我們也可以在函數(shù)內(nèi)部設(shè)置變量,叫做局部變量,這樣更有利于我們對自己函數(shù)內(nèi)的變量操作而不去改變?nèi)值淖兞浚缦拢?/p>
def getNum(): name = "zhangsan" print(name) getNum() # zhangsan
在有的時候,我們可以直接將函數(shù)內(nèi)的參數(shù)設(shè)置默認值,這就就可以避免在沒有傳入該參數(shù)時函數(shù)報錯:
def getNum(a, b, c=11, d=22): print(a) print(b) print(c) print(d) getNum(1, 2, 3) # 1 2 3 22
在上面的代碼中,我們對函數(shù) getNum 的第三個和第四個參數(shù)設(shè)置了默認值,在調(diào)用該函數(shù)時,我們傳入了三個值,然后輸出結(jié)果發(fā)現(xiàn),第三個參數(shù)的默認值被調(diào)用 getNum 時傳入的參數(shù)值覆蓋掉了,而第四個參數(shù)值由于沒有傳入,所以使用了默認值 d=22。由此我們可以得出,當(dāng)我們不傳入對應(yīng)參數(shù)值時如果設(shè)置默認值則使用默認值,如果傳入了參數(shù)值則優(yōu)先使用傳入的參數(shù)值。
在上面的代碼中,我們定義的參數(shù)都是單一的字符串或者數(shù)字,我們也可以定義列表,元組,字典這樣的參數(shù),如下:
list = [11, 22, 33] tuple = (44, 55, 66) dict = {"a": "77", "b": 88, "c": 99} def getTest(list, tuple, dict): print(list) print(tuple) print(dict) getTest(list, tuple, dict) ''' [11, 22, 33] (44, 55, 66) {'a': '77', 'b': 88, 'c': 99} '''
在上面的代碼中我們可以看出,Python 中的不同變量類型都可以作為參數(shù)傳入函數(shù)中。
接下來我們再來看一下函數(shù)中缺省參數(shù)的 *args 和 **kwargs。
def getTest(a, b, c=123, *args): print(a) # 11 print(b) # 22 print(c) # 33 print(args) # (44, 55, 66) getTest(11, 22, 33, 44, 55, 66)
在上面的代碼中,print(c) 結(jié)果為 33,這個我們再上面已經(jīng)解釋過了,但是我們在參數(shù) c 后面又加入了一個 *args 的形參,然后我們在調(diào)用 getTest() 時向函數(shù)內(nèi)部傳入?yún)?shù)的個數(shù)為 6 個,而函數(shù)體 getTest() 接收的參數(shù)為 4 個,按我們上面叫的函數(shù)方法,理論上程序應(yīng)該報錯,然而程序卻能運行,運行結(jié)果打印的第 4 個參數(shù)結(jié)果為一個元組,將形參按順序?qū)?yīng)的參數(shù)對應(yīng)完畢之后剩余的內(nèi)容組成一個元組輸出。其中 *args 可以寫成 *xxx,我們習(xí)慣上命名為 *args。
在函數(shù)傳參時,除了 *args 外還有一個 **kwargs,如下:
def getTest(a, b, c=123, *args, **kwargs): print(a) # 11 print(b) # 22 print(c) # 33 print(args) # (44, 55, 66) print(kwargs) # {'name': 'zhangsan', 'age': 30} getTest(11, 22, 33, 44, 55, 66, name="zhangsan", age=30)
上面的代碼中,我們在函數(shù) getTest() 后面又多家了一個形參 **kwargs,當(dāng)我們在調(diào)用 getTest() 函數(shù)并傳入?yún)?shù)時,我們傳入了 name="zhangsan" 這樣的鍵值對,這樣在打印輸出 **kwargs 時會轉(zhuǎn)為一個字典類型的數(shù)據(jù)。其中 **kwargs 可以寫成 **xxx,我們習(xí)慣上命名為 **kwargs。
注意:在print() 輸出時,*args 和 **kwargs 的 * 不需要寫。
根據(jù)上面的 *args 和 **kwargs,我們現(xiàn)在來向這樣一個問題,加入我先在外面分別定義了一個元組類型變量 tuple 和字典類型數(shù)據(jù) dict,然后調(diào)用 getTest() 函數(shù)時將變量傳入,輸出結(jié)果還是跟上面的結(jié)果一樣,即下面的代碼:
def getTest(a, b, c=123, *args, **kwargs): print(a) # 11 print(b) # 22 print(c) # 33 print(args) # ((44, 55, 66), {'name': 'zhangsan', 'age': 30}) print(kwargs) # {} tuple=(44,55,66) dict={'name': 'zhangsan', 'age': 30} getTest(11, 22, 33, tuple, dict)
當(dāng)我們還是按照上面的 *args 和 **kwargs 寫法寫時,發(fā)現(xiàn)參數(shù) tuple 和 dict 被當(dāng)做一個數(shù)據(jù)輸出到了 *args 里,這是由于當(dāng)我們傳入 tuple 和 dict 時被當(dāng)做了一個整體,我們可以在傳入前先將其解構(gòu)一下就可以了,如下:
def getTest(a, b, c=123, *args, **kwargs): print(a) # 11 print(b) # 22 print(c) # 33 print(args) # (44, 55, 66) print(kwargs) # {'name': 'zhangsan', 'age': 30} tuple=(44,55,66) dict={'name': 'zhangsan', 'age': 30} getTest(11, 22, 33, *tuple, **dict)
如上,我們在傳入?yún)?shù)的時候傳入 *tuple 和 **dict 就可以解決了,但是如果我們在傳入?yún)?shù)時和調(diào)用時都不加 * 不就相當(dāng)于把整個變量作為參數(shù)了嗎?如下:
def getTest(a, b, c=123, tuple, dict): print(a) print(b) print(c) print(tuple) print(dict) tuple=(44,55,66) dict={'name': 'zhangsan', 'age': 30} getTest(11, 22, 33, tuple, dict) # SyntaxError: non-default argument follows default argument
我們會發(fā)現(xiàn)不寫 * 的話會報錯,原因是當(dāng)我們在函數(shù)中定義默認參數(shù)時,默認參數(shù)必須寫在最后面,即 c=123 需寫在最后面,如下:
def getTest(a, b, tuple, dict, c=123): print(a) # 11 print(b) # 22 print(c) # 33 print(tuple) # (44, 55, 66) print(dict) # {'name': 'zhangsan', 'age': 30} tuple=(44,55,66) dict={'name': 'zhangsan', 'age': 30} getTest(11, 22, tuple, dict, 33)
但是如果參數(shù)中存在 * 的話默認參數(shù)不能寫在最后面,如下:
def getTest(a, b, *tuple, **dict, c=123): print(a) print(b) print(c) print(tuple) print(dict) tuple=(44,55,66) dict={'name': 'zhangsan', 'age': 30} getTest(11, 22, *tuple, **dict, 33) # SyntaxError: invalid syntax
由此我們得出函數(shù)的傳參順序為:參數(shù),默認參數(shù),*args,**kwargs。
我們接下來看一下匿名函數(shù)。
python 使用 lambda 來創(chuàng)建匿名函數(shù)。
所謂匿名,意即不再使用 def 語句這樣標(biāo)準(zhǔn)的形式定義一個函數(shù)。
(1)lambda 只是一個表達式,函數(shù)體比 def 簡單很多。
(2)lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
(3)lambda 函數(shù)擁有自己的命名空間,且不能訪問自己參數(shù)列表之外或全局命名空間里的參數(shù)。
(4)雖然lambda函數(shù)看起來只能寫一行,卻不等同于C或C++的內(nèi)聯(lián)函數(shù),后者的目的是調(diào)用小函數(shù)時不占用棧內(nèi)存從而增加運行效率。
lambda 函數(shù)的語法只包含一個語句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
# 實現(xiàn)一個兩數(shù)相加的匿名函數(shù) sum = lambda num1, num2: num1 + num2 print(sum(10, 20)) # 30
看完上述內(nèi)容,你們掌握Python中什么是函數(shù)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)站標(biāo)題:Python中什么是函數(shù)-創(chuàng)新互聯(lián)
分享地址:http://www.rwnh.cn/article28/epjjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、定制開發(fā)、網(wǎng)站內(nèi)鏈、做網(wǎng)站、ChatGPT、建站公司
聲明:本網(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)容