@dildeolupbiten, Allah razı olsun. global
konusunu şimdiye kadar tam olarak anlayamamıştım. Anladığım kadarıyla global
'in amacı global alandaki değişkenlerin istemsiz şekilde değiştirilmesini engellemek. global değişken_adı
yazarak aslında “Ben bu değişkeni burada bilerek değiştiriyorum, herhangi bir sorun yok.” demek istiyoruz. Mutable tipler ve yöntem çağrımları değişkenin değerini değiştirmediği için bunlarda böyle bir ifade kullanmak gerekmiyor.
Aynen öyle. Python’ın böyle durumlarda verdiği hata UnboundLocalError: local variable 'değişken_adı' referenced before assignment
hatasıdır. Lokal değişkeni atamadan referans göstermeye çalışıyorsun demek istiyor.
Bu arada bir şeyi hatalı belirtmişim onu da düzeltmek istiyorum. Yukarıda bahsettiğim hata list() kullanıldığında da geçerli oluyor:
liste = list()
def f():
liste += "hello",
print(liste[0])
f()
Bu işlemi yapabilmek için de global liste’yi fonksiyonun içine eklemek gerekiyor.
liste = list()
def f():
global liste
liste += "hello",
print(liste[0])
f()
Ama listeye genellikle eleman eklerken += kullanmak yerine onun append() metodunu çağırdığımız için global’i kullanmak gerekmiyor. Yani veri tiplerinin yöntemlerini kullanırken global kullanmamız gerekmiyor.
Gözlemlediğim kadarıyla global yukarıda bahsettiğim durumlarda, bir de değeri (yukarıdaki örneklerden birinde olduğu gibi) None olan bir değişkenin değeri bir fonksiyonun içinde değiştirilmek istendiğinde kullanılıyor.