何謂函數式編程

      在〈何謂函數式編程〉中尚無留言

簡介

Functional Programming中文翻譯成函數式編程, 是函數的更進階的用法. 所以若還不是很理解函數的運作, 請先研讀 Functions這編文章

函數式編程講白了, 就是要把函數本身當成變數, 傳送給其他函數. 函數式編程並不是Python專有的技術, 大多程式語言都可以實作出來, 如 C的函數指標, C# 的delegate,  甚至連JavaScript都可以實作出來. 如果您是專精Java的話, 那就只有在Java SE8才開始支援, 也就是所謂的Lambda.

C的函數指標很早就有了,  一般人比較少去接觸到這個領域, 再加上C#, Python也是最近這幾年才開始流行, Java更是到了8版才支援, 所以才會誤以為是新的領域. 近來程式愈來愈複雜, 要求的功能愈來愈多, 所以函數指標就突顯了其強大的功能及重要性.

指標函數(Indicator functions) : 函數的傳回值為一指標型態
函數指標(function pointer) : 指標指向函數, 可以把函數當成變數, 傳遞給其他函數的參數

函數名稱

以abs(-10)函數為例, 會返回參數的絕對值. abs為系統的內建函數, 但如果把 abs直接印出來會怎樣呢?

print(abs)
結果 : 
<built-in function abs>

說實在, 熟強型語言的人, 是絕對不會去寫這種白痴程式的. 但在弱型語言裏, 卻是再正常不過的事. 因為在Python中, 函數名稱就是變數, 他指向一個能計算絕對值的區塊程式碼.

即然是變數, 那如果真的用變數來取代abs會怎樣. 哇咧, f變成了abs的功能

f=abs
print(f(-10))
結果 :
10

那如果把abs指到別的地方呢? 這下子, abs將不再計算絕對值了, 直接變成了變數的功能.
當然啦, 在實際程式碼中, 我們是不可能白痴到直接把abs給幹掉的.

abs=10
print(abs(=1-))
結果 : 
Traceback (most recent call last):
 File "D:/python/venv/recursive.py", line 2, in <module>
 print(abs(-10))
TypeError: 'int' object is not callable

所以由上面的測試可以歸納出一個結論 : 函數名稱就是變數名稱, 而變數名稱就是函數名稱

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *