python的閉包和JS的閉包不一樣嗎?
def?count():??fs?=?[]????for?i?in?range(1,?4):????????n?=?i?*?i????????def?f():????????????return?n????????fs.append(f)????return?fsf1,?f2,?f3?=?count()print?f1(),?f2(),?f3()
def?count():??fs?=?[]????for?i?in?range(1,?4):????????n?=?i?*?i????????def?f():????????????return?n????????fs.append(f)????return?fsf1,?f2,?f3?=?count()print?f1(),?f2(),?f3()
2020-08-02
舉報
2020-08-04
n=i*i,其實和原來示例里寫的意思是一樣的,你的fs.append(f),這時候進去def f(),返回一個n值給fs,但是你要注意,你的n值下一回在i=2、i=3的時候,是需要用的,也就是n值會改變,不管你的n=i*i放在def f()里面還是外面都一樣是在for循環里面,那么n肯定最后會變成3*3。那你前面傳進去的n 也自然變成 9 。不知道這么說,能否理解,可以參考我的代碼,我提交了
2020-08-02
我在第四行用變量 n 保存了當前 i 的平方結果,最后還是返回 9 9 9,和JS的結果不一樣。
2020-08-02
def count():
? ? fs = []
? ? for i in range(1, 4):
? ? ? ? n = i * i
? ? ? ? def f():
? ? ? ? ? ? return n
? ? ? ? fs.append(f)
? ? return fs
f1, f2, f3 = count()
print f1(), f2(), f3()