Bir Değişkenin Python Ad Alanı ve Kapsamı

Bu eğitimde, ad alanı, adlardan nesnelere eşleme ve bir değişkenin kapsamı hakkında bilgi edineceksiniz.

Python'da Ad nedir?

Eğer daha önce 'Python'un Zen'i' ( import thisPython yorumlayıcısını yazın) okuduysanız , son satır şunu belirtir: İsim Alanları harika bir fikirdir - hadi onlardan daha fazlasını yapalım! Peki bu gizemli isim alanları nelerdir? Önce ismin ne olduğuna bakalım.

Ad (aynı zamanda tanımlayıcı da denir), nesnelere verilen bir addır. Python'daki her şey bir nesnedir. Ad, temeldeki nesneye erişmenin bir yoludur.

Biz atama yapmak Örneğin, a = 2, 2bellekte depolanan bir nesnedir ve bir biz ile ilişkilendirir adıdır. Yerleşik işlev aracılığıyla bazı nesnelerin adresini (RAM'de) alabiliriz id(). Nasıl kullanılacağına bakalım.

 # Note: You may get different values for the id a = 2 print('id(2) =', id(2)) print('id(a) =', id(a))

Çıktı

 id (2) = 9302208 id (a) = 9302208

Burada ikisi de aynı nesneye atıfta bulunur, dolayısıyla aynı nesneye 2sahiptirler id(). İşleri biraz daha ilginç hale getirelim.

 # Note: You may get different values for the id a = 2 print('id(a) =', id(a)) a = a+1 print('id(a) =', id(a)) print('id(3) =', id(3)) b = 2 print('id(b) =', id(b)) print('id(2) =', id(2))

Çıktı

 id (a) = 9302208 id (a) = 9302240 id (3) = 9302240 id (b) = 9302208 id (2) = 9302208

Yukarıdaki adımlar dizisinde neler oluyor? Bunu açıklamak için bir şema kullanalım:

Python'daki değişkenlerin bellek diyagramı

Başlangıçta, bir nesne 2oluşturulur ve a adı onunla ilişkilendirilir, bunu yaptığımızda a = a+1yeni bir nesne 3oluşturulur ve şimdi bu nesne ile ilişkilendirilir.

Buna dikkat edin id(a)ve id(3)aynı değerlere sahip olun.

Ayrıca, b = 2çalıştırıldığında, yeni ad b önceki nesneyle ilişkilendirilir 2.

Bu, Python'un yeni bir yinelenen nesne oluşturması gerekmediğinden etkilidir. Ad bağlamanın bu dinamik doğası Python'u güçlü kılar; bir isim herhangi bir tür nesneyi ifade edebilir.

 >>> a = 5 >>> a = 'Hello World!' >>> a = (1,2,3)

Bunların tümü geçerlidir ve farklı durumlarda üç farklı nesne türünü ifade eder. Fonksiyonlar da nesnelerdir, dolayısıyla bir isim onlara da atıfta bulunabilir.

 def printHello(): print("Hello") a = printHello a()

Çıktı

 Merhaba

Aynı isim a bir işleve işaret edebilir ve bu ismi kullanarak işlevi çağırabiliriz.

Python'da Ad Alanı nedir?

Artık adların ne olduğunu anladığımıza göre, ad alanları kavramına geçebiliriz.

Basitçe söylemek gerekirse, bir ad alanı bir adlar koleksiyonudur.

Python'da, bir ad alanını, tanımladığınız her adın karşılık gelen nesnelere eşlemesi olarak hayal edebilirsiniz.

Belirli bir zamanda farklı ad alanları bir arada bulunabilir ancak tamamen izole edilmiştir.

Python yorumlayıcısını başlattığımızda tüm yerleşik adları içeren bir ad alanı oluşturulur ve yorumlayıcı çalıştığı sürece var olur.

Bu id(), print()vb. Gibi yerleşik işlevlerin her zaman programın herhangi bir bölümünden bizim için kullanılabilir olmasının nedenidir . Her modül kendi genel ad alanını oluşturur.

Bu farklı ad alanları izole edilmiştir. Dolayısıyla, farklı modüllerde bulunabilecek aynı isim çakışmaz.

Modüllerin çeşitli işlevleri ve sınıfları olabilir. Bir işlev çağrıldığında, içinde tanımlanmış tüm adların bulunduğu yerel bir ad alanı oluşturulur. Benzer, sınıf için de geçerlidir. Aşağıdaki şema bu kavramı netleştirmeye yardımcı olabilir.

Python'daki farklı ad alanlarının diyagramı

Python Değişken Kapsamı

Tanımlanmış çeşitli benzersiz ad alanları olmasına rağmen, hepsine programın her bölümünden erişemeyebiliriz. Kapsam kavramı devreye giriyor.

Kapsam, bir programın herhangi bir önek olmaksızın doğrudan bir ad alanına erişilebilen kısmıdır.

Herhangi bir anda, en az üç iç içe geçmiş kapsam vardır.

  1. Yerel isimleri olan mevcut fonksiyonun kapsamı
  2. Global isimlere sahip modülün kapsamı
  3. Yerleşik isimlere sahip en dış kapsam

Bir işlevin içinde bir referans yapıldığında, ad yerel ad alanında, ardından genel ad alanında ve son olarak yerleşik ad alanında aranır.

Başka bir işlevin içinde bir işlev varsa, yerel kapsamın içine yeni bir kapsam yerleştirilir.

Python'da Kapsam ve Ad Alanı Örneği

 def outer_function(): b = 20 def inner_func(): c = 30 a = 10

Burada, a değişkeni genel ad alanı içindedir. Değişken b öğesinin yerel ad alanında outer_function()ve c, öğesinin iç içe yerel ad alanında yer alır inner_function().

İçeride olduğumuzda inner_function(), c bizim için yereldir, b yerel değildir ve a küreseldir. C'ye yeni değerler atamanın yanı sıra okuyabiliriz, ancak yalnızca b ve a'dan okuyabiliriz inner_function().

B'ye bir değer atamaya çalışırsak, yerel ad alanında yerel olmayan b'den farklı yeni bir b değişkeni oluşturulur. Aynı şey a'ya bir değer atadığımızda da olur.

Ancak, a'yı global olarak ilan edersek, tüm referans ve atamalar global a'ya gider. Benzer şekilde, b değişkenini yeniden bağlamak istiyorsak, yerel olmayan olarak bildirilmelidir. Aşağıdaki örnek bunu daha da netleştirecektir.

 def outer_function(): a = 20 def inner_function(): a = 30 print('a =', a) inner_function() print('a =', a) a = 10 outer_function() print('a =', a)

Gördüğünüz gibi, bu programın çıktısı

 a = 30 a = 20 a = 10

Bu programda, üç farklı değişken a ayrı ad alanlarında tanımlanır ve buna göre erişilir. Aşağıdaki programdayken,

 def outer_function(): global a a = 20 def inner_function(): global a a = 30 print('a =', a) inner_function() print('a =', a) a = 10 outer_function() print('a =', a)

Programın çıktısı.

 a = 30 a = 30 a = 30 

Burada, tüm referanslar ve atamalar, anahtar kelime kullanımı nedeniyle global a'ya yöneliktir global.

Ilginç makaleler...