Langsung ke konten

Scope Variabel di Python: Local, Global, dan Keyword global

Scope variabel menentukan di mana sebuah variabel bisa diakses di Python. Artikel ini membahas local scope, global scope, keyword global, dan aturan LEGB.

Belajar Python Level Basic
Belajar Python Level Basic
Advertisement

Artikel ini bagian dari seri Belajar Python Level Basic di hanifmu.com. Di artikel sebelumnya kita sudah membahas Return Value. Sekarang kita telusuri di mana sebuah variabel bisa diakses.

Kamu mungkin pernah bingung kenapa variabel di dalam function tidak bisa diakses dari luar. Jawabannya ada di scope, aturan yang menentukan wilayah berlaku sebuah variabel.

Apa itu Scope?

Scope adalah wilayah di mana sebuah variabel bisa diakses. Python menentukan scope berdasarkan tempat variabel itu dibuat. Ada dua yang paling sering kamu temui: local dan global.

Local Scope

Variabel yang dibuat di dalam function hanya berlaku di dalam function itu. Wilayahnya disebut local scope:

def hitung():
    hasil = 10   # variabel lokal
    print(hasil)

hitung()        # 10
print(hasil)    # NameError: name 'hasil' is not defined

Variabel hasil hanya hidup selama function berjalan. Begitu function selesai, variabel itu hilang.

Setiap pemanggilan function punya variabel lokalnya sendiri:

def tambah():
    angka = 0
    angka += 1
    print(angka)

tambah()   # 1
tambah()   # 1, bukan 2

Nilai angka selalu dimulai dari 0 di setiap pemanggilan.

Global Scope

Variabel yang dibuat di luar semua function berlaku di seluruh program. Wilayahnya disebut global scope:

nama = "Budi"   # variabel global

def sapa():
    print(f"Halo, {nama}")

sapa()          # Halo, Budi

Function bisa membaca variabel global tanpa deklarasi tambahan.

Tapi hati-hati saat mengubahnya. Tanpa kata kunci khusus, menugaskan nilai ke nama yang sama di dalam function akan membuat variabel lokal baru:

nama = "Budi"

def ubah():
    nama = "Sari"   # ini variabel lokal baru
    print(nama)

ubah()            # Sari
print(nama)       # Budi, global tidak berubah

Keyword global

Kalau memang ingin mengubah variabel global dari dalam function, gunakan kata kunci global:

nama = "Budi"

def ubah():
    global nama
    nama = "Sari"

ubah()
print(nama)   # Sari

global memberi tahu Python bahwa nama yang dimaksud adalah variabel global, bukan variabel lokal baru.

Meski bisa, memakai global sebaiknya dihindari karena membuat alur program sulit dilacak. Lebih baik mengembalikan nilai dengan return dan menugaskannya di luar:

def ubah(nama):
    return "Sari"

nama = "Budi"
nama = ubah(nama)
print(nama)   # Sari

Nested Function dan nonlocal

Function bisa didefinisikan di dalam function lain. Variabel di function luar bisa dibaca oleh function dalam:

def luar():
    pesan = "Halo"

    def dalam():
        print(pesan)

    dalam()

luar()   # Halo

Untuk mengubah variabel function luar dari function dalam, gunakan nonlocal:

def penghitung():
    jumlah = 0

    def tambah():
        nonlocal jumlah
        jumlah += 1
        return jumlah

    return tambah

hitung = penghitung()
print(hitung())   # 1
print(hitung())   # 2

nonlocal hanya berlaku untuk variabel di function luar, bukan variabel global.

Aturan LEGB

Saat Python mencari sebuah nama, ia mencarinya berurutan mengikuti aturan LEGB:

HurufArtiWilayah
LLocalDi dalam function saat ini
EEnclosingFunction pembungkus di luarnya
GGlobalDi level file/modul
BBuilt-inNama bawaan Python seperti len, print

Python mencari dari yang paling dekat (Local) sampai paling jauh (Built-in). Nama pertama yang ditemukan itulah yang dipakai.

x = "global"

def luar():
    x = "enclosing"

    def dalam():
        x = "local"
        print(x)

    dalam()

luar()   # local

Kalau baris x = "local" dihapus, hasilnya enclosing. Kalau keduanya dihapus, hasilnya global. Urutan pencariannya jelas.

Contoh Program: Penghitung Sederhana

Mari gunakan nonlocal untuk membuat penghitung yang mengingat jumlah pemanggilan:

# penghitung.py

def buat_penghitung():
    jumlah = 0

    def tambah():
        nonlocal jumlah
        jumlah += 1
        return jumlah

    return tambah

hitung = buat_penghitung()

print(hitung())   # 1
print(hitung())   # 2
print(hitung())   # 3

Variabel jumlah tetap hidup di antara pemanggilan karena ditangkap oleh function tambah. Pola ini disebut closure, yang akan dibahas lebih dalam di level lanjutan.

Kesalahan Umum Pemula

  • Mengakses variabel lokal dari luar — memicu NameError.
  • Mengubah global tanpa global — Python membuat variabel lokal baru diam-diam.
  • Memakai global berlebihan — sulit dilacak; gunakan return bila bisa.
  • Mengira nonlocal berlaku untuk global — nonlocal hanya untuk function pembungkus.
  • Bingung saat nama sama muncul di beberapa scope — ingat aturan LEGB.

Ringkasan

  • Scope menentukan wilayah berlaku sebuah variabel
  • Variabel di dalam function bersifat lokal, hilang setelah function selesai
  • Variabel di luar function bersifat global dan bisa dibaca di mana saja
  • global dipakai untuk mengubah variabel global dari dalam function
  • nonlocal dipakai untuk mengubah variabel function pembungkus
  • Python mencari nama mengikuti aturan LEGB: Local, Enclosing, Global, Built-in

Langkah Selanjutnya

Kamu sudah bisa membuat function yang menerima masukan, mengembalikan hasil, dan mengatur scope dengan benar. Function seperti ini ditulis dengan def, tapi ada bentuk lain yang lebih singkat untuk tugas kecil.

Artikel selanjutnya membahas Lambda Function di Python, function ringkas satu baris untuk keperluan tertentu.