Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Penutupan Python Berbeza Daripada Fungsi Bersarang?

Bagaimanakah Penutupan Python Berbeza Daripada Fungsi Bersarang?

Barbara Streisand
Barbara Streisandasal
2024-11-24 18:15:13891semak imbas

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!

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!

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!

Kenyataan:
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