Python'da ad alanı (namespace), isimlerin ve nesnelerin eşleştirildiği bir sözlüktür. Ad alanlarının seviyeleri: yerel, global, yerleşik. Modüller, kodun düzenlenmesi için ayrı alanlardır. İthalat sırasında Python, her modül için yeni bir ad alanı oluşturur.
import module — modülü ithal eder ve nesnelere module.name aracılığıyla erişim sağlar.from module import name — nesneyi doğrudan mevcut ad alanına ithal eder (isim çakışması riski).as — bir takma ad belirlemeye izin verir.İsim çakışmalarını önlemek için:
import mymodule), yıldız (from... import *) kullanmayın.__init__.py bulunan dizinler).import module as m).project/
package/
__init__.py
module1.py
module2.py
import package.module1 from package.module2 import function as fn
Soru: Bir modül iki kez ithal etmenin farkı nedir? Modülün tüm kodu tekrar mı çalışacak?
Cevap: Hayır. İlk ithalat sırasında modül çalıştırılır ve sonucu sys.modules içinde önbelleğe alınır. Tekrar ithal etmek, zaten yüklenmiş modül nesnesini geri döndürür, kodu tekrar çalıştırılmaz.
# module.py print('Merhaba!') # main.py import module # Merhaba! yazdırır import module # hiçbir şey yazdırmaz
Hikaye
from settings import * kullanarak, ayarları değiştirdiklerinde beklenmedik "yerel değişkenlerin" "üzerine yazılmasına" neden oldular, bu da zor tespit edilebilen hatalara yol açtı.Hikaye
utils.py) oluşturdu. Entegrasyon aşamasında, "aynı" isimli modüller birbirinin "yerine geçti" ve beklenmedik davranışlar ve karmaşık hatalara yol açtı.Hikaye
Bir kütüphanede, importlib.reload aracılığıyla yeni ayarlarla bir modülün "sıcak yeniden ithal edilmesi" denendi. Diğer daha önce ithal edilen modüllerin, nesnelerin eski referanslarını sakladığı dikkate alınmadı ve bu nedenle değişiklikler uygulamanın tüm bölümlerinde uygulanmadı.