Python自學筆記11-函數的定義和呼叫

2022-08-31 21:01:18

函數是組織程式碼的非常有效的方式,有了函數,我們就可以編寫大規模的專案。可以說,函數是組織程式碼的最小單元。

Python函數的定義

函數是程式碼封裝的一種手段,函數中包含一段可以重複執行的程式碼,在需要用到這些程式碼時,只需要呼叫函數,就會執行函數中的程式碼。

python 函數這麼定義:

def 函數名稱(引數1, 引數2)
 函數體(要執行的程式碼)

比如一個很簡單的函數定義:

def add(a, b):
	return a + b

現在我們舉個例子說明函數的作用。

print('開啟高階車門')
print('開發動機')
print('安全帶')
print('踩油門')
print('掌握方向')

如果要開很多次車,那麼每次都需要敲相同的 5 行程式碼,這樣會造成幾個問題:

  • 很容易編寫不同的程式碼,或者程式碼出現錯誤
  • 程式碼冗餘,可讀性不強
  • 不容易維護,當需要修改某個步驟時,要修改多處。

Python函數的呼叫

現在我們可以把上述程式碼封裝在函數中,當需要執行這些程式碼時,呼叫函數就可以了,這樣減少了很多複製貼上或者手工編寫多行程式碼的步驟,函數的名稱也表明了程式碼的作用,當需要修改部分邏輯,只需要修改函數體就可以了。

def run_car():
    print('開啟高階車門')
    print('發動發動機')
    print('繫上安全帶')
    print('踩油門')
    print('掌握方向')

run_car()
# 其他程式碼
run_car()

Python函數的返回值

return 表示當函數執行完之後,想讓函數外面的程式得到函數執行的結果, return 的值可以任意的資料型別。

def add(a, b):
	return a + b

result = add(3,4)
print(result)

  • 函數體當中的程式碼, 遇到 return 會終止執行。
  • 函數的返回結果可以是任意型別,包括 None
  • 當函數體當中沒有 return ,預設返回 None

Python函數可以返回多個值, 只需要在多個值之間加上逗號,得到的是元組型別。

def add(a, b):
 return a, b

引數的四種型別

return 表示函數返回給外部的值,而參數列示函數從外部接收的值。在函數定義時候的引數叫做形式引數,它其實就是一個變數名稱,在函數呼叫時候的引數叫做實際引數,相當於給變數賦值。

def get_coffee(suger):
    if suger > 100:
        return '甜咖啡'
    elif suger < 1:
        return '美式'
    else:
        return '莫名其妙的咖啡'

result = get_coffee(100)
print(result)

注意,形式引數的個數和實際引數的個數要一樣,而且順序要一致,這種方式叫做位置引數。(和領導吃飯做位置)如果形式引數和實際引數的個數不一致,會導致程式無法分別賦值:

def add(a, b):
    c = a + b - 1
    return c

add(578# NO

關鍵字引數:在呼叫函數的時候,做一個關鍵字標記,以防傳參錯誤,造成損失。主要是當引數很多的情況,你記不清順序,關鍵字去標識資料的意思。

預設引數:在函數定義的時候,給某個變數直接賦值,成為預設值。 就是使用預設值直接賦值,在呼叫函數的時候,可以少傳引數。關鍵字引數,預設引數也好,都必須放到位置引數的後面。

def add(a, b=0):
    c = a + b - 1
    return c

add(a=4, b=6)
add(3)

自動化測試場景:新增多個資料,執行多個用例

def write_case(number):
    for _ in range(number):
        username = input("請輸入使用者名稱:")
        passwd = input("請輸入密碼:")
        age = input("請輸入年齡:")

        user = dict()
        user.update(username=username,
                    passwd=passwd,
                    age=age)
        yield user

def run(case):
    print(f"執行用例-使用者名稱{case['username']}")

    cases = write_case(2)
    for case in cases:
        run(case)