Python
Dalam tutorial ini, Anda akan belajar tentang penutupan Python, cara mendefinisikan penutupan, dan alasan Anda harus menggunakannya.
Sebelum masuk ke dalam apa itu penutupan, kita harus terlebih dahulu memahami apa itu fungsi bersarang dan variabel nonlokal.
Fungsi yang didefinisikan di dalam fungsi lain disebut fungsi bersarang. Fungsi bersarang dapat mengakses variabel lingkup terlampir.
Dalam Python, variabel non-lokal ini hanya-baca secara default dan kita harus mendeklarasikannya secara eksplisit sebagai non-lokal (menggunakan kata kunci nonlokal) untuk mengubahnya.
Berikut adalah contoh fungsi bersarang yang mengakses variabel non-lokal.
def print_msg(msg):
# This is the outer enclosing function
def printer():
# This is the nested function
print(msg)
printer()
# We execute the function
# Output: Hello
print_msg("Hello")
Keluaran
Hello
Kita dapat melihat bahwa printer()
. bersarang fungsi dapat mengakses msg non non-lokal variabel fungsi terlampir.
Pada contoh di atas, apa yang akan terjadi jika baris terakhir dari fungsi print_msg()
mengembalikan printer()
fungsi alih-alih memanggilnya? Ini berarti fungsi didefinisikan sebagai berikut:
def print_msg(msg):
# This is the outer enclosing function
def printer():
# This is the nested function
print(msg)
return printer # returns the nested function
# Now let's try calling this function.
# Output: Hello
another = print_msg("Hello")
another()
Keluaran
Hello
Itu tidak biasa.
print_msg()
fungsi dipanggil dengan string "Hello"
dan fungsi yang dikembalikan terikat dengan nama another . Saat memanggil another()
, pesannya tetap diingat meskipun kita sudah selesai mengeksekusi print_msg()
fungsi.
Teknik ini dimana beberapa data ("Hello
dalam hal ini) dilampirkan ke kode yang disebut penutupan dengan Python .
Nilai dalam lingkup terlampir diingat bahkan ketika variabel keluar dari lingkup atau fungsi itu sendiri dihapus dari namespace saat ini.
Coba jalankan perintah berikut di shell Python untuk melihat hasilnya.
>>> del print_msg
>>> another()
Hello
>>> print_msg("Hello")
Traceback (most recent call last):
...
NameError: name 'print_msg' is not defined
Di sini, fungsi yang dikembalikan masih berfungsi meskipun fungsi aslinya telah dihapus.
Seperti yang terlihat dari contoh di atas, kita memiliki penutupan di Python ketika fungsi bersarang mereferensikan nilai dalam cakupan terlampirnya.
Kriteria yang harus dipenuhi untuk membuat penutupan dengan Python dirangkum dalam poin-poin berikut.
Jadi apa gunanya penutupan?
Penutupan dapat menghindari penggunaan nilai global dan menyediakan beberapa bentuk penyembunyian data. Ini juga dapat memberikan solusi berorientasi objek untuk masalah tersebut.
Ketika ada beberapa metode (satu metode dalam banyak kasus) untuk diimplementasikan di kelas, penutupan dapat memberikan solusi alternatif dan lebih elegan. Tetapi ketika jumlah atribut dan metode bertambah besar, lebih baik mengimplementasikan sebuah kelas.
Berikut adalah contoh sederhana di mana penutupan mungkin lebih disukai daripada mendefinisikan kelas dan membuat objek. Tapi preferensi ada di tangan Anda.
def make_multiplier_of(n):
def multiplier(x):
return x * n
return multiplier
# Multiplier of 3
times3 = make_multiplier_of(3)
# Multiplier of 5
times5 = make_multiplier_of(5)
# Output: 27
print(times3(9))
# Output: 15
print(times5(3))
# Output: 30
print(times5(times3(2)))
Keluaran
27 15 30
Dekorator Python juga menggunakan penutupan secara ekstensif.
Sebagai catatan penutup, ada baiknya untuk menunjukkan bahwa nilai-nilai yang terlampir dalam fungsi penutupan dapat ditemukan.
Semua objek fungsi memiliki __closure__
atribut yang mengembalikan tuple objek sel jika itu adalah fungsi penutupan. Mengacu pada contoh di atas, kita tahu times3
dan times5
adalah fungsi penutupan.
>>> make_multiplier_of.__closure__
>>> times3.__closure__
(<cell at 0x0000000002D155B8: int object at 0x000000001E39B6E0>,)
Objek sel memiliki atribut cell_contents yang menyimpan nilai tertutup.
>>> times3.__closure__[0].cell_contents
3
>>> times5.__closure__[0].cell_contents
5
Python
Daftar Python Dalam tutorial ini, kita akan mempelajari segala sesuatu tentang daftar Python:membuat daftar, mengubah elemen daftar, menghapus elemen, dan operasi daftar lainnya dengan bantuan contoh. Video:Daftar Python dan Tuple Daftar Python adalah salah satu tipe data paling serbaguna yang me
Tuple Python Dalam artikel ini, Anda akan mempelajari segala sesuatu tentang tupel Python. Lebih khusus lagi, apa itu tupel, cara membuatnya, kapan menggunakannya, dan berbagai metode yang harus Anda ketahui. Video:Daftar Python dan Tuple Tuple dalam Python mirip dengan daftar. Perbedaan antara ke
String Python Dalam tutorial ini Anda akan belajar membuat, memformat, memodifikasi, dan menghapus string dengan Python. Selain itu, Anda akan diperkenalkan dengan berbagai operasi dan fungsi string. Video:String Python Apa itu String di Python? String adalah urutan karakter. Karakter hanyalah s
Apa itu Fungsi Utama Python? Fungsi utama Python adalah titik awal dari setiap program. Ketika program dijalankan, interpreter python menjalankan kode secara berurutan. Fungsi utama dijalankan hanya ketika dijalankan sebagai program Python. Ini tidak akan menjalankan fungsi utama jika diimpor sebag