Apakah Perbezaan Antara Fungsi Bersarang dan Penutupan dalam Python?

DDD
Lepaskan: 2024-11-23 02:32:10
asal
964 orang telah melayarinya

What's the Difference Between Nested Functions and Closures in Python?

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:

  • Ia tidak mengakses pembolehubah yang setempat kepada skop yang dilampirkan apabila dilaksanakan di luar skop yang dilampirkan.

Pertimbangkan perkara berikut contoh:

def make_printer(msg):
    def printer():
        print(msg)
    return printer
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan