亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Python 中的函數

函數是具有某種特定功能的代碼塊,可以重復使用。在前面的學習中你已經認識到了很多 Python 的內置函數。這節課我們就來創建我們自己的函數:

1. 重復性的代碼

1.1 什么是重復性的代碼

在處理功能相似的邏輯時,會出現結構雷同的代碼,例如:有兩個列表,編寫程序分別打印這兩個列表,代碼如下:

實例演示
預覽 復制
復制成功!
a = [1, 2, 3]
b = [10, 20, 30]

# 打印輸出列表 a 的相關信息
print('length of list is %d' % len(a)) 
i = 0
while i < len(a):
    print(a[i]) 
    i = i + 1 

# 打印輸出列表 b 的相關信息
print('length of list is %d' % len(b)) 
i = 0
while i < len(b):
    print(b[i]) 
    i = i + 1
運行案例 點擊 "運行案例" 可查看在線運行效果
  • 在第 1 行,列表 a 包含 3 個元素,現在希望打印輸出列表 a
  • 在第 2 行,列表 b 包含 3 個元素,現在希望打印輸出列表 b
  • 在第 4 行至第 9 行,使用 while 循環打印輸出列表 a
  • 在第 11 行至第 16 行,使用 while 循環打印輸出列表 b

很顯然,打印列表 a 的代碼與打印列表 b 的代碼非常相似,這兩段代碼被稱為重復性的代碼。

1.2 可維護性差

代碼的重復性導致程序的可維護性差,當需要修改處理邏輯時,則需要在多處進行修改

上面的例子程序輸出結果為:

length of list is 3
1
2
3
length of list is 3
10
20
30

現在希望調整程序的輸出結果,輸出列表元素時,同時輸出元素的下標,如下所示:

length of list is 3
list[0] = 1
list[1] = 2
list[2] = 3
length of list is 3
list[0] = 10
list[1] = 20
list[2] = 30

為了實現這樣的需求變更,需要修改原有的程序,如下所示:

實例演示
預覽 復制
復制成功!
a = [1, 2, 3]
b = [10, 20, 30]

# 打印輸出列表 a 的相關信息
print('length of list is %d' % len(a)) 
i = 0
while i < len(a):
    print('list[%d] = %d' % (i, a[i])) # 修改此行
    i = i + 1 

# 打印輸出列表 b 的相關信息
print('length of list is %d' % len(b)) 
i = 0
while i < len(b):
    print('list[%d] = %d' % (i, b[i])) # 修改此行
    i = i + 1
運行案例 點擊 "運行案例" 可查看在線運行效果
  • 在第 8 行,修改原有的 print (a [i]) 語句
  • 在第 15 行,修改原有的 print (b [i]) 語句

可以看出,當打印輸出列表的功能需求變化時,則需要在多處進行修改

2. 函數的定義

函數是可重復使用的,用來實現單一功能的代碼段。 使用函數描述程序中功能相似的代碼段,從而消除代碼的重復性。函數定義的語法如下:

def 函數名(參數列表):
    函數體

定義一個函數時使用 def 語句,依次寫出函數名、參數列表和冒號,然后,在縮進塊中編寫函數體。一個打印兩個數之間的最大值的例子如下:

實例演示
預覽 復制
復制成功!
def max(a, b):
    if a > b:
        print(a)
    else:
        print(b)        

max(1, 2)
max(20, 10)
運行案例 點擊 "運行案例" 可查看在線運行效果

運行該程序,輸出如下:

2
20
  • 在第 1 行,使用 def 關鍵字定義函數 max,函數 max 有兩個參數 a 和 b
  • 在第 2 行到第 5 行,定義了函數體,使用 if 語句打印參數 a 和 b 之間的較大者
  • 在第 7 行,max (1, 2) 調用函數 max,將參數 a 設定為 1、參數 b 設定為 2,執行第 2 行到第 5 行的函數體,執行輸出結果為 2
  • 在第 8 行,max (20, 10) 調用函數 max,將參數 a 設定為 20、參數 b 設定為 10,執行第 2 行到第 5 行的函數體,執行輸出結果為 20

3. 消除重復性的代碼

3.1 消除重復性的代碼

在第 1 小節的例子中,編寫程序分別打印兩個列表,程序使用了兩段重復性代碼實現打印兩個列表。通過使用函數,可以消除程序中重復性的代碼,如下所示:

實例演示
預覽 復制
復制成功!
# 打印輸出列表 x 的相關信息
def print_list(x):
    print('length of list is %d' % len(x)) 
    i = 0
    while i < len(x):
        print(x[i]) 
        i = i + 1 

a = [1, 2, 3]
b = [10, 20, 30]

