Bagaimanakah Penutupan Python Berbeza Daripada Fungsi Bersarang?

Barbara Streisand
Lepaskan: 2024-11-24 18:15:13
asal
890 orang telah melayarinya

How Do Python Closures Differ From Nested Functions?

Penutupan dalam Python: Membongkar Misteri

Fungsi bersarang biasanya ditemui dalam Python, menimbulkan persoalan tentang hubungannya dengan penutupan. Walaupun ia berkongsi beberapa ciri, ia tidak boleh ditukar ganti.

Penutupan ialah fungsi yang mengekalkan akses kepada pembolehubah tempatan skop luar walaupun selepas fungsi yang disertakan telah selesai dilaksanakan. Ini membolehkan mereka menggunakan pembolehubah tersebut kemudian.

Fungsi Bersarang lwn. Penutupan

Fungsi bersarang, sebaliknya, ditakrifkan dalam fungsi lain tetapi tidak mewarisinya pembolehubah tempatan secara lalai. Ia menjadi penutupan hanya jika ia merujuk pembolehubah setempat dari skop luar yang mungkin tidak dapat dicapai selepas fungsi lampiran selesai.

Contoh Penutupan dalam Python:

def make_printer(msg):
    def printer():
        print(msg)
    return printer

printer = make_printer('Foo!')
printer()  # Output: Foo!
Salin selepas log masuk

Dalam contoh ini, pencetak fungsi bersarang merujuk kepada mesej pembolehubah setempat daripada fungsi make_printer yang disertakan. Apabila make_printer kembali, msg biasanya di luar skop, tetapi penutupan mengekalkan akses kepadanya.

Ketiadaan Penutupan dalam Fungsi Bersarang yang Tidak Merujuk Pembolehubah Skop Luar:

Jika fungsi bersarang tidak merujuk sebarang pembolehubah tempatan dari skop luar, ia tidak dianggap sebagai penutupan. Sebaliknya, ia bertindak sebagai fungsi biasa dengan pembolehubah setempatnya sendiri.

Contoh Fungsi Bersarang Tidak Penutupan:

def make_printer(msg):
    def printer(msg=msg):
        print(msg)
    return printer

printer = make_printer('Foo!')
printer()  # Output: Foo!
Salin selepas log masuk

Di sini, nilai lalai bagi parameter msg digunakan dalam pencetak fungsi bersarang, memastikan ia mempunyai pembolehubah tempatan sendiri bebas daripada skop luar. Oleh itu, ia bukan penutupan.

Atas ialah kandungan terperinci Bagaimanakah Penutupan Python Berbeza Daripada Fungsi Bersarang?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan