一、函數(shù)定義和調(diào)用
<1>定義函數(shù)
定義函數(shù)的格式如下:
def 函數(shù)名():
代碼
demo:
# 定義一個函數(shù),能夠完成打印信息的功能
def printInfo():
print('------------------------------------')
print(' 人生苦短,我用Python')
print('------------------------------------')
<2>調(diào)用函數(shù)
定義了函數(shù)之后,就相當(dāng)于有了一個具有某些功能的代碼,想要讓這些代碼能夠執(zhí)行,需要調(diào)用它。調(diào)用函數(shù)很簡單,通過 函數(shù)名() 即可完成調(diào)用。
demo:
# 定義完函數(shù)后,函數(shù)是不會自動執(zhí)行的,需要調(diào)用它才可以
printInfo()
<3>注意:
- 每次調(diào)用函數(shù)時,函數(shù)都會從頭開始執(zhí)行,當(dāng)這個函數(shù)中的代碼執(zhí)行完畢后,意味著調(diào)用結(jié)束了
- 當(dāng)然了如果函數(shù)中執(zhí)行到了return也會結(jié)束函數(shù)
二、函數(shù)的文檔說明
>>> def test(a,b):
... "用來完成對2個數(shù)求和"
... print("%d"%(a+b))
...
>>>
>>> test(11,22)
33
如果執(zhí)行,以下代碼
>>> help(test)
能夠看到test函數(shù)的相關(guān)說明
Help on function test in module __main__:
test(a, b)
用來完成對2個數(shù)求和
(END)
三、函數(shù)參數(shù)(一)
在定義函數(shù)的時候可以讓函數(shù)接收數(shù)據(jù),這就是函數(shù)的傳參。
<1> 定義帶有參數(shù)的函數(shù)
示例如下:
def add2num(a, b):
c = a+b
print c
<2> 調(diào)用帶有參數(shù)的函數(shù)
以調(diào)用上面的add2num(a, b)函數(shù)為例:
def add2num(a, b):
c = a+b
print c
add2num(11, 22) # 調(diào)用帶有參數(shù)的函數(shù)時,需要在小括號中,傳遞數(shù)據(jù)
調(diào)用帶有參數(shù)函數(shù)的運行過程:

