Python Closure
Python ialah bahasa pemrograman arah umum yang didefinisikan, tingkat tinggi. Dibikin oleh Guido van Rossum dan pertama kalinya di-launching di tahun 1991, filosofi design Python mengutamakan keterbacaan code dengan pemakaian spasi putih yang berarti. Konstruksi bahasanya dan pendekatan fokus object mempunyai tujuan untuk menolong pemrogram menulis code yang terang dan rasional untuk project rasio kecil dan besar.
Python diketik secara aktif dan penghimpunan sampah. Ini memberikan dukungan beberapa pola pemrograman, terhitung pemrograman terancang (khususnya, prosedural), fokus object, dan fungsional. Python kerap digambarkan sebagai bahasa "terhitung battery" karena perpustakaan standarnya yang mendalam.
Pada artikel ini, kita akan pelajari mengenai closure (pembungkus), langkah mendeskripsikan closure, dan argumen kenapa closure dipakai.
Variabel Non-lokal Dalam Fungsi Bersarang
Saat sebelum mengulas mengenai closure, pertama kalinya kita harus pahami mengenai peranan bersarang dan faktor non-lokal.
Peranan bersarang ialah peranan yang diartikan dalam peranan lain. Peranan bersarang ini bisa terhubung faktor dari scope (cakupan) peranan pembungkusnya.
Di Python, faktor non-lokal standarnya ialah memiliki sifat read only. Agar bisa mengubahnya, kita harus mendeklarasikannya sebagai faktor non-lokal (memakai kata kunci nonlocal).
Berikut ialah contoh peranan bersarang dan faktor non-lokal.
script.py
IPython Shell
Powered by DataCamp
Dapat kita saksikan pada contoh di atas, jika peranan printer() bisa terhubung faktor non-lokal msg dari peranan pembungkusnya.
Mendeskripsikan Peranan Closure
Pada contoh di atas, apa yang terjadi jika baris paling akhir peranan print_msg() kembalikan peranan printer() dan bukan panggilnya? Lihat contoh ini.
script.py
IPython Shell
Powered by DataCamp
Hasilnya terlihat tidak biasa. Peranan print_msg() diundang dengan argument "Hello" dan peranan kembaliannya ditunjuk ke faktor another hingga another jadi peranan. Di saat panggilan another(), pesan yang ada tetap exist walau kita telah usai menyelesaikan peranan print_msg(). Walau sebenarnya pada peranan biasa, semestinya faktor peranan akan terhapus demikian eksekusi pada peranan usai.
Nilai yang ada di scope peranan pembungkus masih dikenang walau faktor telah di luar scope peranan, atau bahkan juga sesudah peranan itu dihapus sama dalam contoh ini.
>>> del print_msg
>>> print_msg("Hello ")
Traceback (most recent call last):
...
NameError: name 'print_msg' is not defined
>>> another()
Hello
Kriteria Closure
Seperti kelihatan dari contoh di atas, kita mempunyai closure di Python di saat peranan bersarang (peranan yang dalam) mengarah pada faktor yang ada di peranan pembungkusnya.
Persyaratan yang perlu ada untuk membikin closure di Python ialah seperti berikut:
Kita harus mempunyai peranan bersarang (peranan dalam fungsi)
Peranan yang dalam harus mengarah ke faktor peranan pembungkusnya
Peranan pembungkus harus kembalikan (me-return) peranan yang.
Kapan Closure Digunakan?
Closure dipakai untuk menghindar pemakaian faktor global dan sediakan peranan penyembunyian data (data hiding) sebagai jalan keluar fokus object pada persoalan.
Bila cuman sedikit (biasanya sebuah) sistem yang akan diterapkan pada suatu kelas, kita lebih bagus memakai closure dibanding mendeskripsikan kelas. Tetapi, saat banyak atribut dan sistem yang bakal dibikin, kita lebih bagus memakai kelas.
Berikut ialah contoh di mana pemakaian closure lebih dianjurkan daripada memakai kelas untuk membuat object. Tetapi semua terserah opsi Anda.