1.定義函數(shù)
在Python中可以使用def關(guān)鍵字來(lái)定義函數(shù)刊殉,和變量一樣每個(gè)函數(shù)也有一個(gè)響亮的名字官套,而且命名規(guī)則跟變量的命名規(guī)則是一致的颖变。在函數(shù)名后面的圓括號(hào)中可以放置傳遞給函數(shù)的參數(shù)咸产,這一點(diǎn)和數(shù)學(xué)上的函數(shù)非常相似,程序中函數(shù)的參數(shù)就相當(dāng)于是數(shù)學(xué)上說(shuō)的函數(shù)的自變量,而函數(shù)執(zhí)行完成后我們可以通過(guò)return關(guān)鍵字來(lái)返回一個(gè)值眼虱,這相當(dāng)于數(shù)學(xué)上說(shuō)的函數(shù)的因變量。
既然定義明白了那么我們現(xiàn)在寫(xiě)一個(gè)簡(jiǎn)單的求階乘的方法
def factorial (num ):
result = 1
for i in range(1,num+1):
result *= i
return result
#這個(gè)是測(cè)試的方法
print(factorial(2))
2.函數(shù)的參數(shù)
函數(shù)是絕大多數(shù)編程語(yǔ)言中都支持的一個(gè)代碼的“構(gòu)建塊”席纽,但是Python中的函數(shù)與其他語(yǔ)言中的函數(shù)還是有很多不太相同的地方捏悬,其中一個(gè)顯著的區(qū)別就是Python對(duì)函數(shù)參數(shù)的處理。在Python中润梯,函數(shù)的參數(shù)可以有默認(rèn)值过牙,也支持使用可變參數(shù),所以Python并不需要像其他語(yǔ)言一樣支持函數(shù)的重載纺铭,因?yàn)槲覀冊(cè)诙x一個(gè)函數(shù)的時(shí)候可以讓它有多種不同的使用方式寇钉,下面是兩個(gè)小例子。
def add (a=0 ,b=0,c=0):
return a + b +c
#咱們可以輸入任意數(shù)量的參數(shù)
print(add())
print(add(1))
print(add(1,2))
print(add(1,2,3))
#可以改變參數(shù)的順序
print(add(b=3,a=4,c=5))
我們給上面兩個(gè)函數(shù)的參數(shù)都設(shè)定了默認(rèn)值舶赔,這也就意味著如果在調(diào)用函數(shù)的時(shí)候如果沒(méi)有傳入對(duì)應(yīng)參數(shù)的值時(shí)將使用該參數(shù)的默認(rèn)值扫倡,所以在上面的代碼中我們可以用各種不同的方式去調(diào)用add函數(shù),這跟其他很多語(yǔ)言中函數(shù)重載的效果是一致的竟纳。
其實(shí)上面的add函數(shù)還有更好的實(shí)現(xiàn)方案撵溃,因?yàn)槲覀兛赡軙?huì)對(duì)0個(gè)或多個(gè)參數(shù)進(jìn)行加法運(yùn)算,而具體有多少個(gè)參數(shù)是由調(diào)用者來(lái)決定锥累,我們作為函數(shù)的設(shè)計(jì)者對(duì)這一點(diǎn)是一無(wú)所知的缘挑,因此在不確定參數(shù)個(gè)數(shù)的時(shí)候,我們可以使用可變參數(shù)桶略,代碼如下所示语淘。
# 在參數(shù)前使用*表示args是可變參數(shù)
# 也就是說(shuō)調(diào)用add函數(shù)時(shí)傳入的參數(shù)個(gè)數(shù)可以是0個(gè)或多個(gè)
def add(*args):
total = 0
for val in args:
total += val
return total
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
print(add(1, 3, 5, 7, 9))