1395

Python Dersleri: Baştan Sona Python Programlama Eğitimi

Fonksiyonların Kapsamı (Function Scope)

Fonksiyonların kapsamı global ve yerel değişkenleri tanımlama



Function Scope

Fonksiyonlar tanımlandığında kendi içlerinde yeni bir tanımlama alanı (scope) oluştururlar dolayısıyla fonksiyon içinde ya da dışında tanımlanan değişkenlerin nasıl ele alındığını öğrenmemiz gerekir.

Local ve Global Scope

Her fonksiyon tanımlandığında kendi tanımlama alanlarını oluştururlar ve kendi içlerinde tanımlanan değişkenler local yani yerel değişken olarak adlandırılırlar.

Örnek

# global scope
x = 'global x'

def function(): 
    # local scope
    # x = 'local x'
    print(x)

function() # local x
print(x)   # global x  

Aynı isimde tanımlanan x değişkeni hem global hem de local olarak tanımlanmıştır. Dolayısıyla fonksiyon içerisinde x değişkenine yapılan atama global alanda tanımlanan değişkeni etkilemez çünkü fonksiyon kapsamında yeni bir scope tanımlanır.

Peki fonksiyon kapsamın x değişkenini tanımlamazsak ne olur ?

Örnek

# global scope
x = 'global x'

def function(): 
    # local scope    
    print(x)

function() # global x
print(x)   # global x  

Bu durumda fonksiyon kapsamında x' e ulaşılmaya çalışıldığında kendi kapsamın x olmadığından global kapsamdaki x değeri kullanılır.

Örnek

# global
name = 'Çınar'

def changeName(new_name):
    # local 
    name = new_name
    print(name)

changeName('Ada') # Ada
print(name)       # Çınar

changeName() fonksiyonuna gönderdiğimiz değer fonksiyon kapsamındaki name değişkenine atanacağından dolayı değişiklik global değil yerel name değişkeninde yapılmış olur. Dolayısıyla ekrana Ada ve Çınar bilgisi yazılır.

Nesned Function Scopes

Peki iç içe tanımladığımız fonksiyon kapsamlarındaki değişkenler nasıl ele alınıyor?

Örnek

name = 'global string'

def greeting():
    name = 'Çınar'

    def hello():
        print('hello '+ name)

    hello()

greeting() # hello Çınar

hello() fonksiyonu kapsamında tanımlanan name değişkeni olmadığından dolayı bir üstteki greeting() fonksiyonu kapsamında bulunan name='Çınar' bilgisi hello kapsamında kullanılır. 

Eğer ki hello() kapsamına name isminde bir değişken eklersek bu durumda hello() için yerel olan name kullanılır.

Örnek

name = 'global string'

def greeting():
    name = 'Çınar'

    def hello():
        name = 'Ada'
        print('hello '+ name)

    hello()

greeting() # hello Ada

Peki hello ve greeting içinde name bilgilerini silersek bu durumda tüm fonksiyonlar için global olan name bilgisi ekrana yazdırılır.

Örnek
name = 'global string'

def greeting():

    def hello():
        print('hello '+ name)

    hello()

greeting() # global string