Programlama dünyasında 'local variable (yerel değişken)' ve 'global variable (genel değişken)' adında iki kavramımız vardır. Peki, bunlar nedir?
Aslına bakarsanız bir kod sayfasında normal bir şekilde tanımladığınız her değişken, genel (global) değişkendir. Bu değişkenlere her yerden erişebiliriz; örneğin bir fonksiyon içerisinde bu değişkeni kullanabiliriz. Ancak bir fonksiyon içerisine verdiğiniz değişkenler, yerel (local) değişkenlerdir ve bunları, o fonksiyonun dışında kullanabilen bir yapı olamaz. İsterseniz örneklere bakalım.

Yukarıdakiler, zaten serinin başından beri gördüğünüz şeyler. Ancak name ve website isimli değişkenler aslında 'global' değişkenlerdir. Dikkat ederseniz bu iki değişkeni de kullanabildim ve bunları, 200.000 satır sonra bile kullanabilirim. Çünkü bunlar global değişkenlerdir, herkes ve her şey tarafından kullanılabilirler.
Peki, aynı şeyleri bir fonksiyona yazalım bakalım.

Gördüğünüz üzere aynı şeyleri bir fonksiyona yazdım ve fonksiyonu çağırdığımda kodların sorunsuz bir şekilde çalıştığını gördüm. Ancak buradaki değişkenler, 'local' değişkenlerdir. Bu değişkenlere, bu fonksiyonun dışındaki yapılar erişemez. Ne demek istiyorum?

Bakın, print(name) ve print(website) komutlarını fonksiyonun dışarısına yazdım ve altları sarı renk ile işaretlendi. Sağ taraftaki çıktıya baktığımızda ise bir hatanın bizi karşıladığını görüyoruz. Şunu diyor: "'name' is not defined." Yani "name değişkeni tanımlanmamış."
Ama bu nasıl olur? name = "Cyber Worm" diye tanımladık ya?
Evet, tanımladık ancak o, local değişken konumunda iken ben local değişkenleri global alandan çağırmaya çalışıyorum. Orası 'local' yani 'yerel' bir alan; dışarıdan kimse onu alamaz.
Peki, bunları global alana tanımlayalım ve local alandan çağırmaya çalışalım.

Gördüğünüz gibi hiçbir sorun çıkmadı. Demek ki: "global alandaki değişkenlere her yerden erişebiliriz ama local alandaki değişkenlere yalnızca o alanda erişilebilir".
Peki, bir fonksiyonun içerisindeki değişkenlere başka bir fonksiyondan ulaşılabilir mi? Bakalım.

Bakın, yine aynı hata ile karşılaştık. Demek ki; "her fonksiyonun kendine özel bir local alanı vardır".
Diyelim ki bir fonksiyon içerisindeki değişkene global alandan da erişmek istiyorsunuz. O zaman ne yapardınız?

Bunun için yalnızca 'global' anahtar kelimesini vermeniz yeterli olacaktır. Bunu yaptığınız zaman değişken her ne kadar local bir alanda da olsa ona her yerden ulaşabilirsiniz. Ancak burada dikkat etmeniz gereken ufak bir detay var.

global anahtar kelimesini verirken bir değişkenin ismini tanımlamanız lazım; değişkenin kendisini değil. Yani yukarıdaki gibi global name = "Cyber Worm" ifadesini veremezsiniz.

global name derken siz, değişkenin yalnızca ismini global olarak atıyorsunuz. Bu noktada bunun tam tanımını başka bir satırda veya başka bir yerde yapmanız gerekir. Yani global name dedikten sonra ayrı bir şekilde name = "Cyber Worm" demeniz gerekir.
Peki, madem bunlar her yerden erişilebilir duruma geliyor; o zaman global name dedikten sonra fonksiyonun dışında name = "Cyber Worm" yapmayı deneyelim.

Gördüğünüz gibi; 'global' işe yaradı. Peki, başka bir fonksiyondan erişmeye çalışalım.

Bunu da gerçekleştirebiliyoruz ancak bilgisayarı parçalamamanız için burada da dikkat etmeniz gereken çok önemli bir nokta var.

Dikkat edelim; neden çalışmadı? Hani bunlar global idi ve her yerden ulaşılabilirdi, neden hata aldık?
Blogun başında; 'çağırılmadan çalışmazlar' dedim. Biz bu fonksiyonu çağırmadık ki içerisinden değişken çağıralım. İlk önce fonksiyonu çağırmamız, ondan sonra değişkenlerine erişmemiz gerekiyor. Gerçek hayatta birini yanınıza çağırmadan ona sarılamazsınız; aynı mantık. Hemen düzeltelim.

Gördüğünüz gibi sorunu giderdik. Peki, göstermek aklıma şimdi geldi; aşağıdaki kodun hata vermesinin temel sebebi nedir (tek kelime)?

"Algoritma". Bunun ne demek olduğunu bilmiyorsanız bu seriyi burada bırakıp ilk önce onun ne olduğunu öğrenmek zorundasınız. Python, ilk önce print(name) ifadesini görüyor, ondan sonra name ifadesini yukarıda arıyor ki değeri yazdırabilsin. Fonksiyonu ise print(name) ifadesinden sonra çağırdık. Hani, fonksiyonlar çağırılmadan çalışmazdı? Ama zaten çağırmadık mı?
Python, print(name) kısmını geçemediği için hemen aşağıdaki fonksiyon çağırma işlemini göremiyor. Dolayısıyla fonksiyonun içeriğini de göremiyor. Bu yüzden name değişkeninin değerini bulamıyor ve tıkanıyor. Dolayısıyla ilk önce fonksiyonu çağırmamız, ondan sonra içerisine erişmemiz lazım.
Yayınlanma Tarihi: 2022-11-01 19:46:56
Son Düzenleme Tarihi: 2022-11-07 16:57:18