def count():
fs = []
for i in range(1, 4):
def f(j):
def g():
return j*j
return g
r = f(i)
fs.append(r) #fs作为列表,为什么可以append(r)?(而r是f所返回的函数)
return fs #个人的想法应该是fs.append(r())
f1, f2, f3 = count()
print f1(), f2(), f3()
想弄明白的是:这里传入append的r是以什么形式传入的呢
谢谢各位指教:D
dihantar dalam bentuk definisi fungsi, serupa dengan panggilan tertunda Ia tidak jelas dalam contoh anda,
Anda boleh menganggap r dalam pulangan r dalam fungsi sebagai pembolehubah, tetapi pembolehubah ini menyimpan takrifan fungsi
Panggilan sebenar kepada fungsi adalah melalui x() kemudian
r ialah objek dan jenis objek ini ialah fungsi.
Dalam erti kata lain, r ialah objek jenis fungsi, seperti
1 ialah objek jenis
integer'hi' ialah objek jenis String sama seperti
Ia juga mungkin untuk menukar
kepada
fs.append(r())
, tetapi maksud fungsi itu berbeza Selepas melaksanakan fungsicount()
, ia akan mengembalikan hasil[1, 4, 9]
, dan anda tidak lagi boleh menggunakanprint f1(), f2(), f3()
untuk. cetak hasilnya. Sebabnya:Perhatikan bahawa ini
g
bukang()
, jadi apa yang dikembalikan dengan melaksanakancount()
sebenarnya adalah[g1, g2, g3]
senarai yang mengandungi tiga fungsi penutupan, setiap fungsi penutupan mengikat pembolehubah bebas yang berbeza (masing-masing 1, 2, 3), jadi selepas membongkar senarai ini kef1, f2, f3
, melaksanakanprint f1(), f2(), f3()
adalah bersamaan dengan melaksanakan tiga fungsi dan mencetak hasilnya, jadi output akhir ialah1, 4, 9
f1 = fs[0] = r = g
Itulah sebabnya
f1()