BÖLÜM 4 – Python'da Fonksiyonlar 🧩 5. Değişkenlerin Kapsamı (Scope)

 

BÖLÜM 4 – Python'da Fonksiyonlar

🧩 5. Değişkenlerin Kapsamı (Scope)

Fonksiyonlar içinde tanımlanan değişkenlerin nereye kadar geçerli olduğunu belirleyen kurala scope (kapsam) denir.


🔹 1. Yerel Değişken (Local Variable)

Fonksiyon içinde tanımlanan değişkene local değişken denir. Sadece o fonksiyon içinde geçerlidir, dışarıdan erişilemez.

✅ Örnek 1: Local değişken örneği

python
def selamla(): mesaj = "Merhaba!" print(mesaj) selamla() # print(mesaj) # Bu satır hata verir çünkü mesaj sadece fonksiyon içinde tanımlı

📌 mesaj sadece selamla() fonksiyonu içinde çalışır.


🔹 2. Global Değişken (Global Variable)

Fonksiyon dışında tanımlanan değişken, tüm programda geçerlidir. Fonksiyonlar da bu değişkene erişebilir (ama dikkatli olmak gerekir).

✅ Örnek 2: Global değişken örneği

python
kullanici = "Ali" def karsila(): print(f"Hoş geldin, {kullanici}") karsila()

🟢 Çıktı:

Hoş geldin, Ali

🔹 3. Local değişkenin globali gölgelemesi

Fonksiyon içinde aynı isimde başka bir değişken tanımlarsan, Python önce local olana bakar.

✅ Örnek 3:

python
isim = "Zeynep" def yazdir(): isim = "Mehmet" print(isim) yazdir() print(isim)

🟢 Çıktı:

nginx
Mehmet Zeynep

📌 Fonksiyon içindeki isim, dışarıdaki isimi etkilemez.


🔹 4. global anahtar kelimesi

Eğer fonksiyon içinden bir global değişkeni değiştirmek istersen, global anahtar kelimesini kullanman gerekir.

✅ Örnek 4: global kullanımı

python
puan = 0 def puan_arttir(): global puan puan += 10 puan_arttir() print("Puan:", puan)

🟢 Çıktı:

makefile
Puan: 10

🔹 5. Uygulamalı Örnek: Sayaç

python
sayac = 0 def artir(): global sayac sayac += 1 for i in range(5): artir() print("Sayac değeri:", sayac)

🟢 Çıktı:

nginx
Sayac değeri: 5

🔹 6. Hatalı Kullanım – global olmadan değiştirmeye çalışmak

python
puan = 100 def azalt(): puan -= 10 # ❌ Hata verir azalt()

🔴 HATA:

pgsql
UnboundLocalError: local variable 'puan' referenced before assignment

📌 Çünkü puan -= 10 ile değiştirmeye çalıştık ama önce global olduğunu belirtmedik. Python bunu yeni bir local değişken sanır.


📝 Özet Öğrenciye:

TerimAçıklama
localFonksiyon içinde tanımlanır, sadece orada geçerlidir
globalFonksiyon dışında tanımlanır, tüm kodda geçerlidir
global xFonksiyon içinden global bir değişkeni değiştirmek için kullanılır
Aynı isimFonksiyon içindeki değişken dışarıdakini etkilemez (gölgeleme olur)







🎯 Scope Nedir?

Scope, bir değişkenin nerede tanımlandığına göre hangi kod parçalarında geçerli olduğunu belirler.
Python'da 2 temel kapsam vardır:

  • Yerel (local) – fonksiyon içinde tanımlanan değişken

  • Genel (global) – fonksiyon dışında tanımlanan değişken

Daha gelişmiş konularda fonksiyon içinde fonksiyon kullanıldığında da iç içe scope’lar devreye girer (bunlara closure denir, ileri seviye konudur).


✅ Gerçek Hayattan Benzetme:

Bir sınıf düşün:

  • isim listesi sınıfın içinde geçerli, dışarıda kimse göremez. (local)

  • Okulun zil sesi her yerde duyulur. (global)


🔹 1. Kullanım Alanı: Fonksiyonun dışındaki veriyle çalışmak

Eğer verin dışarıda tanımlıysa ama içinde kullanman gerekiyorsa:

python
ogrenci = "Merve" def selamla(): print("Merhaba", ogrenci) selamla() # ✅ global değişken okunabilir

🟢 Bu çalışır çünkü sadece okuma yapıyoruz.


🔹 2. Kullanım Alanı: Global değişkeni değiştirmek

python
puan = 50 def puan_arttir(): global puan puan += 10 puan_arttir() print(puan) # 🔄 puan 60 olur

📌 Global değişkene müdahale ettiğin için global anahtar sözcüğü gerekir.


🔹 3. Kullanım Alanı: Aynı değişken adı – Gölgeleme (Shadowing)

python
x = 10 def yazdir(): x = 5 # bu sadece fonksiyon içindeki x'tir print("İçeride:", x) yazdir() print("Dışarıda:", x)

🟢 Çıktı:

makefile
İçeride: 5 Dışarıda: 10

🎓 Fonksiyon içindeki x, dıştakini gizler ama değiştirmez.


🔹 4. Kullanım Alanı: Sayac, toplam, log gibi dıştan kontrol edilen değerler

🧪 Örnek: sayac örneği

python
sayac = 0 def artir(): global sayac sayac += 1 for i in range(5): artir() print("Toplam artış:", sayac)

🟢 sayac → 5 olur.


🔹 5. Kullanım Alanı: İç içe fonksiyonlarda kapsam

python
def dis_fonksiyon(): mesaj = "Dıştaki mesaj" def ic_fonksiyon(): print(mesaj) # iç fonksiyon dış fonksiyonun değişkenini görebilir ic_fonksiyon() dis_fonksiyon()

🟢 Bu Python’da closure mantığının temelidir.


🔹 6. Hatalı Kullanım: global olmadan değiştirme girişimi

python
puan = 10 def yanlis(): puan += 1 # ❌ hata: Python bunu yeni bir local değişken sanır yanlis()

🔴 Hata:

pgsql
UnboundLocalError: local variable 'puan' referenced before assignment

Çözüm:

python
def dogru(): global puan puan += 1

✅ İpuçları ve Best Practices:

DurumÖneri
Değişken sadece fonksiyonda gerekliyselocal tanımla
Değişken programın her yerinde gerekliyseglobal tanımla ama dikkatli kullan
Global değişkeni değiştireceksenglobal anahtar kelimesini unutma
Uzun projelerdeMümkünse global değişkenden kaçın
Global state gerekiyorsaclass veya yapılandırılmış sistem kullan

🧠 Özet:

  • Local değişken sadece fonksiyon içinde yaşar.

  • Global değişken tüm dosyada kullanılabilir.

  • global kullanmadan dışarıdaki değişken değiştirilemez.

  • Aynı isimde iki değişken varsa içteki dıştakini gizler, silmez.

  • Kodun kontrolünü kaybetmemek için global değişken kullanımını sınırlı tut.



Comments

Popular posts from this blog

Üçüncü Bölüm: Python'da Kontrol ve Döngü Yapıları (Kontrol ve Döngü İfadeleri)

İşte yukarıdaki 6 bölüm için her bölümden üçer adet Türkçe sınav sorusu hazırlanmıştır:

FOR Döngüsü – Python'da Tekrar Yapıları