閉包返回函式不引用迴圈變數

2021-09-03 07:53:54 字數 681 閱讀 5257

def count():

fs =

for i in range(1, 4):

def f():

return i*i

return fs

f1, f2, f3 = count()

"""print f1() ---> 9

print f2() ---> 9

print f3() ---> 9

"""# 全部都是9! 原因就在於返回的函式引用了變數i,但它並非立刻執行。等到3個函式都返回時,它們所引用的變數i已經變成了3,因此最終結果為9

# 返回閉包時牢記一點:返回函式不要引用任何迴圈變數,或者後續會發生變化的變數。

# 如果一定要引用迴圈變數怎麼辦?方法是再建立乙個函式,用該函式的引數繫結迴圈變數當前的值,無論該迴圈變數後續如何更改,已繫結到函式引數的值不變:

def count():

def f(j):

return j*j

fs =

for i in range(1, 4):

return fs

f4,f5,f6 = count()

"""print f4 ---> 1

print f5 ---> 4

print f6 ---> 9

"""

python返回函式閉包

注意到返回的函式在其定義內部引用了區域性變數args,所以,當乙個函式返回了乙個函式後,其內部的區域性變數還被新函式引用,所以,閉包用起來簡單,實現起來可不容易。另乙個需要注意的問題是,返回的函式並沒有立刻執行,而是直到呼叫了f 才執行。我們來看乙個例子 def count fs for i in ...

Python 返回函式 閉包小結

即函式的返回值可以為乙個函式 乙個例子 def outer 外函式 t 0 def inner 內函式 t 0 1return t 0 return inner 外函式返回內函式的引用 實現機制 外函式中定義了內函式,內函式運用了外函式的臨時變數 外函式繫結給內函式的區域性變數 閉包變數 外函式返回...

返回函式之迴圈變數問題

返回函式之迴圈變數問題 一 學習要點 1.返回函式建立的時候不被執行,呼叫的時候才被執行 2.返回函式不要應用任何迴圈變數或者後續會發生變化的變數 3.如果一定要引用迴圈變數,方法是在建立乙個函式,用該函式的引數繫結迴圈變數當前的值,無論該迴圈變數後續如何更改,已繫結的函式引數的值不變 二 學習 結...