Fungsi Bersarang lwn. Penutupan dalam Python
Walaupun fungsi bersarang dalam Python secara dangkal menyerupai penutupan, ia pada asasnya berbeza disebabkan perbezaan utama:
Fungsi Bersarang sebagai Bukan Penutupan
Fungsi bersarang dalam Python tidak dianggap sebagai penutupan kerana ia tidak memenuhi keperluan berikut:
Pertimbangkan perkara berikut contoh:
def make_printer(msg): def printer(): print(msg) return printer
Di sini, fungsi pencetak ialah fungsi bersarang dalam make_printer. Ia adalah penutupan kerana ia merujuk kepada msg pembolehubah setempat selepas make_printer telah dikembalikan.
Definisi Penutupan
Penutupan ialah fungsi yang mengekalkan rujukan kepada skop yang disertakan, membenarkannya mengakses pembolehubah yang tidak ditakrifkan dalam skopnya sendiri. Rujukan ini dikekalkan walaupun selepas skop yang disertakan telah dikeluarkan.
Fungsi Bersarang Bukan Penutupan
Sebaliknya, fungsi bersarang berikut, yang menggunakan lalai nilai parameter, bukan penutupan:
def make_printer(msg): def printer(msg=msg): print(msg) return printer
Dalam kes ini, mesej pembolehubah terikat pada nilai lalai apabila pencetak dicipta, dan ia tidak merujuk sebarang pembolehubah di luar skopnya sendiri. Oleh itu, ia bukan penutupan.
Kesimpulan
Fungsi bersarang dalam Python yang tidak memenuhi definisi penutupan biasanya dirujuk sebagai "fungsi bersarang" untuk membezakannya daripada penutupan tulen. Penutupan boleh berguna untuk mengekalkan keadaan skop tertutup, manakala fungsi bersarang bukan penutup hanya merangkum fungsi dalam skop leksikal.
Atas ialah kandungan terperinci Apakah Perbezaan Antara Fungsi Bersarang dan Penutupan dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!