Python’da nonlocal() anahtar kelimesi, yerel bir işlevin içinde bulunduğu ancak global kapsam alanında yer alan değişkenlerin değiştirilmesi için kullanılır. İşlevler, değişkenleri ve kodu izole etmek için kullanılır, ancak global değişkenlerin yerelde değiştirilmesi gereken durumlarda nonlocal() kullanılabilir.
nonlocal() işlevi, global değil, yerel ve üst seviye bir kapsam alanı olan belirli bir kapsam alanı içindeki değişkenleri belirler. Yerel bir işlevin içinde tanımlanmış bir değişkeni, aynı kapsam alanındaki diğer bir işlevde kullanmak için nonlocal kullanabilirsiniz. Bu işlem, global değişkenleri işlediğimizde kullandığımızla benzer bir işlemdir.
Nonlocal Anahtar Kelimesi
Python programlama dilinde, ‘nonlocal’ anahtar kelimesi bir işlevin içindeki değişkenlerin yerel olmayan, ancak global değişken gibi kullanılmasına izin verir. Bu anahtar kelime, iç içe geçmiş işlevlerde bir değişkenin yerel olmayan kullanımını sağlar. Bir işlevin içinde tanımlanan değişkenler varsayılan olarak yerel olur ve işlevin dışındaki değişkenler global olarak kabul edilir. Ancak, ‘nonlocal’ anahtar kelimesi kullanılırsa, bir değişkenin işlevin içinde bir üst seviyedeki kapsama alanından alınabileceğini belirtir.
Özetle, ‘nonlocal’ anahtar kelimesi, bir işlevin içinde işlevin dışındaki bir kapsama alanındaki değişkenlere erişebilmesine olanak tanır. Bu özellik sayesinde bir değişkenin global olarak tanımlanmasına gerek kalmaz. ‘Nonlocal’ anahtar kelimesi, iç içe geçmiş çok katmanlı işlevlerde kullanıldığında özellikle yararlıdır.
Global ve Local Değişkenler
Python da, bir kod bloğu içerisinde tanımlanan değişkenlerin kapsamı, yani nerede geçerli oldukları oldukça önemlidir. Kapsam, global ve yerel değişkenler ile kontrol edilir. Global değişkenler, programın herhangi bir yerinde geçerlidirken, yerel değişkenler sadece tanımlandıkları kod bloğu içerisinde kullanılır.
Global değişkenler, genellikle programın en başında tanımlanır ve diğer fonksiyonlar bu değişkenlere erişebilir. Kullanımları oldukça basittir. Sadece bir değişken tanımlanır ve bu değişken istenildiği yerde kullanılır.
Bunun aksine yerel değişkenler, sadece tanımlandıkları kod bloğu içerisinde kullanılır. Bu değişkenler, fonksiyonlar gibi iç içe geçmiş kod bloklarında da kullanılabilir. Yerel değişkenler, programlama hatalarını önlemek için kullanışlıdır. Eğer bir fonksiyonun değişkenleri global olarak tanımlanırsa, fonksiyonlar arasında çakışmalar meydana gelebilir ve bu da programın düzgün çalışmamasına neden olabilir.
Kapsamların kontrolünde yer alan nonlocal anahtar kelimesi ise, bir fonksiyon içinde, iç içe geçmiş fonksiyonlardaki yerel bir değişkeni global olmayan ama kapsamı genişletebilecek bir şekilde kullanmamızı sağlar. Bu anahtar kelime, fonksiyonlar arasında uygun bir değişken iletişimi sağlar.
Global ve Local Değişkenler Arasındaki Farklılıklar
Python’da global ve local değişkenler arasındaki en temel fark, tanımlandıkları alanın farklı olmasıdır. Global değişkenler fonksiyon dışında tanımlandığında herhangi bir fonksiyon içinde kullanılabilirler. Bu farklılık local değişkenlerle karşılaştırıldığında oldukça belirgindir.
Local değişkenler, sadece tanımlandığı fonksiyonun kapsamı içinde kullanılabilir. Fonksiyon içinde tanımlanan değişkenler başka bir fonksiyon içinde referans edilmezler ve sadece tanımlandıkları fonksiyon kapsamında kullanılabilirler. Bu nedenle, değişkenlerin global- yerel tanımları yapılırken dikkatli olunmalıdır.
Örneğin, bir fonksiyon içinde tanımlanan bir değişken, aynı isimle başka bir fonksiyon içinde tanımlanabilir. Bu durumda, her bir fonksiyon değişkeni kendi kapsamında barındırır ve birbirlerinden bağımsızdırlar.
Bu farklılık, farklı operasyonel mantıkların kullanımını gerektirir. Global değişkenler, koruma altında olmayan verileri yönetmek için iyi bir seçenek olsa da, birçok fonksiyonun aynı değişkeni modifiye etme şansına sahip olması nedeniyle riskli bir durum oluşturabilir.
Bu nedenle, özellikle büyük ölçekli projelerde local değişkenlerin tercih edilmesi daha güvenli ve sağlam bir programlama yaklaşımı olacaktır.
Yerel Değişkenler
Python’da yerel değişkenler belirli bir kapsamda tanımlanmış ve sadece o kapsamda erişilebilirler. Bu, belirli bir işlevde veya sınıf içinde tanımlanmış değişkenler için geçerlidir. Bir işlev içinde tanımlanmış bir değişken, diğer işlevler veya programdaki diğer bölümler tarafından erişilemez. Bu nedenle, yerel değişkenler, programın işleyişini kontrol etmek için kullanışlıdır.
Yerel değişkenler, işlevin başlangıcında belirtilir ve sadece işlev içinde kullanılır. Bu değişkenler, işlev tarafından kullanıldığı sürece bellekte kalır ve işlev sona erdiğinde bellekten silinir. Bu, gereksiz bellek kullanımının önüne geçer ve daha hatasız kodlama yapılmasını sağlar. Ayrıca, yerel değişkenler, değişken adlarının karmaşık yapısı nedeniyle yerine getirilmesi gereken görevlerde oldukça kullanışlıdır.
Global Değişkenler
Global değişkenler, tüm programlarda kullanılabilen ve program içindeki herhangi bir işlevde erişilebilen değişkenlerdir. Bu, değişkenin tanımının programın herhangi bir yerinde olduğu anlamına gelir. İşlevin içindeki global değişkenler, işlev dışındaki global değişkenlerle aynı anda var olduğundan isim çakışmalarına neden olabilirler. Bu nedenle, global değişkenlerin kullanımı dikkatli bir şekilde düşünülerek yapılmalıdır.
Global değişkenler tanımlandıktan sonra, işlevler içinde herhangi bir işlem için erişilebilirdir. Global değişken kullanımı,
global anahtar kelimesi ile yapıldığından, global değişkeni tanımlayarak işlev içinde kullanabilirsiniz. Ayrıca, global değişken değerleri işlevler içinde güncellenebilir. Fakat, değişken işlev içinde oluşturulmamışsa ve global olarak da tanımlanmamışsa o değişken yerel bir değişken olarak tanımlanır.
Nonlocal() Kullanımı
Python’da nonlocal() işlevi, yerel olmayan bir değişkeni işaret etmek için kullanılır. Yani, fonksiyonun içinde yerel olarak tanımlanmamış bir değişkenin değerini değiştirmeyi sağlar. Genellikle iç içe geçmiş fonksiyonların içinde kullanılır.
Bir iç fonksiyon, tüm değişkenleri kendi işlevinde tanımlayabilir; ancak, bir dış fonksiyonun kapsamındaki bir değişkeni yeniden atanabilir hale getirmek için nonlocal anahtar kelimesi kullanılabilir. Örneğin:
|Kod||Çıktı|