<3> 調(diào)用函數(shù)時參數(shù)的順序
>>> def test(a,b):
... print(a,b)
...
>>> test(1,2)
1 2
>>> test(b=1,a=2)
2 1
>>>
>>> test(b=1,2)
File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
>>>
>>>
<4> 小總結(jié)
- 定義時小括號中的參數(shù),用來接收參數(shù)用的,稱為 “形參”
- 調(diào)用時小括號中的參數(shù),用來傳遞給函數(shù)用的,稱為 “實參”
四、函數(shù)返回值(一)
<1>“返回值”介紹
開發(fā)中的場景:
定義了一個函數(shù),完成了獲取室內(nèi)溫度,想一想是不是應(yīng)該把這個結(jié)果給調(diào)用者,只有調(diào)用者擁有了這個返回值,才能夠根據(jù)當(dāng)前的溫度做適當(dāng)?shù)恼{(diào)整。
- 所謂“返回值”,就是程序中函數(shù)完成一件事情后,最后給調(diào)用者的結(jié)果。
<2>帶有返回值的函數(shù)
想要在函數(shù)中把結(jié)果返回給調(diào)用者,需要在函數(shù)中使用return
如下示例:
def add2num(a, b):
c = a+b
return c
或者
def add2num(a, b):
return a+b
<3>保存函數(shù)的返回值
如果一個函數(shù)返回了一個數(shù)據(jù),那么想要用這個數(shù)據(jù),那么就需要保存。
保存函數(shù)的返回值示例如下:
#定義函數(shù)
def add2num(a, b):
return a+b
#調(diào)用函數(shù),順便保存函數(shù)的返回值
result = add2num(100,98)
#因為result已經(jīng)保存了add2num的返回值,所以接下來就可以使用了
print(result)
結(jié)果:
198
五、4種函數(shù)的類型
函數(shù)根據(jù)有沒有參數(shù),有沒有返回值,可以相互組合,一共有4種
- 無參數(shù),無返回值
- 無參數(shù),有返回值
- 有參數(shù),無返回值
- 有參數(shù),有返回值
<1>無參數(shù),無返回值的函數(shù)
此類函數(shù),不能接收參數(shù),也沒有返回值,一般情況下,打印提示燈類似的功能,使用這類的函數(shù)。
def printMenu():
print('--------------------------')
print(' xx涮涮鍋 點菜系統(tǒng)')
print('')
print(' 1. 羊肉涮涮鍋')
print(' 2. 牛肉涮涮鍋')
print(' 3. 豬肉涮涮鍋')
print('--------------------------')
結(jié)果:

<2>無參數(shù),有返回值的函數(shù)
此類函數(shù),不能接收參數(shù),但是可以返回某個數(shù)據(jù),一般情況下,像采集數(shù)據(jù),用此類函數(shù)。
# 獲取溫度
def getTemperature():
# 這里是獲取溫度的一些代碼過程
# 為了簡單起見,先模擬返回一個數(shù)據(jù)
return 24
temperature = getTemperature()
print('當(dāng)前的溫度為:%d'%temperature)
結(jié)果:
當(dāng)前的溫度為: 24
<3>有參數(shù),無返回值的函數(shù)
此類函數(shù),能接收參數(shù),但不可以返回數(shù)據(jù),一般情況下,對某些變量設(shè)置數(shù)據(jù)而不需結(jié)果時,用此類函數(shù)。
<4>有參數(shù),有返回值的函數(shù)
此類函數(shù),不僅能接收參數(shù),還可以返回某個數(shù)據(jù),一般情況下,像數(shù)據(jù)處理并需要結(jié)果的應(yīng)用,用此類函數(shù)。
# 計算1~num的累積和
def calculateNum(num):
result = 0
i = 1
while i<=num:
result = result + i
i+=1
return result
result = calculateNum(100)
print('1~100的累積和為:%d'%result)
結(jié)果:
1~100的累積和為: 5050
<5>小總結(jié)
- 函數(shù)根據(jù)有沒有參數(shù),有沒有返回值可以相互組合
- 定義函數(shù)時,是根據(jù)實際的功能需求來設(shè)計的,所以不同開發(fā)人員編寫的函數(shù)類型各不相同
六、函數(shù)的嵌套調(diào)用
def testB():
print('---- testB start----')
print('這里是testB函數(shù)執(zhí)行的代碼...(省略)...')
print('---- testB end----')
def testA():
print('---- testA start----')
testB()
print('---- testA end----')
testA()
結(jié)果:
---- testA start----
---- testB start----
這里是testB函數(shù)執(zhí)行的代碼...(省略)...
---- testB end----
---- testA end----
小總結(jié):
- 一個函數(shù)里面又調(diào)用了另外一個函數(shù),這就是所謂的函數(shù)嵌套調(diào)用
- 函數(shù)嵌套調(diào)用
- 如果函數(shù)A中,調(diào)用了另外一個函數(shù)B,那么先把函數(shù)B中的任務(wù)都執(zhí)行完畢之后才會回到上次 函數(shù)A執(zhí)行的位置
七、函數(shù)應(yīng)用:打印圖形和數(shù)學(xué)計算
案例1:
- 寫一個函數(shù)打印一條橫線
- 打印自定義行數(shù)的橫線
參考代碼1
# 打印一條橫線
def printOneLine():
print("-"*30)
# 打印多條橫線
def printNumLine(num):
i=0
# 因為printOneLine函數(shù)已經(jīng)完成了打印橫線的功能,
# 只需要多次調(diào)用此函數(shù)即可
while i<num:
printOneLine()
i+=1
printNumLine(3)
案例2:
- 寫一個函數(shù)求三個數(shù)的和
- 寫一個函數(shù)求三個數(shù)的平均值
參考代碼2
# 求3個數(shù)的和
def sum3Number(a,b,c):
return a+b+c # return 的后面可以是數(shù)值,也可是一個表達式
# 完成對3個數(shù)求平均值
def average3Number(a,b,c):
# 因為sum3Number函數(shù)已經(jīng)完成了3個數(shù)的就和,所以只需調(diào)用即可
# 即把接收到的3個數(shù),當(dāng)做實參傳遞即可
sumResult = sum3Number(a,b,c)
aveResult = sumResult/3.0
return aveResult
# 調(diào)用函數(shù),完成對3個數(shù)求平均值
result = average3Number(11,2,55)
print("average is %d"%result)
