函数 - 关于python闭包的一些疑问
PHPz
PHPz 2017-04-17 17:29:24
0
4
231
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

PHPz
PHPz

学习是最好的投资!

membalas semua(4)
迷茫

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

左手右手慢动作

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 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

大家讲道理

f1 = fs[0] = r = g

Itulah sebabnya

f1()

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan