Python'da Global ve Yerel Değişkenlere Giriş

Yayınlanan: 2021-08-26

Python, değişkenleri çok başına buyruk bir şekilde ele alır. Birçok programlama dili, değişkenleri varsayılan olarak global olarak kabul ederken (yerel olarak bildirilmedikçe), Python, aksi belirtilmedikçe değişkenleri yerel olarak kabul eder. Python'un değişkenleri varsayılan olarak yerel olarak kabul etmesinin arkasındaki neden, genel değişkenleri kullanmanın genellikle zayıf kodlama uygulaması olarak görülmesidir.

Dolayısıyla Python'da programlama yaparken bir fonksiyon içinde değişken tanımlaması yapıldığında bunlar varsayılan olarak yereldir. Bu değişkende, işlevin gövdesinde yaptığınız herhangi bir değişiklik veya değişiklik, yalnızca bu işlevin kapsamında kalacaktır. Veya başka bir deyişle, değişken, işlevin değişkeniyle aynı ada sahip olsa bile, bu değişiklikler işlevin dışındaki herhangi bir değişkene yansıtılmayacaktır. Tüm değişkenler tanımlandıkları fonksiyon kapsamında bulunurlar ve o değeri tutarlar. Python değişkenleri ve projeleri üzerinde uygulamalı deneyim elde etmek için ABD'deki en iyi üniversitelerden veri bilimi sertifikalarımızı deneyin.

Bu makale aracılığıyla, Python'daki yerel ve global değişkenler kavramını ve global değişkenleri nasıl tanımladığınızı keşfedelim. Ayrıca “yerel olmayan değişkenler” olarak bilinen bir şeye bakacağız.

Okumaya devam etmek!

İçindekiler

Python'da Global ve Yerel Değişkenler

Python'da bir fonksiyonun gövdesinde global değerlerin nasıl kullanılabileceğini anlamak için bir örneğe bakalım:

Program:

tanım işlevi():

yazdır(dize)

string = “Python'u seviyorum!”

işlev()

Çıktı

Python'u seviyorum!

Gördüğünüz gibi, string değişkenine “Python'u seviyorum!” değeri verildi. func() çağrılmadan önce. İşlev gövdesi yalnızca print ifadesinden oluşur. Fonksiyonun gövdesinde string değişkenine atama olmadığı için, bunun yerine global değişkenin değerini alacaktır.

Sonuç olarak, çıktı, bu durumda "I love Python!" olan değişken dizesinin global değeri ne olursa olsun olacaktır.

Şimdi func() içindeki string değerini değiştirelim ve global değişkenleri nasıl etkilediğini görelim:

Program:

tanım işlevi():

string = “Java'yı seviyorum!”

yazdır(dize)

string = “Python'u seviyorum!”

işlev()

yazdır(dize)

Çıktı:

Java'yı seviyorum!

Python'u seviyorum!

Yukarıdaki programda func() fonksiyonunu tanımladık ve bunun içinde “I love Java!” değerine sahip bir değişken stringimiz var. Bu nedenle, bu değişken func() işlevinde yereldir. Ardından, daha önce olduğu gibi global değişkenimiz var ve ardından işlevi ve print ifadesini çağırıyoruz. İlk olarak, işlev tetiklenir, bu işlevin print ifadesini çağırır ve "Java'yı seviyorum!" çıktısını verir. – bu işlev için yerel değişkendir. Ardından, program fonksiyonun kapsamı dışında kaldığında, s değeri “Python'u seviyorum” olarak değiştirilir ve bu yüzden her iki satırı da çıktı olarak alırız.

Şimdi ilk iki örneği ekleyelim ve print deyimini kullanarak stringe erişmeye çalışalım ve ardından ona yeni bir değer atamaya çalışalım. Esasen, hem yerel hem de global bir değişken olarak bir dize oluşturmaya çalışıyoruz.

Neyse ki Python bu karışıklığa izin vermiyor ve hata veriyor. İşte nasıl:

Program:

tanım işlevi():

yazdır(dize)

string = “Java'yı seviyorum!”

yazdır(dize)

string = “Python'u seviyorum!”

işlev()

Çıktı (Hata):

————————————————————————

UnboundLocalError Traceback (en son arama son)

<modül> içinde <ipython-input-3-d7a23bc83c27>

5

6 string = “Python'u seviyorum!”

—-> 7 işlev()

func() içinde <ipython-input-3-d7a23bc83c27>

1 tanımlı işlev():

—-> 2 yazdır(dize)

3 string = “Java'yı seviyorum!”

4 baskı (dize)

5

UnboundLocalError: atamadan önce başvurulan yerel değişken 's'

Açıkçası Python, bir değişkenin bir fonksiyon içinde hem global hem de yerel olmasına izin vermez. Böylece func() içindeki dizgeye bir değer atadığımız için bize yerel bir değişken verir. Sonuç olarak, ilk print deyimi hata bildirimini gösterir. Herhangi bir fonksiyon kapsamında oluşturulan veya değiştirilen tüm değişkenler, açıkça “global” olarak bildirilmedikçe yereldir.

Python'da Global Değişkenleri Tanımlamak

Global değişkenlere eriştiğimizi Python'a bildirmek için global anahtar kelimeye ihtiyaç vardır. İşte nasıl:

Program:

tanım işlevi():

küresel dize

yazdır(dize)

string = “Ama Python'u da öğrenmek istiyorum!”

yazdır(dize)

string = “Java öğrenmek istiyorum!”

işlev()

yazdır(dize)

Çıktı:

Java öğrenmek istiyorum!

Ama Python'u da öğrenmek istiyorum!

Ama Python'u da öğrenmek istiyorum!

Çıktıdan da görebileceğiniz gibi Python burada global değişkenleri tanır ve buna göre print ifadesini değerlendirerek uygun çıktı verir.

İç İçe İşlevlerde Global Değişkenleri Kullanma

Şimdi iç içe fonksiyonlarda global değişkenler kullanılırsa ne olacağını inceleyelim. 'Dil' değişkeninin tanımlandığı ve çeşitli kapsamlarda kullanıldığı bu örneğe göz atın:

Program:

tanım işlevi():

dil = “İngilizce”

tanım func1():

evrensel dil

dil = “İspanyolca”

