Fungsi Bersarang dalam Python: Mengapa Tidak Ditutup?
Fungsi bersarang dalam Python ialah ciri yang membolehkan fungsi ditakrifkan dalam fungsi lain. Fungsi ini mewarisi pembolehubah daripada skop lampirannya, memberikan akses kepada pembolehubah yang mungkin tidak dapat dicapai.
Walaupun berkongsi persamaan dengan penutupan, fungsi bersarang dalam Python tidak dirujuk sebagai penutupan. Perbezaan ini berpunca daripada tingkah laku mereka. Penutupan ialah fungsi yang mempunyai akses kepada pembolehubah daripada skop yang dilampirkan walaupun selepas skop itu telah dikeluarkan.
Apabila fungsi bersarang ditakrifkan dalam Python, ia sememangnya tidak mengekalkan akses kepada pembolehubah skop yang disertakan. . Sebaliknya, fungsi bersarang mencipta skop baharu dan mempunyai akses kepada pembolehubah dalam skop itu sahaja.
Untuk fungsi bersarang berfungsi sebagai penutup, ia mesti memenuhi dua kriteria utama:
Jika fungsi bersarang memenuhi kedua-dua syarat ini, ia berfungsi sebagai penutup. Jika tidak, ia hanyalah fungsi bersarang.
Pertimbangkan contoh berikut:
def make_printer(msg): def printer(): print(msg) return printer printer = make_printer('Foo!') printer() # Output: Foo!
Dalam contoh ini, fungsi pencetak mengakses pembolehubah msg daripada skop lampirannya (make_printer). Kerana ia dilaksanakan di luar skop lampirannya (apabila ia ditugaskan kepada pencetak dan kemudian dipanggil), ia bertindak sebagai penutup.
Sebaliknya, fungsi bersarang yang tidak merujuk pembolehubah daripada skop lampirannya bukanlah penutupan. Contohnya:
def make_printer(msg): def printer(msg=msg): print(msg) return printer printer = make_printer('Foo!') printer() # Output: Foo!
Di sini, pembolehubah msg terikat kepada nilai lalai parameter dan bukannya pembolehubah dalam skop yang disertakan. Oleh itu, fungsi bersarang ini bukan penutupan.
Ringkasnya, fungsi bersarang dalam Python tidak dipanggil penutupan kerana fungsi tersebut tidak secara semula jadi mempamerkan gelagat penutupan, iaitu mengakses pembolehubah daripada skop tertutup selepas ia keluar. . Untuk melayakkan diri sebagai penutupan, fungsi bersarang mesti kedua-dua pembolehubah rujukan daripada skop lampirannya dan dilaksanakan di luarnya.
Atas ialah kandungan terperinci Bilakah Fungsi Sarang Bersarang Sebenarnya Ditutup?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!