cari

Rumah  >  Soal Jawab  >  teks badan

函数 - 关于python闭包的一些疑问

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

PHPzPHPz2888 hari yang lalu237

membalas semua(4)saya akan balas

  • 迷茫

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

    balas
    0
  • ringa_lee

    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

    balas
    0
  • 大家讲道理

    大家讲道理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

    balas
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:31:24

    f1 = fs[0] = r = g

    Itulah sebabnya

    f1()

    balas
    0
  • Batalbalas