差別是什么啊
def count():
? ? fs = []
? ? for i in range(1, 4):
? ? ? ? def f(i):
? ? ? ? ? ? return i*i
? ? ? ? fs.append(f(i))
? ? return fs
f1, f2, f3 = count()
print f1, f2, f3
這個可以運行但是下面的為什么不可以啊
?def?count():
????fs?=?[]
????for?i?in?range(1,?4):
????????def?f(i):
????????????return?i*i
????????fs.append(f(i))
????return?fs
f1,?f2,?f3?=?count()
print?f1(),?f2(),?f3()
f1和f1()區別在哪???還有就是同學代碼里的lambda什么意思啊,在第二個代碼的第五行加一個lambda怎么就行了???
問題有些冗贅,還請包含小白的無知,謝謝大家!
2018-11-17
首先,根據第五行return i*i和第六行fs.append(f(i))語句,count()返回的列表fs的元素是整數,而不是函數。
其次f1, f2, f3 = count()表示f1 = fs[0] , f2 = fs[1], f3 = fs[2],即f1, f2, f3均為整數,而不是函數。這個跟閉包教程里的代碼不一樣,教程里是fs.append(f)則fs的各項都是f函數。所以應該用print?f1而不能用print f1()
最后lambda表式匿名函數,第五行改成:return lambda: i * i,就表示f函數的返回值依然是函數,即fs這個列表的元素是函數。調用函數就是f1()