-
Notifications
You must be signed in to change notification settings - Fork 94
02 FunctionalProgramming
ccckmit edited this page Dec 4, 2024
·
1 revision
在這一章中,我們將學習函數式程式設計的基礎概念,以及如何用 Python 實現常見的函數式編程操作,例如 map、filter、reduce 等。以下程式碼展示了這些操作的具體實現。
RANGE(m, n) 函數的功能是產生一個從 m 到 n 的整數列表,類似於內建的 range 函數,但返回的是列表。
def RANGE(m, n):
r = []
for i in range(m, n + 1):
r.append(i)
return r範例:
print(RANGE(1, 5))
# 輸出: [1, 2, 3, 4, 5]EACH(a, f) 接受一個列表 a 和一個函數 f,對 a 中的每個元素執行 f。
def EACH(a, f):
for x in a:
f(x)範例:
a = RANGE(1, 5)
EACH(a, lambda x: print(f"Element: {x}"))
# 輸出:
# Element: 1
# Element: 2
# Element: 3
# Element: 4
# Element: 5MAP(a, f) 將函數 f 應用於列表 a 的每個元素,並返回結果列表。
def MAP(a, f):
r = []
for x in a:
r.append(f(x))
return r範例:
a = RANGE(1, 5)
print(MAP(a, lambda x: x * x))
# 輸出: [1, 4, 9, 16, 25]FILTER(a, f) 根據條件函數 f 過濾列表 a 的元素,並返回符合條件的結果列表。
def FILTER(a, f):
r = []
for x in a:
if f(x):
r.append(x)
return r範例:
a = RANGE(1, 5)
print(FILTER(a, lambda x: x % 2 == 1))
# 輸出: [1, 3, 5]REDUCE(a, f, init) 使用函數 f 對列表 a 進行累積操作,初始值為 init。
def REDUCE(a, f, init):
r = init
for x in a:
r = f(r, x)
return r範例:
a = RANGE(1, 5)
print(REDUCE(a, lambda x, y: x + y, 0))
# 輸出: 15以下是完整的程式碼範例,展示了如何使用上述函數:
if __name__ == "__main__":
a = RANGE(1, 5)
# 遍歷並打印每個元素
EACH(a, lambda x: print(x))
# 將列表中的每個元素平方
print(MAP(a, lambda x: x * x))
# 過濾出奇數
print(FILTER(a, lambda x: x % 2 == 1))
# 將列表中的元素累加
print(REDUCE(a, lambda x, y: x + y, 0))執行結果:
$ python fp.py
1
2
3
4
5
[1, 4, 9, 16, 25]
[1, 3, 5]
15函數式程式設計使我們能以簡潔且抽象的方式處理列表操作。透過設計這些高階函數,我們可以大幅減少重複的程式碼,並提高程式的可讀性和維護性。
從希爾伯特到圖靈的那些故事
-- 以 Python 展現這些故事背後的程式