Penutupan dalam Python
Yang dimaksud dengan penutupan (closure) adalah sebuah fungsi beserta semua variabel eksternal yang dapat diaksesnya.
Dalam Python, seringkali ketika menyebut "penutupan fungsi", yang dimaksud bukanlah fungsi itu sendiri, melainkan variabel eksternalnya.
Misalkan kita memiliki fungsi outer berikut,
di mana variabel i dideklarasikan dan
fungsi internal inner. Di dalamnya,
i akan ditambah satu. Agar
variabel i bekerja dengan benar,
tambahkan pernyataan nonlocal padanya:
def outer():
i = 0
def inner():
nonlocal i
i += 1
print(i)
return inner
Sekarang mari kita letakkan fungsi eksternal ke dalam
variabel res dan panggil dengan
tanda kurung:
res = outer()
res() # akan menampilkan 1
Mari kita panggil res beberapa kali.
Setelah kode dijalankan, setiap kali penghitung
i akan bertambah satu:
res() # akan menampilkan 2
res() # akan menampilkan 3
res() # akan menampilkan 4
Namun, ada nuansa penting di sini - setiap
pemanggilan fungsi outer akan menambah
penghitungnya sendiri. Mari kita letakkan pemanggilan pertama outer
ke dalam variabel res1, dan pemanggilan kedua
- ke dalam variabel res2. Kemudian
tampilkan secara berurutan ke konsol:
res1 = outer()
res1() # akan menampilkan 1
res1() # akan menampilkan 2
res1() # akan menampilkan 3
res2 = outer()
res2() # akan menampilkan 1
res2() # akan menampilkan 2
res2() # akan menampilkan 3
Berikut adalah kode yang diberikan:
def outer():
i = 10
def inner():
nonlocal i
i -= 2
print(i)
return inner
res1 = outer()
res1()
res1()
res2 = outer()
res2()
res2()
res2()
Jelaskan apa yang akan ditampilkan di konsol.
Buatlah sebuah fungsi, yang setiap pemanggilannya akan menghasilkan bilangan Fibonacci berikutnya.
Buatlah sebuah fungsi yang akan menghasilkan bilangan bulat acak dalam suatu rentang, tetapi dengan ketentuan tidak boleh ada angka yang sama dua kali berturut-turut.