中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Python中什么是函數(shù)-創(chuàng)新互聯(lián)

創(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)

營銷型網(wǎng)站建設(shè)
裕民县| 深水埗区| 玉环县| 广汉市| 石景山区| 阳高县| 水城县| 镇远县| 奉节县| 南宫市| 华坪县| 巴楚县| 丁青县| 湘潭市| 乐业县| 合作市| 高要市| 嵊州市| 湘潭市| 东至县| 女性| 黎城县| 盐边县| 乐平市| 板桥市| 广灵县| 潼关县| 安新县| 洛川县| 台安县| 蓬莱市| 南阳市| 嘉义市| 渝北区| 湾仔区| 康乐县| 荥阳市| 股票| 噶尔县| 鸡东县| 黎川县|