Fungsi yang Rapi · Pelajaran 2 dari 11
Ruang lingkup variabel
8 menit baca · BelajarCode
Ruang lingkup (scope) menentukan di mana sebuah variabel bisa dipakai.
- Variabel yang dibuat di dalam fungsi adalah variabel lokal. Ia hanya ada selama fungsi berjalan.
- Variabel yang dibuat di luar semua fungsi adalah variabel global.
1pesan = "global"23def tampilkan():4 pesan_lokal = "lokal"5 print(pesan, pesan_lokal)67tampilkan()8print(pesan)global lokal global
Fungsi boleh membaca variabel global. Tetapi pesan_lokal tidak bisa dipakai di luar fungsi tampilkan.
Jebakan: mengubah variabel global
Jika sebuah fungsi mengisi variabel dengan nama yang sama, Python menganggapnya variabel lokal baru. Akibatnya, kode berikut error:
1skor = 023def tambah_skor():4 skor = skor + 1056tambah_skor()Traceback (most recent call last): File "<kode>", line 6, in <module> File "<kode>", line 4, in tambah_skor UnboundLocalError: cannot access local variable 'skor' where it is not associated with a value
Karena ada penugasan skor = ... di dalam fungsi, skor dianggap lokal. Saat skor + 10 dihitung, variabel lokal itu belum punya nilai.
Solusi yang disarankan: kirim dan kembalikan
Python punya kata kunci global untuk mengubah variabel global dari dalam fungsi, tetapi cara itu membuat program sulit dilacak. Cara yang lebih baik: kirim nilai lewat parameter dan kembalikan hasilnya.
1def tambah_skor(skor, poin):2 return skor + poin34skor = 05skor = tambah_skor(skor, 10)6skor = tambah_skor(skor, 5)7print(skor)15
Fungsi seperti ini disebut fungsi murni: hasilnya hanya bergantung pada parameternya dan tidak mengubah apa pun di luar dirinya. Fungsi murni paling mudah diuji.
Jebakan: nilai bawaan berupa list
Nilai bawaan dibuat sekali saja saat fungsi didefinisikan. Jika nilai bawaannya list, list yang sama dipakai berulang-ulang:
1def tambah_tugas(tugas, daftar=[]):2 daftar.append(tugas)3 return daftar45print(tambah_tugas("Matematika"))6print(tambah_tugas("Fisika"))['Matematika'] ['Matematika', 'Fisika']
Panggilan kedua ternyata masih membawa "Matematika". Cara yang benar adalah memakai None sebagai nilai bawaan:
1def tambah_tugas(tugas, daftar=None):2 if daftar is None:3 daftar = []4 daftar.append(tugas)5 return daftar67print(tambah_tugas("Matematika"))8print(tambah_tugas("Fisika"))['Matematika'] ['Fisika']
Cek pemahaman
Kenapa kode skor = 0, lalu di dalam fungsi skor = skor + 10, menghasilkan error?
Latihan
Ubah menjadi fungsi murni
Program ini memakai variabel global saldo yang diubah dari dalam fungsi dengan kata kunci global. Ubah fungsi setor dan tarik menjadi fungsi murni yang menerima saldo dan mengembalikan saldo baru.
1saldo = 10000023def setor(jumlah):4 global saldo5 saldo = saldo + jumlah67def tarik(jumlah):8 global saldo9 saldo = saldo - jumlah1011setor(50000)12tarik(30000)13print(saldo)Pembahasan
1def setor(saldo, jumlah):2 return saldo + jumlah34def tarik(saldo, jumlah):5 if jumlah > saldo:6 return saldo7 return saldo - jumlah89saldo = 10000010saldo = setor(saldo, 50000)11saldo = tarik(saldo, 30000)12print(saldo)120000
Sekarang setiap fungsi bisa diuji sendiri, misalnya tarik(10000, 50000) harus mengembalikan 10000 karena saldonya tidak cukup.
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.