print_list(a)
print_list(b)
運行案例 點擊 "運行案例" 可查看在線運行效果
  • 在第 2 行,使用 def 關鍵字定義函數 print_list,函數 print_list 有一個參數 x
  • 在第 3 行到第 7 行,定義了函數體,參數 x 表示一個列表,函數功能是打印參數 x 對應的列表
  • 在第 9 行,列表 a 包含 3 個元素,現在希望打印輸出列表 a
  • 在第 10 行,列表 b 包含 3 個元素,現在希望打印輸出列表 b
  • 在第 12 行,print_list (a) 調用函數 print_list,將參數 x 設定為 a,打印列表 a
  • 在第 13 行,print_list (b) 調用函數 print_list,將參數 x 設定為 b,打印列表 b

3.2 提高可維護性

上面的例子程序輸出結果為:

length of list is 3
1
2
3
length of list is 3
10
20
30

現在希望調整程序的輸出結果,輸出列表元素時,同時輸出元素的下標,如下所示:

length of list is 3
list[0] = 1
list[1] = 2
list[2] = 3
length of list is 3
list[0] = 10
list[1] = 20
list[2] = 30

為了實現這樣的需求變更,需要修改原有的程序,如下所示:

# 打印輸出列表 x 的相關信息
def print_list(x):
    print('length of list is %d' % len(x))
    i = 0
    while i < len(x):
        print('list[%d] = %d' % (i, x[i])) # 修改此行
        i = i + 1

a = [1, 2, 3]
b = [10, 20, 30]

print_list(a)
print_list(b)
  • 在第 3 行,修改原有的 print (x [i]) 語句。

函數 print_list 定義了打印列表的功能邏輯,因此當打印列表的功能需求變化時,只需要在函數的定義處進行修改即可,不需要在多處進行修改,從而提高了程序的可維護性。

4. 函數的返回

4.1 return 語句

Python 提供了 return 語句用于從函數中返回,當程序執行到 return 語句時,程序從函數中返回到調用函數的地方,舉例如下:

實例演示
預覽 復制
復制成功!
def test():
    print('Before return')
    return
    print('After return') # 這條語句不會被執行

print('Before test')
test()    
print('After test')
運行案例 點擊 "運行案例" 可查看在線運行效果

程序運行時,輸出如下:

Before test
Before return
After test

從程序的輸出可以看出,程序中的第 4 行代碼 print (‘After return’) 沒有被執行,當程序執行第 3 行的 return 語句時,會終止函數的執行,返回調用函數的地方。

return 語句有兩個常見的用途:

  • 提前退出函數
  • 向函數的調用者返回值

4.2 提前退出函數

通常情況下,函數執行到最后一條語句時退出函數的執行,但某些情況下,可以通過 return 語句提前退出函數。例如,編寫一個函數 check,根據性別和年齡進行處理,該函數僅處理 age > 50 的男性,忽略女性和年輕人,處理的代碼如下:

實例演示
預覽 復制
復制成功!
def check(gender, age):
    if gender == 'female':
       return
    if age < 50:
       return

    print('We only process old man')
    print(gender)
    print(age)
運行案例 點擊 "運行案例" 可查看在線運行效果
  • 在第 1 行,定義了函數 check,具有兩個參數 gender 和 age
  • 在第 2 行,檢查 gender 是否等于 ‘female’
  • 在第 3 行,如果是的,則忽略,通過 return 語句提前返回
  • 在第 2 行,檢查 age 是否小于 50
  • 在第 3 行,如果是的,則忽略,通過 return 語句提前返回
  • 在第 7 行到第 9 行,對 age > 50 的男性進行處理

4.3 函數的返回值

return 語句可以攜帶參數,該參數作為函數的計算結果返回給調用者,語法如下:

return 返回值

下面編寫一個程序計算從 1 到 N 的累加和,代碼如下:

實例演示
預覽 復制
復制成功!
def compute(N):
    sum = 0
    i = 1
    while i <= N:
        sum = sum + i
        i = i + 1
    return sum

sum = compute(100)    
print(sum)
運行案例 點擊 "運行案例" 可查看在線運行效果
  • 在第 1 行,定義函數 compute (n),函數計算從 1 到 N 的累加和
  • 在第 2 行到第 6 行,函數計算從 1 到 N 的累加和,將累加和保存到變量 sum 中
  • 在第 7 行,通過 return 語句將計算結果返回給調用者
  • 在第 9 行,調用函數 compute (100) 計算從 1 累加到 100,將 compute 函數的返回結果保存到變量 sum 中
  • 在第 10 行,打印計算結果,計算結果為 5050

5. 小結

這節課我們主要學習了什么是函數,以及在 Python 中函數如何定義,和函數的返回值等一些函數的基本內容,大家要多多練習本節課中的代碼。函數在 Python 編程中是非常重要的一個知識點,學好了函數的使用會讓你在工作中事半功倍。