菜鳥Python筆記-基礎(chǔ)篇05:函數(shù)(一)

一、函數(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é)果:


結(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:

  1. 寫一個函數(shù)打印一條橫線
  2. 打印自定義行數(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:

  1. 寫一個函數(shù)求三個數(shù)的和
  2. 寫一個函數(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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容