๐ Pembelajaran Interaktif
Pilih materi untuk memulai belajar Python Variable Scope
Python Variable Scope
Variable Scope (cakupan variabel) merujuk pada area dalam program di mana sebuah variabel dapat diakses atau digunakan.
๐ก Konsep Penting:
- Scope menentukan visibilitas variabel
- Variabel hanya bisa diakses dalam scope-nya
- Python menggunakan aturan LEGB untuk mencari variabel
# Contoh sederhana scope
x = "global" # Variabel global
def fungsi():
y = "local" # Variabel local
print(x) # Bisa akses x (global)
print(y) # Bisa akses y (local)
fungsi()
print(x) # Bisa akses x
# print(y) # ERROR! y tidak bisa diakses di sini
Output:
global local global
๐งช Simulasi Interaktif:
Klik "Jalankan" untuk melihat hasil...
Types of Scope for Variables
Python memiliki 4 tipe scope yang dikenal dengan akronim LEGB:
๐น L - Local
Variabel di dalam fungsi atau blok kode
๐น E - Enclosing
Variabel di fungsi pembungkus (nested function)
๐น G - Global
Variabel di level modul/file
๐น B - Built-in
Nama bawaan Python (print, len, dll)
# Contoh LEGB Rule
x = "global" # G - Global
def outer():
x = "enclosing" # E - Enclosing
def inner():
x = "local" # L - Local
print(x) # Cari dari L โ E โ G โ B
inner()
print(x)
outer()
print(x)
Output:
local enclosing global
๐งช Simulasi LEGB:
Klik tombol untuk melihat cara Python mencari variabel...
Local Variables
Local Variables adalah variabel yang didefinisikan di dalam fungsi dan hanya dapat diakses di dalam fungsi tersebut.
๐ Karakteristik Local Variables:
- Dibuat ketika fungsi dipanggil
- Dihapus ketika fungsi selesai dieksekusi
- Tidak bisa diakses dari luar fungsi
- Bisa memiliki nama sama dengan variabel global
# Contoh Local Variables
def hitung_luas():
# panjang dan lebar adalah local variables
panjang = 10
lebar = 5
luas = panjang * lebar
print(f"Luas: {luas}")
return luas
hasil = hitung_luas()
print(f"Hasil: {hasil}")
# print(panjang) # ERROR! panjang tidak ada di sini
Output:
Luas: 50 Hasil: 50
โ ๏ธ Perhatian:
Mengakses local variable dari luar fungsi akan menghasilkan NameError
๐งช Simulasi Hitung Luas:
Klik untuk menjalankan fungsi dan melihat local variables bekerja...
Global Variables
Global Variables adalah variabel yang didefinisikan di luar semua fungsi dan dapat diakses dari mana saja dalam program.
๐ Karakteristik Global Variables:
- Didefinisikan di level modul (di luar fungsi)
- Bisa diakses dari semua fungsi
- Gunakan keyword
globaluntuk memodifikasi - Tetap ada selama program berjalan
# Contoh Global Variables
skor = 0 # Global variable
def tambah_skor(poin):
global skor # Deklarasi untuk memodifikasi global
skor += poin
print(f"Skor bertambah {poin}")
def lihat_skor():
print(f"Skor saat ini: {skor}")
tambah_skor(10)
tambah_skor(5)
lihat_skor()
Output:
Skor bertambah 10 Skor bertambah 5 Skor saat ini: 15
๐ก Tips:
Tanpa keyword global, Python akan membuat variabel local baru dengan nama yang sama!
๐งช Simulasi Game Skor:
Skor Global:
# Log aktivitas:
Variabel global skor = 0
Nonlocal Variables
Nonlocal Variables digunakan dalam nested functions untuk mengakses dan memodifikasi variabel dari fungsi pembungkus (enclosing function).
๐ Kapan Menggunakan nonlocal:
- Ketika ada fungsi di dalam fungsi (nested function)
- Untuk memodifikasi variabel dari fungsi luar
- Variabel bukan global, tapi juga bukan local
# Contoh Nonlocal Variables
def counter():
count = 0 # Enclosing variable
def increment():
nonlocal count # Akses variabel enclosing
count += 1
return count
return increment
# Membuat counter
hitung = counter()
print(hitung()) # 1
print(hitung()) # 2
print(hitung()) # 3
Output:
1 2 3
๐ Perbedaan global vs nonlocal:
global โ mengakses variabel di level modulnonlocal โ mengakses variabel di fungsi pembungkus
๐งช Simulasi Counter dengan Nonlocal:
Nilai Counter (nonlocal):
# Trace eksekusi:
counter() dipanggil, count = 0
Namespace and Scope
๐ฆ Namespace:
Kumpulan nama (identifier) yang tersedia pada suatu waktu tertentu. Seperti "daftar nama" yang Python ketahui.
๐ญ Scope:
Area dalam kode di mana namespace dapat diakses secara langsung. Menentukan "jangkauan" nama.
๐ Tipe-tipe Namespace:
- Built-in: Nama bawaan Python (print, len, str)
- Global: Nama di level modul/file
- Enclosing: Nama di fungsi pembungkus
- Local: Nama di dalam fungsi
# Visualisasi Namespace
# Built-in namespace: print, len, str, int...
nama = "Global" # Global namespace
def fungsi_luar():
nama = "Enclosing" # Enclosing namespace
def fungsi_dalam():
nama = "Local" # Local namespace
# Python mencari: Local โ Enclosing โ Global โ Built-in
print(nama) # "Local"
fungsi_dalam()
fungsi_luar()
๐จ Diagram Namespace:
Built-in Namespace
print, len, str, int, list, dict...
Global Namespace
nama = "Global", fungsi_luar
Enclosing Namespace
nama = "Enclosing", fungsi_dalam
Local Namespace
nama = "Local"
โฌ๏ธ Python mencari nama dari dalam ke luar (LEGB Rule)
Python globals() Function
globals() adalah fungsi bawaan Python yang mengembalikan dictionary berisi semua variabel global yang ada saat ini.
๐ Kegunaan globals():
- Melihat semua variabel global
- Mengakses variabel secara dinamis
- Membuat atau memodifikasi variabel global dari dalam fungsi
- Debugging dan introspeksi program
# Contoh globals()
nama = "Python"
versi = 3.11
aktif = True
# Melihat variabel global
print("Variabel global:")
for key, value in globals().items():
if not key.startswith('_'):
print(f" {key} = {value}")
# Mengakses variabel secara dinamis
var_name = "nama"
print(f"\nglobals()['{var_name}'] = {globals()[var_name]}")
# Membuat variabel baru via globals()
globals()['bahasa'] = "Indonesia"
print(f"bahasa = {bahasa}")
Output (disederhanakan):
Variabel global: nama = Python versi = 3.11 aktif = True globals()['nama'] = Python bahasa = Indonesia
๐งช Simulasi globals():
Klik tombol untuk berinteraksi dengan globals()...
Python locals() Function
locals() adalah fungsi bawaan Python yang mengembalikan dictionary berisi semua variabel local dalam scope saat ini.
๐ Perbedaan globals() vs locals():
globals():
- Variabel global
- Bisa dimodifikasi
- Selalu dictionary yang sama
locals():
- Variabel local
- Hanya salinan (copy)
- Berbeda setiap scope
# Contoh locals()
def hitung_statistik(angka_list):
total = sum(angka_list)
jumlah = len(angka_list)
rata_rata = total / jumlah
# Melihat semua variabel local
print("Variabel local dalam fungsi:")
for key, value in locals().items():
print(f" {key} = {value}")
return rata_rata
data = [10, 20, 30, 40, 50]
hasil = hitung_statistik(data)
print(f"\nRata-rata: {hasil}")
Output:
Variabel local dalam fungsi: angka_list = [10, 20, 30, 40, 50] total = 150 jumlah = 5 rata_rata = 30.0 Rata-rata: 30.0
๐งช Simulasi locals() dalam Fungsi:
Klik untuk melihat locals() dalam fungsi...
Namespace Conflict in Python
Namespace Conflict terjadi ketika nama yang sama digunakan di scope yang berbeda, menyebabkan kebingungan atau hasil yang tidak diharapkan.
โ ๏ธ Jenis-jenis Konflik:
- Shadowing: Variabel local "menutupi" variabel global
- UnboundLocalError: Mencampur akses dan assignment
- Built-in Override: Menimpa nama bawaan Python
# Contoh Shadowing
nilai = 100 # Global
def proses():
nilai = 50 # Local - shadowing global
print(f"Di dalam fungsi: {nilai}") # 50
proses()
print(f"Di luar fungsi: {nilai}") # 100 (tidak berubah!)
# Contoh UnboundLocalError
x = 10
def error_demo():
print(x) # ERROR! Python melihat ada assignment di bawah
x = 20 # Ini membuat Python menganggap x adalah local
# error_demo() # UnboundLocalError!
๐ก๏ธ Cara Menghindari Konflik:
- Gunakan nama yang deskriptif dan unik
- Hindari nama yang sama untuk variabel berbeda
- Jangan override built-in (print, list, str)
- Gunakan
globalataunonlocaldengan bijak
๐งช Simulasi Namespace Conflict:
Pilih skenario dan klik jalankan...