函式作為參數

函式作為參數傳遞給函式,傳遞過去的是「處理邏輯」。

如果有多個「處理邏輯」,但其它程式碼是固定的,可以把多個處理邏輯抽取出來。

簡言之,就是把「變動」的邏輯抽取出來,「固定」的邏輯放在原處。

以下有三個不同的處理邏輯,分別是一倍獎金、二倍獎金、三倍獎金。
計算薪水的方式是固定,就是獎金 + 薪水。
但不同職位有不同獎金的計算方式。

  • CEO使用三倍獎金邏輯。
  • 主管使用二倍獎金邏輯。
  • 職員使用一倍獎金邏輯。

呼叫計算薪水cal_salary函式,並把不同的獎金邏輯代入。
注意!把函式名傳入函式時,圓括號()不用傳入,因為不是呼叫函式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 獎金邏輯
def bonus_1time(bonus):
    return bonus


def bonus_2times(bonus):
    return bonus * 2


def bonus_3times(bonus):
    return bonus * 3

# 固定計算方式 = 獎金 + 薪水
def cal_salary(param_func, bonus, salary):
    return param_func(bonus) + salary

# 計算薪水
# 代入不同的獎金邏輯
print(f"CEO的bonus = {cal_salary(bonus_3times, 1000, 100000)}")
print(f"主管的bonus = {cal_salary(bonus_2times, 900, 50000)}")
print(f"職員的bonus = {cal_salary(bonus_1time, 800, 20000)}")
CEO的bonus = 103000
主管的bonus = 51800
職員的bonus = 20800

把函式名傳入函式的語法:

函式(函式名,參數)
cal_salary(bonus_3times, 1000, 100000)

作為參數的函式,也可以使用外部參數。

def 外部函式(函式名, 外部參數):
   函式名(外部參數)

使用type(函式名)就可以輸出類型。

1
2
def fun3(param_func, code):
    print(type(param_func))
<class 'function'>

results matching ""

    No results matching ""