Python Global ve Yerel Değişkenler

Merhaba arkadaşlar,

Mobilhanem.com da Python Dersleri serisinin bir dersinde yine beraberiz. Bu derste Python da Global ve Yerel konusunu işleyeceğiz. Bir önceki  yazıda Fonksiyonların ne olduğunu ne işe yaradığını,  nasıl kullanıldığını ve fonksiyon tiplerini baştan sona ele almıştık. Dilerseniz buradan ulaşabilirsiniz.

Python Dersleri Eğitim serisinde baya bir ilerledik artık biraz daha püf noktalara değineceğiz.  Biz bu derste Fonksiyonların kapsama alanını yani Global ve Local değişkenleri, kapsam alanı( scopes) ve isim alanı(namespace) ifadelerini öğreneceğiz. Hadi başlayalım.

Bütün programlama dillerinde olduğu gibi Pythonda da her bir sınıfın, fonksiyonun ve değişkenin bir kapsam (scopes) vardır. Basit bir dille anlatmak gerekirse oluşturduğumuz değişkenlerin geçerli olduğu bir blok ve isim alanı(namespace) o isim alanında hafızaya alınır ve o blok dışına çıkıldığın da bellekten silinir.

Yerel(Local) Değişken

Hemen basit bir örnekle gösterelim;

Kodu çalıştırdığımızda şöyle bir hata ile karşılaşıyoruz.

Yani a değişkeni bulunamadı hatası aldık çünkü a değişkenin kapsam alanı sadece function() isimi fonksiyonun içinde geçerlidir. Çünkü a değişkeni bir yerel(local) değişkendir. Bir fonksiyon için de tanımlanan değişkenler sadece o fonksiyona özgüdür.

Global Değişken

Yerel(local) değişkenin ne olduğunu öğrendik şimdi global değişkenin ne olduğuna bakalım. Hemen bir örnekle göstereyim.

Kodu çalıştırdığımızda  5 ve 3 çıktılarını aldık. Nasıl çalıştığına bakalım hemen;

Programı çalıştırdığımızda Python yorumlayıcı bir dil olduğu için satır satır okur ilk olarak function fonksiyonu çalışacak bunun sonucunda fonksiyon içindeki 5 değerini aldık. Function fonksiyonu çalışması bittikten sonda print() fonksiyonu çalışacak bunun sonucunda da 3 değerini elde ettik. Burada function() fonksiyonu içindeki a değişkeni yerel bir değişken olduğu için kapsama alanı sadece fonksiyon içindedir. print() fonksiyonu ona ulaşamaz ve global olan a değişkenini ekrana basar. O zaman global değişkenler için şu şekilde bir tanım yapabiliriz;

 global değişkenler sadece bir bir fonksiyona ait olmayan değişkenlerdir ve tanımlandıkları andan itibaren programın her yerinden çağrılıp kullanılabilirler.

Şimdi sizin kafanızda şöyle bir soru işareti belirmiştir. Siz global değişkenin her yerde çağrılıp ve kullanabildiğini söylediniz peki bu değişkenleri fonksiyon içinde de çağırabilir miyiz? Tabi ki global değişkenleri fonksiyon içinde de kullanabilirsiniz hemen göstereyim;

Ama burada dikkat etmemiz gereken bir yer var. Biz az önce Python yorumlayıcı olduğu için kodları satır satır yukarıdan aşağıya doğru okuduğunu söyledik bunun için global bir değişkeni kullanacaksanız eğer içinde kullanacağınız fonksiyondan önce tanımlamalısınız yoksa ilk önce fonksiyon çalıştığı için değişkeni bulamadığı için hata verecektir hemen göstereyim;

Şeklinde bir hata aldık buna dikkat etmeliyiz.

Global İfadesi

Bunu da öğrendiğimize göre şimdi size az önce kafanız karışmasın diye eksik söylediğim bir şey var. Az önce biz global değişkenleri tanımlarken şu şekilde bir tanımla yaptık; global değişkenler sadece bir fonksiyona ait olmayan değişkenler tanımını kullanmıştık. Ve aynı zamanda global değişkenleri fonksiyon içinde de kullanmıştık peki şu şekilde bir şey yapabilir miyiz fonksiyon içinde global değişken oluşturabilir miyiz. Hemen deneyip görelim;

Gördüğünüz gibi iki tane 3 değerini aldık hemen bunları nasıl aldığımızı görelim.

İlk önce function() adında ki fonksiyon çalışacak ve fonksiyon içinde ki a değerini ekrana basar sonra print() fonksiyonu çalışacak ve a değişkenini fonksiyon içinde global olarak tanımladığımız için print() fonksiyonu a değişkenine ulaşabilir olduğu için ekrana yine 3 değerini yazacaktır.

Biz burada global ifadesi ile fonksiyon içinde global değişken oluşturmayı öğrenmiş olduk. Ama burada size söylemem gereken bir nokta var  global değişkenler her yerde ulaşılabilir olduğu için kodunuz karmaşıklığa neden olabilir bu yüzden global değişken ve global ifadesi kullanmak pek önerilmez. Fonksiyon için yerel olarak tanımlayıp kullanmak daha iyi ve okunabilirdir.

Mobilhanem.com da Python Dersleri serisinin bu dersinde Python Fonksiyonların Kapsamı konusunu işledik. Bir sonraki derste Python da ileri seviye fonksiyonlar konusunu anlatacağım. Anlamadığınız bir yer ve ya eksik yada yanlış gördüğünüz bir yer varsa yorum yapmaktan veya soru-cevap kısmına yazabilirsiniz dilerseniz benimle de iletişime geçmekten çekinmeyin.

Cahit İşleyen

Fırat Üniversitesi Yazılım Mühendisliği
Python ve Linux sever.
Çay tiryakisi

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?