返回值
高階函數的返回值, 除了可以是一般的資料型態外, 也可以是函數, 由下面的例子可以得知實作的方式
def math(args): def sum(): result=0 for x in args: result += x return result return sum f=math(range(1,101)) print(f())
在函數裏, 還有函數, 這若是在強型語言中, 寫成這樣絕對會被槍斃的, 代表你根本不懂程式. 但在Python中有著極強大的功能. 所以請注意, 別把Python的觀念用在強型語言上, 否則你連面試的機會多沒有.
1. 函數裏又定義函數, 稱為內部函數. 內部函數有一個一般型態的返回值. 外部函數也有返回值, 但返回的是函數.
2. 由下可知, f1跟f2是二個不相同的函數, 不互相影響
f1=math(range(1,101)) f2=math(range(1,101)) print(f1==f2) 結果 : False
Closure
在下面的函數中, 迴圈會跟三次迴路, 每一個迴路都會傳回一個內部函數, 然後放入fs list中. 最後在外面使用 f[0]()調用函數. 但這三個函數都是 9, 原因是因為 i 都跑到3了. 然後才執行 f[0](), 所以結果三個都是9
def count(): fs = [] for i in range(1, 4): def f(): return i*i fs.append(f) return fs f = count() print(f[0](), f[1](), f[2]())