python的函式不但可以返回int、str、list、dict等資料型別,還可以返回函式!
例如,定義乙個函式 f(),我們讓它返回乙個函式 g,可以這樣寫:
def f():
print 'call f()...' # 定義函式g: def g():
print 'call g()...' # 返回函式g: return g
仔細觀察上面的函式定義,我們在函式 f 內部又定義了乙個函式 g。由於函式 g 也是乙個物件,函式名 g 就是指向函式 g 的變數,所以,最外層函式 f 可以返回變數 g,也就是函式 g 本身。
呼叫函式 f,我們會得到 f 返回的乙個函式:
>>> x = f() # 呼叫f() call f()...
>>> x # 變數x是f()返回的函式:
>>> x() # x指向函式,因此可以呼叫 call g()... # 呼叫x()就是執行g()函式定義的**
請注意區分返回函式和返回值:
def myabs():
return abs # 返回函式 def myabs2(x):
return abs(x) # 返回函式呼叫的結果,返回值是乙個數值
返回函式可以把一些計算延遲執行。例如,如果定義乙個普通的求和函式:
def calc_sum(lst):
return sum(lst)
呼叫calc_sum()函式時,將立刻計算並得到結果:
>>> calc_sum([1, 2, 3, 4])
但是,如果返回乙個函式,就可以「延遲計算」:
def calc_sum(lst):
def lazy_sum():
return sum(lst)
return lazy_sum
# 呼叫calc_sum()並沒有計算出結果,而是返回函式:
>>> f = calc_sum([1, 2, 3, 4])
>>> f
# 對返回的函式進行呼叫時,才計算出結果:
>>> f()
由於可以返回函式,我們在後續**裡就可以決定到底要不要呼叫該函式。
python中 python中的 與
這一部分首先要理解python記憶體機制,python中萬物皆物件。對於不可變物件,改變了原來的值,其別名 變數名 繫結到了新值上面,id肯定會改變 對於可變物件,操作改變了值,id肯定會變,而 是本地操作,其值原地修改 對於 號操作,可變物件和不可變物件呼叫的都是 add 操作 對於 號操作,可變...
python中否定for 在python中否定函式
有沒有一種方法可以否定乙個函式,使它返回負數。在我的函式中,我有條件句,每個條件句都讓這個 烏龜 移動。有沒有一種方法可以否定這一點,所以烏龜的每乙個動作都是否定的。我說的是 狀況 在def ttinterpret program interpret program as a tinyturtle ...
python中雙重迴圈 加速Python中的雙迴圈
有沒有辦法加快從上一次迭代更新其值的雙迴圈?在 中 def calc n,m x 1.0 y 2.0 container np.zeros n,2 for i in range n for j in range m x np.random.gamma 3,1.0 y y 4 y np.random....