函數(shù)是組織好的,可重復(fù)使用的,用來實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。
定義一個函數(shù):
def 函數(shù)名(參數(shù)列表):
函數(shù)體
#定義一個沒有參數(shù),沒有函數(shù)體實(shí)現(xiàn)的函數(shù);pass相當(dāng)于占位符,使定義函數(shù)滿足語法要求,或者是先定義一個函數(shù)名,后面再實(shí)現(xiàn)其功能
def func():
pass
#定義一個add函數(shù),參數(shù)為a,b,返回a+b的結(jié)果:
def add(a,b):
return a+b
print(add(1,2))
3
return函數(shù)最終返回的內(nèi)容,如果沒有寫return,則默認(rèn)返回None,相當(dāng)于return None
函數(shù)不一定要顯式返回,具體要看函數(shù)的功能
函數(shù)分為內(nèi)置的函數(shù)和自定義的函數(shù)兩種
函數(shù)的作用:
1.封裝,別人無須知道實(shí)現(xiàn)的細(xì)節(jié)
2.修改的時候,一處修改,全局生效
3.使用的時候方便,調(diào)用函數(shù)就可以了
什么時候會用到函數(shù)?
策略:
當(dāng)你寫了大段大段的相同或者類似地代碼段后,就需要嘗試去封裝為函數(shù)。
如何寫一個函數(shù):
1.傳參的類型判斷,不符合計算規(guī)則的參數(shù)需要忽略或者其他處理。
2.思考需要聲明哪些變量來存儲計算結(jié)果和中間的計算過程值。
3.開始寫的時候,最好加上中間狀態(tài)的打印語句。一般用的邏輯是遍歷+if判斷+return短路等。
4.計算完畢,想清楚返回1個還是多個數(shù)據(jù)的結(jié)果。
函數(shù)的參數(shù)
可變長參數(shù)(參數(shù)數(shù)量不固定)
*arg:表示把可變的多個非命名參數(shù),轉(zhuǎn)換為了一個元組
**kw:表示把可變的多個命名參數(shù),轉(zhuǎn)換為了一個字典
例:
def add(a,*arg):
result = a
for num in arg:
result += num
return result
print(add(1,2,3,4))
10
def print_sth(a,**kw):
print(a)
for k,v in kw.items():
print(k,v)
print_sth(1,b=2,c=3)
*arg和**kw可以混合使用
def func(a,b,*arg,**kw):
result = a * b
for i in arg:
result *= i
for j in kw.values():
result *= j
return result
print(func(1,2,3,4,f=5)) #等價于1*2*3*4*5
函數(shù)傳入的參數(shù)為不可變的,對外部的變量就沒影響。
按值傳–傳入的不是變量對應(yīng)的內(nèi)存地址。
函數(shù)傳入的參數(shù)為可變的,對外部的變量就有影響。
按引用傳–傳入的是變量對應(yīng)的內(nèi)存地址。
注:
不可變對象:所有的數(shù)字、字符串、元組
可變:set dict list 實(shí)例
參數(shù)傳不可變對象的時候,函數(shù)內(nèi)外變量值是獨(dú)立的
參數(shù)傳可變對象的時候,函數(shù)內(nèi)外變量值是關(guān)聯(lián)的
原則1:
如果你傳入的參數(shù)是個變量a,這個變量是可變類型(list、dict、set)
那么函數(shù)內(nèi)部對于這個參數(shù)的所有操作結(jié)果都會影響外部的參數(shù)值
原則2:
如果你傳入的參數(shù)是個變量a,這個變量是不可變類型(字符串、整數(shù)、小數(shù))
那么函數(shù)內(nèi)部對于這個參數(shù)的所有操作結(jié)果不會影響外部的參數(shù)值
函數(shù)和方法
函數(shù):不寫在類里面
方法:寫在類里面的
實(shí)例或類里的叫方法
不在實(shí)例或類里的叫函數(shù)
幾種方法的區(qū)別
類方法、實(shí)例方法、靜態(tài)方法
類方法可以被類對象或?qū)嵗{(diào)用,實(shí)例方法只能被實(shí)例調(diào)用,它只屬于類的單個實(shí)例擁有,靜態(tài)方法兩者都能調(diào)用,它在類和實(shí)例間共享。Python實(shí)現(xiàn)了一定的靈活性使得類方法和靜態(tài)方法,都能夠被實(shí)例和類二者調(diào)用。
所以三者主要區(qū)別在于參數(shù)傳遞上的區(qū)別,實(shí)例方法隱含傳的參數(shù)是類實(shí)例self,而類方法隱含傳遞的參數(shù)是類本身cls,而靜態(tài)方法無隱含參數(shù),主要為了類實(shí)例也可以直接調(diào)用靜態(tài)方法(方法的參數(shù)將在類/面向?qū)ο蟛糠种v到,此處不做擴(kuò)展)
Python類中隱藏數(shù)據(jù)
類中的方法名前后都有兩個下劃線,表示是Python的內(nèi)置方法,如__init__()
類中的方法名前面有兩個下劃線,表示是Python中的私有方法,類似于java中的private,不能在類外部調(diào)用(如__setId()).
類中的屬性前有兩個下劃線表示聲明該屬性為私有屬性,不能在類的外部被使用或直接訪問,如__name
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
