Scope
Scope adalah cakupan tempat sebuah variabel dapat diakses di dalam program.
Dengan memahami scope, kita dapat mengetahui:
- Di mana sebuah variabel dapat digunakan.
- Di mana sebuah variabel tidak dapat digunakan.
- Mengapa suatu variabel dapat diakses di satu bagian program tetapi menghasilkan
NameErrordi bagian lainnya.
Contoh:
def some_func():
total = 100
print(total)
Kode tersebut akan menghasilkan error karena total hanya tersedia di dalam scope function some_func().
Functional Scope
Ketika kita membuat sebuah function menggunakan def, Python membuat scope lokal baru.
Variabel yang dibuat di dalam function hanya dapat digunakan di dalam function tersebut.
def some_func():
total = 100
print(total)
some_func()
Output:
100
Namun, variabel tersebut tidak dapat diakses dari luar function.
def some_func():
total = 100
some_func()
print(total)
Output akan menghasilkan error:
NameError: name 'total' is not defined
Hal ini terjadi karena total berada di dalam local scope function.
Local Variable
Variabel yang dibuat di dalam function disebut local variable.
Contoh:
def calculate():
number = 10
result = number * 2
print(result)
calculate()
Variabel:
number
result
hanya tersedia di dalam function calculate().
Kita tidak dapat mengaksesnya secara langsung dari luar function:
print(number)
Kode tersebut akan menghasilkan NameError.
Global Scope
Variabel yang dibuat di luar function berada pada global scope.
Contoh:
total = 100
def some_func():
print(total)
some_func()
Output:
100
Function dapat membaca variabel total karena variabel tersebut berada di global scope.
Global Variable
Variabel yang dibuat pada tingkat paling atas program disebut global variable.
Contoh:
name = "Budi"
def say_hello():
print(name)
say_hello()
Output:
Budi
Function say_hello() dapat membaca name karena name berada pada global scope.
Local Scope dan Global Scope
Perhatikan contoh berikut:
name = "Budi"
def say_hello():
name = "Andi"
print(name)
say_hello()
print(name)
Output:
Andi
Budi
Mengapa?
Karena terdapat dua variabel name yang berbeda scope.
Global scope
name = "Budi"
dan:
Local scope
name = "Andi"
Variabel lokal name hanya berlaku di dalam function.
Scope pada if
Python memiliki karakteristik yang berbeda dibandingkan beberapa bahasa pemrograman lain.
Blok if tidak membuat local scope baru.
Contoh:
if True:
x = 10
print(x)
Output:
10
Variabel x tetap dapat diakses setelah blok if selesai.
Scope pada for
Hal yang sama berlaku pada for.
for item in [1, 2, 3]:
value = item
print(value)
Output:
3
Blok for tidak membuat function scope baru.
Karena itu, variabel value masih berada pada scope yang sama setelah loop selesai.
Scope pada while
Blok while juga tidak membuat scope baru.
while False:
value = 100
Namun pada contoh tersebut value tidak pernah dibuat karena kondisi while bernilai False.
Jika variabel berhasil dibuat:
value = 0
while value < 1:
value = 100
print(value)
Output:
100
Variabel tersebut tetap berada pada scope yang sama.
Function Membuat Scope Baru
Perbedaan pentingnya dapat dilihat pada contoh berikut.
Menggunakan if
if True:
x = 10
print(x)
Output:
10
Menggunakan function
def example():
x = 10
example()
print(x)
Kode kedua menghasilkan:
NameError: name 'x' is not defined
Karena function membuat local scope baru.
Scope Bersarang
Sebuah function dapat dibuat di dalam function lainnya.
Kondisi tersebut menghasilkan scope yang bersarang.
def outer():
x = 10
def inner():
print(x)
inner()
outer()
Output:
10
Function inner() dapat membaca variabel x yang berada pada scope function outer().
Hal ini berhubungan dengan konsep nested scope dan akan menjadi penting ketika mempelajari closure dan konsep lanjutan lainnya.
Scope dan NameError
Salah satu error yang sering muncul ketika mempelajari scope adalah:
NameError
Contoh:
def calculate():
result = 100
calculate()
print(result)
Python tidak menemukan result pada scope tempat print(result) dijalankan.
Akibatnya:
NameError: name 'result' is not defined
Ketika menemukan NameError, salah satu hal yang perlu diperiksa adalah apakah variabel tersebut memang tersedia pada scope tersebut.
Konsep Utama Scope
Secara sederhana, Python memiliki beberapa tingkatan scope yang penting untuk dipahami.
Global Scope
↓
Function Scope
↓
Nested Function Scope
Sedangkan struktur seperti:
if
for
while
tidak secara otomatis membuat scope baru.
Contoh Perbandingan
x = 100
if True:
y = 200
def example():
z = 300
print(x)
print(y)
Output:
100
200
Namun:
print(z)
akan menghasilkan:
NameError
karena z hanya tersedia di dalam function example().
Poin Penting
Beberapa hal yang perlu diingat:
- Scope menentukan di mana variabel dapat diakses.
- Function membuat local scope baru.
- Variabel yang dibuat di dalam function biasanya hanya dapat digunakan di dalam function tersebut.
- Variabel yang dibuat di luar function berada pada global scope.
- Function dapat membaca variabel yang berada pada global scope.
- Blok
iftidak membuat scope baru. - Blok
fortidak membuat scope baru. - Blok
whiletidak membuat scope baru. - Variabel yang tidak tersedia pada scope tertentu dapat menyebabkan
NameError.
Kesimpulan
Scope merupakan konsep penting dalam Python karena menentukan jangkauan dan aksesibilitas sebuah variabel.
Perbedaan paling penting yang perlu diingat adalah:
Function
→ membuat scope baru
sedangkan:
if
for
while
→ tidak membuat scope baru
Memahami scope akan menjadi dasar penting untuk mempelajari konsep Python berikutnya seperti global dan nonlocal, nested function, closure, serta decorator.