print(“Func1'i çağırmadan önce: ” + dil)

print(“Func1 şimdi çağrılıyor:”)

işlev1()

print(“func1'i çağırdıktan sonra: ” + dil)

işlev()

print(“Ana dilde dilin değeri: ” + dil)

Çıktı:

func1'i çağırmadan önce: İngilizce

func1'i şimdi çağırmak:

func1'i çağırdıktan sonra: İngilizce

Ana dilde dilin değeri: İspanyolca

Gördüğünüz gibi, global anahtar sözcüğü, iç içe func1 içinde kullanıldığında, üst işlevin 'dili' değişkeni üzerinde hiçbir etkisi yoktur. Yani değer “English” olarak korunur. Bu aynı zamanda func() çağrıldıktan sonra, modül ad alanında 'İspanyolca' değerine sahip bir 'dil' değişkeninin bulunduğunu gösterir.

Bu bulgu, önceki bölümde anladığımızla da tutarlıdır - bir değişken, bir fonksiyonun gövdesi içinde tanımlandığında, aksi belirtilmedikçe her zaman yereldir. Ancak, farklı diğer kapsamlara ait değişkenlere de erişim için bir mekanizma olmalıdır.

Yerel olmayan değişkenlerin devreye girdiği yer burasıdır!

Yerel Olmayan Değişkenler

Yerel olmayan değişkenler, Python3 tarafından tanıtılan yeni değişken türleridir. Bunların global değişkenlerle pek çok ortak noktası vardır ve aynı zamanda son derece önemlidir. Ancak, yerel olmayan ve global değişkenler arasındaki bir fark, yerel olmayan değişkenlerin modül kapsamındaki değişkenleri değiştirmeyi mümkün kılmamasıdır.

Bunu anlamak için aşağıdaki örneklere göz atın:

Program:

tanım işlevi():

evrensel dil

baskı(dil)

dil = “Almanca”

işlev()

Çıktı:

Almanca

Beklendiği gibi, program çıktı olarak 'Frankfurt'u döndürür. Şimdi 'küresel'i 'yerel olmayan' olarak değiştirelim ve ne olduğunu görelim:

Program:

tanım işlevi():

yerel olmayan dil

baskı(dil)

dil = “Almanca”

işlev()

Çıktı:

"<ipython-input-9-97bb311dfb80>" dosyası, 2. satır

yerel olmayan dil

^

SyntaxError: yerel olmayan 'dil' için bağlayıcı bulunamadı

Gördüğünüz gibi, yukarıdaki program bir sözdizimi hatası veriyor. Lokal olmayan atamaların ancak iç içe fonksiyonların tanımından yapılabileceğini buradan anlayabiliriz. Yerel olmayan değişkenler, işlevin kapsamı içinde tanımlanmalıdır ve durum böyle değilse, tanımını iç içe geçmiş kapsamda da bulamaz. Şimdi, aşağıdaki programı kontrol edin:

Program:

tanım işlevi():

dil = “İngilizce”

tanım func1():

yerel olmayan dil

dil = “Almanca”

print(“Func1'i çağırmadan önce: ” + dil)

print(“Func1 şimdi çağrılıyor:”)

işlev1()

print(“func1'i çağırdıktan sonra: ” + dil)

dil = “İspanyolca”

işlev()

print(“'dil' ana: ” + dil)

Çıktı:

func1'i çağırmadan önce: İngilizce

func1'i şimdi çağırmak:

func1'i çağırdıktan sonra: Almanca

ana dilde 'dil': İspanyolca

Yukarıdaki program, 'dil' değişkeni func1() çağrılmadan önce tanımlandığı için çalışır. Tanımlı değilse, aşağıdaki gibi bir hata alırız:

Program:

tanım işlevi():

#dil = “İngilizce”

tanım func1():

yerel olmayan dil

dil = “Almanca”

print(“Func1'i çağırmadan önce: ” + dil)

print(“Func1 şimdi çağrılıyor:”)

işlev1()

print(“func1'i çağırdıktan sonra: ” + dil)

dil = “İspanyolca”

işlev()

print(“'dil' ana: ” + dil)

Çıktı:

"<ipython-input-11-5417be93b6a6>" dosyası, 4. satır

yerel olmayan dil

^

SyntaxError: yerel olmayan 'dil' için bağlayıcı bulunamadı

Ancak, yerel olmayanı global ile değiştirirsek program gayet iyi çalışır:

Program:

tanım işlevi():

#dil = “İngilizce”

tanım func1():

evrensel dil

dil = “Almanca”

print(“Func1` çağırmadan önce: ” + dil)

print(“Func1 şimdi çağrılıyor:”)

işlev1()

print(“func1'i çağırdıktan sonra: ” + dil)

dil = “İspanyolca”

işlev()

print(“'dil' ana: ” + dil)

Çıktı:

func1'i çağırmadan önce: İngilizce

func1'i şimdi çağırmak:

func1'i çağırdıktan sonra: Almanca

esas olarak 'dil': Almanca

Dikkat ederseniz yukarıdaki programda global değişkenin (dil) değeri de değişiyor! Yerel olmayan değişkenlerin beraberinde getirdiği güç budur!

Sonuç olarak

Bu makalede, Python'daki yerel, küresel ve yerel olmayan değişkenleri, farklı kullanım durumları ve dikkat etmeniz gereken olası hatalarla birlikte tartıştık. Bu bilgi yanınızdayken, devam edebilir ve farklı türde değişkenlerle pratik yapmaya ve ince farklılıkları fark etmeye başlayabilirsiniz.

Python, tüm dünyada son derece popüler bir programlama dilidir - özellikle de veri ile ilgili sorunları ve zorlukları çözme söz konusu olduğunda. upGrad'da, dünya çapında 40.000'den fazla ücretli öğrenciyle 85'ten fazla ülkede bir öğrenci tabanımız var ve programlarımız 500.000'den fazla çalışan profesyoneli etkiledi. Veri Bilimi ve Makine Öğrenimi alanındaki kurslarımız , herhangi bir geçmişe sahip motive olmuş öğrencilerin yolculuklarına başlamalarına ve veri bilimi alanında başarılı olmalarına yardımcı olmak için tasarlanmıştır. 360 derecelik kariyer desteğimiz, bize kaydolduğunuzda kariyerinizin yalnızca yukarı doğru hareket etmesini sağlar. Bugün bize ulaşın ve akran öğrenimi ve küresel ağ oluşturmanın gücünü deneyimleyin!

Python'daki değişken türleri nelerdir?

Kapsamlarına bağlı olarak, Python'daki değişkenler ya yerel, küresel ya da yerel değildir.

Python'daki global değişkenlere bir fonksiyon içinden erişilebilir mi?

Evet, global değişkenlere Python'da bir fonksiyon içinden erişilebilir.

Yerel ve global değişkenler arasındaki fark nedir?

Global değişkenler kapsamı olarak programın tamamına sahipken, yerel değişkenler kapsam olarak yalnızca tanımlandıkları fonksiyona sahiptir.