def dış_fonksiyon(): x = "yerel" def iç_fonksiyon(): nonlocal x x = "nonlocal" print("iç fonksiyonda:", x) iç_fonksiyon() print("dış fonksiyonda:", x)dış_fonksiyon()


iç fonksiyonda: nonlocaldış fonksiyonda: nonlocal
Bu örnek, nonlocal anahtar kelimesinin nasıl kullanılabileceğine ilişkin bir örnektir. İç fonksiyon x değişkeni, nonlocal anahtar kelimesiyle tanımlanarak, dış fonksiyonun x değişkenine erişebilir hale getirilir. Bu nedenle, iç fonksiyon tarafından değiştirilen x değeri, dış fonksiyon tarafından da görüntülenir.
Nonlocal anahtar kelimesi, iç içe geçmiş fonksiyonların kullanıldığı komplike kod yapılarında oldukça faydalıdır ve herhangi bir anahtar kelime veya modül ithal etme işlemi gerektirmez.
Örnekler
Python’da nonlocal() anahtar kelimesinin ne olduğunu ve nasıl kullanıldığını öğrendik. Şimdi, örneklerle ne kadar kullanışlı ve faydalı bir araç olduğunu görmek için birkaç örnek inceleyelim.
Örneğin, bir iç içe işlevler yapımız var ve içerideki işlevde dışarıdaki değişkeni güncellemek istiyorsak, nonlocal() kullanabiliriz.
def mainFunc(): num = 0 def innerFunc(): nonlocal num num += 1 print(num) innerFunc() innerFunc() innerFunc()mainFunc()
Bir önceki kodda, içerideki fonksiyon nonlocal anahtar kelimesini kullandığı için dışarıdaki num değişkeni güncellendi. Bu sayede, her seferinde içerideki fonksiyon çağrıldığında num değişkeni değeri artırılacaktır.
Benzer şekilde, nonlocal() kullanarak bir fonksiyonun içinde tanımlanan bir değişkenin dışarıdan değiştirilmesini engelleyebiliriz:
def mainFunc(): num = 0 def innerFunc(): num = 1 print(num) innerFunc() print(num)mainFunc()
Yukarıdaki kodda, içerideki fonksiyon num değişkenini 1’e eşitler ve ekrana yazdırır. Ancak, içerideki fonksiyonun etkisiz olması için nonlocal() anahtar kelimesini kullanmamız gerekiyor. Böylece, içerideki fonksiyondaki num değişkeni dışarıdaki num değişkenine etki etmeyecektir.
Python’da nonlocal() anahtar kelimesinin kullanımı oldukça faydalıdır ve iç içe fonksiyonlar gibi ileri düzey konularda oldukça yararlıdır.