Python - Penutup: Panduan untuk Pemula

Hai di sana, pemrogram Python yang berhasrat! Hari ini, kita akan melakukan perjalanan yang menarik ke dunia penutup. Jangan khawatir jika anda belum pernah mendengar istilah ini sebelumnya – pada akhir tutorial ini, anda tidak hanya akan memahami apa itu penutup tetapi juga akan dapat untuk membuat dan menggunakannya di atas kod anda sendiri. Jadi, mari kita melompat!

Python - Closures

Apa itu Penutup?

Bayangkan anda memiliki rakit penyimpanan yang dapat mengingati hal-hal walaupun anda menutupnya. Itu hampir seperti apa itu penutup dalam pemrograman! Dalam Python, penutup adalah objek fungsi yang dapat mengingati nilai-nilai di atas lingkungan penyekat walaupun mereka tidak hadir di atas memori.

Terlalu pengubahan? Mari kita pecahkan:

  1. Itu adalah fungsi di atas fungsi lain.
  2. Itu dapat mengakses variabel dari fungsi luar.
  3. Itu mengingati variabel ini walaupun fungsi luar telah selesai melakukan.

Pikirkan tentang itu sebagai cara untuk membuat paket kecil fungsionalitas yang membawa data pribadi nya sendiri di atas ia. Keren, kan?

Fungsi Berlapis

Sebelum kita kubur lebih dalam ke penutup, mari kita bercakap tentang fungsi berlapis. Ini adalah hanya fungsi yang ditakrifkan di atas fungsi lain. Ini contoh yang simpel:

def fungsi_luar(x):
def fungsi_dalam(y):
return x + y
return fungsi_dalam

hasil = fungsi_luar(10)
print(hasil(5))  # Output: 15

Dalam contoh ini, fungsi_dalam adalah berlapis di atas fungsi_luar. Fungsi dalam dapat mengakses parameter x dari fungsi luar. Ini adalah konsep utama untuk memahami penutup.

Lingkungan Variabel

Untuk benar-benar memahami penutup, kita perlu memahami lingkungan variabel di Python. Ada tiga jenis lingkungan:

  1. Lingkungan lokal: Variabel yang ditakrifkan di atas fungsi
  2. Lingkungan penyekat: Variabel di atas fungsi luar fungsi berlapis
  3. Lingkungan global: Variabel yang ditakrifkan di atas level modul

Ini contoh untuk mengilustrasikan:

x = "Saya global!"  # Lingkungan global

def luar():
y = "Saya dari luar!"  # Lingkungan penyekat
def dalam():
z = "Saya lokal!"  # Lingkungan lokal
print(x, y, z)
dalam()

luar()

Ketika anda menjalankan kod ini, anda akan melihat semua tiga variabel dicetak. Fungsi dalam dapat mengakses variabel dari semua tiga lingkungan!

Membuat Penutup

Sekarang bahwa kita memahami fungsi berlapis dan lingkungan variabel, mari kita membuat penutup. Penutup terjadi ketika fungsi di dalam mengacu kepada nilai di atas lingkungan penyekat nya. Ini contoh:

def kalikan_dengan(n):
def pengkalibrator(x):
return x * n
return pengkalibrator

kali_dua = kalikan_dengan(2)
kali_tiga = kalikan_dengan(3)

print(kali_dua(5))   # Output: 10
print(kali_tiga(5)) # Output: 15

Dalam contoh ini, kalikan_dengan adalah fungsi luar kami, dan pengkalibrator adalah fungsi dalam kami. Magik terjadi ketika kita kembali pengkalibrator - itu mengingati nilai n walaupun kalikan_dengan telah selesai melakukan. Ini adalah penutup!

Mari kita pecahkan langkah demi langkah:

  1. Kita takrifkan kalikan_dengan yang mengambil parameter n.
  2. Di atas kalikan_dengan, kita takrifkan pengkalibrator yang mengambil parameter x.
  3. pengkalibrator menggunakan kedua x (parameter nya sendiri) dan n (dari fungsi luar).
  4. Kita kembali pengkalibrator dari kalikan_dengan.
  5. Ketika kita panggil kalikan_dengan(2), itu kembali fungsi yang selalu mengkalikan masukan nya dengan 2.
  6. Secara serupa, kalikan_dengan(3) kembali fungsi yang selalu mengkalikan masukan nya dengan 3.

Ini adalah kekuatan penutup - mereka dapat membuat fungsi khusus atas saat!

Kata Kunci nonlocal

Kadang-kadang, anda mungkin ingin mengubah variabel dari lingkungan penyekat di atas fungsi dalam anda. Python menyediakan kata kunci nonlocal untuk tujuan ini. Ini contoh:

def penghitung():
count = 0
def tambahkan():
nonlocal count
count += 1
return count
return tambahkan

penghitung_saya = penghitung()
print(penghitung_saya())  # Output: 1
print(penghitung_saya())  # Output: 2
print(penghitung_saya())  # Output: 3

Dalam contoh ini, tambahkan adalah penutup yang mengingati dan mengubah variabel count dari lingkungan penyekat nya. Kata kunci nonlocal memberitahu Python bahwa count bukan variabel lokal, tetapi satu dari lingkungan penyekat.

Penggunaan Praktis Penutup

Penutup tidak hanya trik keren - mereka memiliki aplikasi praktis! Berikut beberapa:

  1. Penyembunyian data dan wadah
  2. Membuat pabrik fungsi
  3. Mengimplementasikan dekorator

Mari lihat contoh dunia nyata. Bayangkan anda membuat sistem diskon untuk toko online:

def buat_penyesuaian_harga(diskon):
def sesuaikan_harga(harga):
return harga * (1 - diskon)
return sesuaikan_harga

jual_beli_raya = buat_penyesuaian_harga(0.2)  # 20% potongan
jual_beli_komputer = buat_penyesuaian_harga(0.15)  # 15% potongan

harga_asli = 100
print(f"Harga Jual Beli Raya: ${jual_beli_raya(harga_asli)}")
print(f"Harga Jual Beli Komputer: ${jual_beli_komputer(harga_asli)}")

Kod ini membuat fungsi harga yang berbeda untuk acara penjualan yang berbeda, semua menggunakan fungsi dasar yang sama. Itu adalah kekuatan penutup!

Ringkasan

Selamat! Anda baru saja belajar tentang salah satu fitur lanjutan Python. Mari kita ulang apa yang kita pelajari:

Konsep Keterangan
Penutup Fungsi yang mengingati nilai-nilai di atas lingkungan penyekat
Fungsi Berlapis Fungsi yang ditakrifkan di atas fungsi lain
Lingkungan Variabel Kenampakan variabel (lokal, penyekat, global)
nonlocal Kata kunci untuk mengubah variabel di atas lingkungan penyekat

Ingat, seperti setiap alat yang kuat, penutup harus digunakan dengan bijaksana. Mereka hebat untuk tugas tertentu, tetapi penggunaannya berlebihan dapat membuat kod anda lebih sulit untuk dipahami. Latihan, eksperimen, dan segera anda akan menggunakan penutup seperti pro Python!

Selamat coding, dan ingat - di Python, seperti dalam kehidupan, itu apa yang di atas dalam (fungsi) yang penting!

Credits: Image by storyset