Rumah > Soal Jawab > teks badan
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
迷茫2017-04-17 17:31:24
dihantar dalam bentuk definisi fungsi, serupa dengan panggilan tertunda Ia tidak jelas dalam contoh anda,
def count():
def r():
return "hello world"
return r
x = count()
print x #<function r at 0x7fc562978668>
print x() # hello world
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
ringa_lee2017-04-17 17:31:24
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
大家讲道理2017-04-17 17:31:24
Ia juga mungkin untuk menukar
kepada fs.append(r())
, tetapi maksud fungsi itu berbeza Selepas melaksanakan fungsi count()
, ia akan mengembalikan hasil [1, 4, 9]
, dan anda tidak lagi boleh menggunakan print f1(), f2(), f3()
untuk. cetak hasilnya. Sebabnya:
r=f(i)=g
Perhatikan bahawa ini g
bukan g()
, jadi apa yang dikembalikan dengan melaksanakan count()
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 ke f1, f2, f3
, melaksanakan print f1(), f2(), f3()
adalah bersamaan dengan melaksanakan tiga fungsi dan mencetak hasilnya, jadi output akhir ialah 1, 4, 9