iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0
佛心分享-IT 人自學之術

Python 學習筆記系列 第 22

筆記Day22:高階函式 Higher Order Function

  • 分享至 

  • xImage
  •  

在第16天的文章提到了函式 Function,大概講過基本概念後知道了函式可以把程式碼封裝起來,讓邏輯更加模組化以及增加重複使用性,但 Python 中函式可不只有這樣,函式本身不僅能『執行』,還能夠『回傳』——這就是所謂的『高階函式』,它能夠讓我們以『函式當作變數』的方式來操作,實現簡潔、抽象化的程式設計。

高階函式

在 Python 中函式屬於一等公民,允許對函式進行以下操作:

  • 函式作為參數傳入。
  • 函式可作為輸出回傳。
  • 函式可被修改。
  • 函式可被賦值給變數。

舉個例子:
在這個例子中,apply()方法屬於高階函式,因為它接受函式func作為參數,而square()方法只是一個普通的函式,但當它被傳入apply()方法後,讓apply()可以套用不同的邏輯,這樣的設計可以應付各種邏輯,不必寫死在函式內部。

def apply(func, value):
    return func(value)

def square(x):
    return x * x

print(apply(square, 5))  # 25

函式當作變數

有提到函式可被賦值給變數,在 Python 中函式的本質上是『物件』,因此能像是變數一樣被儲存和傳遞。

def person(name):
    return f"我是{name}。"
hello = person
print(hello("小明")) # 我是小明

函式當作參數

當希望『方法』是彈性的時候,就可以把函式當作參數傳入。
從以下例子得知calculate()方法不需要具體的知道是加法或是乘法,只要接受一個函式即可。

def calculate(func, x, y):
    return func(x, y)

def add(x, y):
    return x + y

def mul(x, y):
    return x * y

print(calculate(add, 4, 3)) # 7
print(calculate(mul, 2, 4)) # 8

常見高階函式

以下來介紹幾個常見的高階函式:

  1. mapmap(func, iterable)將函式func套用到可迭代的物件每個元素上,並回傳新的結果。
numbers = [1, 2, 3]
squares = map(lambda x: x**2, numbers)
print(list(squares)) # [1, 4, 9]
  1. filterfilter(func, iterable)根據條件函式func篩選符合條件的元素。
numbers = [1, 2, 3]
evens = filter(lambda x: x % 2 == 0, numbers)
print(list(evens))  [2]
  1. reducereduce(func, iterable)需要做引入才能夠使用,將函式不斷做序列元素累積成單一結果。
from functools import reduce

numbers = [1, 2, 3]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # 6
  1. sortedsorted(func, iterable)可接受函式key來當作排序依據。
words = ["tomato", "mango", "apple", "banana"]
print(sorted(words, key=len)) # ['mango', 'apple', 'tomato', 'banana']

那麼今天就介紹到這,明天見ㄅㄅ!


上一篇
筆記Day21:正規表達式 Regular Expression
下一篇
筆記Day23:裝飾器 Decorator
系列文
Python 學習筆記24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言