Python'da if __name__ == "main" yapısına rastlamış olmalısınız. Ama tam amacını biliyor musunuz?

Bazı programlama dillerinde, ana yöntem, bir programın yürütülmesi için tek giriş noktası olarak hizmet eder. Diğer dillerden Python'a geçerken deyim __name__ == "__main__" ise aynı görevi yerine getiriyor gibi görünebilir. Python'da durum böyle değil.

bu __name__ == "__main__" ise deyim, dosya bir komut dosyası olarak çalıştığında belirli bir kodun yürütülmesine izin verir. Ayrıca, dosyayı bir modül olarak içe aktardığınızda aynı kodun yürütülmemesini de sağlar.

__name__ Değişken Davranışını Anlama

bu __isim__ değişken Python'da yerleşiktir. Kullanıldığı modülün veya betiğin adını temsil eder. Bir komut dosyası ana program olarak yürütüldüğünde, değeri şu şekilde ayarlanır: __ana__. Komut dosyasını bir modül olarak içe aktarırsanız değişkenin değeri, modülün gerçek adına ayarlanır.

Bu ilk başta kafa karıştırıcı olabilir, ancak aşağıdaki örneğe bir göz atın:

Bir komut dosyası oluşturun ve adlandırın

instagram viewer
tebrikler.py. Bu komut dosyası, bir kullanıcıyı karşılayan ve değerini yazdıran bir işlev içerecektir. __isim__ değişken. Ayrıca kullanıcıdan adını girmesini isteyecektir.

kesinselamlaşmak(isim):
Yazdır(f"Merhaba, {isim}!")

Yazdır("__name__ değeri:", __isim__)

eğer __isim__ == "__ana__":
kullanıcı_adı = girdi("Lütfen adınızı giriniz: ")
selam (kullanıcı_adı)
başka:
Yazdır("'Selamlar' modülü içe aktarıldı.")

çalışan tebrikler.py komut dosyası aşağıdaki çıktıyı görüntüler:

değeri __isim__ değişken şu şekilde döner __ana__ çünkü komut dosyası doğrudan yürütülür.

Şimdi başka bir komut dosyası oluşturun ve adlandırın script2.py. Ardından, içe aktarın selamlar modül olarak komut dosyası.

içe aktarmak selamlar

Yazdır("Karşılama komut dosyası çalıştırılıyor...")
selamlar.selam("Alice")

arama selamlaşmak işlevi selamlama modülü aşağıdaki çıktıyı verir.

değeri __isim__ değişken, içe aktarılan modülün gerçek adıyla değişir. Bu durumda, selamlar.

Bu değer, deyimin ne olduğudur. __name__ == "__main__" ise bir dosyanın komut dosyası olarak mı çalıştığını yoksa bir modül olarak mı içe aktarıldığını belirlemek için arar.

if __name__ == "__main__" Yapısı Ne Zaman Kullanılır?

ekleyebilirsiniz __name__ == "__main__" ise herhangi bir komut dosyasında oluşturun. Ancak, onu kullanmanın en faydalı olabileceği bazı senaryolar vardır. Aşağıdaki basit hesap makinesi programını kullanarak bu senaryoları öğreneceksiniz.

# hesap makinesi.py

kesineklemek(bir, b):
geri dönmek bir + b

kesinçıkarmak(bir, b):
geri dönmek bir - b

kesinçarpmak(bir, b):
geri dönmek bir * b

kesinbölmek(bir, b):
eğer b != 0:
geri dönmek bir / b
başka:
geri dönmek"Hata: Sıfıra bölme!"

eğer __isim__ == "__ana__":
Yazdır("Hesap Makinesine Hoş Geldiniz!")
Yazdır("Bir işlem seçin:")
Yazdır("1. Eklemek")
Yazdır("2. Çıkar")
Yazdır("3. Çarpmak")
Yazdır("4. Bölmek")

seçim = int (giriş("Seçiminizi girin (1-4): "))

sayı1 = kayan nokta (giriş("İlk sayıyı girin: "))
sayı2 = kayan nokta (giriş("İkinci sayıyı girin: "))

eğer seçim == 1:
sonuç = topla (sayı1, sayı2)
Yazdır(f"toplamı {sayı1} Ve {sayı2} dır-dir: {sonuç}")
elif seçim == 2:
sonuç = çıkarma (num1, num2)
Yazdır(f"arasındaki fark {sayı1} Ve {sayı2} dır-dir: {sonuç}")
elif seçim == 3:
sonuç = çarp (sayı1, sayı2)
Yazdır(f" ürünü {sayı1} Ve {sayı2} dır-dir: {sonuç}")
elif seçim == 4:
sonuç = böl (sayı1, sayı2)
Yazdır(f"bölünmesi {sayı1} ile {sayı2} dır-dir: {sonuç}")
başka:
Yazdır("Geçersiz seçim!")

İlk senaryo, bir betiği bağımsız olarak çalıştırmak ve belirli eylemleri gerçekleştirmek istediğiniz zamandır. Bu, komut dosyasının bağımsız bir program olarak işlev görmesini sağlar. bu __name__ == "__main__" ise yapı, kullanıcıların komut satırı arabirimini kullanarak hesap makinesiyle etkileşim kurmasına olanak tanır. Bu, kullanıcılara, temeldeki kodu anlamak veya değiştirmek zorunda kalmadan programın işlevselliğini kullanma yeteneği verir.

olmadan programı çalıştırmak hala mümkündür. __name__ == "__main__" ise aynı sonucu oluşturun ve elde edin, ancak kodunuz modüler kod organizasyonunu kaybeder.

İkinci senaryo, modüler bir tasarıma sahip olmak için kod. Bu, diğer programların betiğinizi bir modül olarak içe aktarmasına ve gereksiz işlevleri tetiklemeden işlevlerini kullanmasına olanak tanır.

Hesap makinesi programı söz konusu olduğunda, diğer programlar hesap makinesi CLI arayüzünü ve kullanıcı giriş istemlerini tetiklemeden modül. Bu, kodun yeniden kullanılabilirliğini ve modüler tasarımı sağlar. Bu nedenle, hesap makinesinin daha büyük uygulamalara sorunsuz bir şekilde entegre edilmesini sağlamak.

içe aktarmak hesap makinesi

# Hesap makinesi modülündeki işlevleri kullanma
sonuç_ekle = hesap makinesi.ekle(5, 3)
Yazdır("Ekleme sonucu:", sonuç_ekle)

sonuç_çıkarma = hesap makinesi.çıkarma(10, 4)
Yazdır("Çıkarma sonucu:", sonuç_çıkarma)

Üçüncü senaryo, istediğiniz zaman Python betiğinizi test edin ve hata ayıklayın içe aktarabilecek diğer modüllerden veya komut dosyalarından bağımsız olarak. Hesap makinesi örneğinde, harici kodun müdahalesi olmadan hesap makinesinin işlevselliğini test etmeye odaklanmayı kolaylaştırır.

içe aktarmak hesap makinesi

# Hesap makinesi işlevlerini test etme
eğer __isim__ == "__ana__":
# Test ekleme
sonuç = hesap makinesi.ekle(5, 3)
Yazdır("Ekleme Sonucu:", sonuç)

# Test çıkarma
sonuç = hesap makinesi.çıkarma(8, 4)
Yazdır("Çıkarma Sonucu:", sonuç)

# Test çarpması
sonuç = hesap makinesi.çarpma(2, 6)
Yazdır("Çarpma Sonucu:", sonuç)

Yukarıdaki kod, hesap makinesi komut dosyasında bağımsız olarak nasıl hata ayıklanacağını gösterir.

if __name__ == "__main__" Yapısını Kullanmak Ne Zaman Gereksizdir?

Yukarıdaki senaryolarda gördüğünüz gibi, __name__ == "__main__" ise yapı, ana program olarak çalıştırdığınız betiği ve bir modül olarak içe aktardığınız betiği ayırt etmektir. Bununla birlikte, kullanımının gereksiz olduğu bazı durumlar vardır.

İlk durum, komut dosyanızın basit olduğu ve yeniden kullanılabilir işlevlere veya modüllere sahip olmadığı ve onu içe aktarma niyetinde olmadığınız durumdur. Bu durumda, çalıştırıldığında komut dosyasının tamamı yürütüldüğünden bu yapıyı atlamalısınız. Bu, belirli bir amacı gerçekleştiren ve yeniden kullanım veya içeri aktarma amaçlı olmayan tek seferlik komut dosyaları için yaygındır.

Diğer durum, etkileşimli bir Python oturumunda çalıştığınız zamandır, örn. Jupyter Notebook'u kullanırken. Etkileşimli bir oturumda, kodu doğrudan komut isteminde veya etkileşimli bir Python kabuğunda yazıp yürütürsünüz. Python REPL (Okuma-Değerlendirme-Yazdırma Döngüsü) gibi. Bu, kodla deneme yapmanıza ve küçük parçacıkları test etmenize olanak tanıyarak size anında sonuç verir.

Bu etkileşimli ortamlarda, ana program olarak çalışan veya modül olarak içe aktarılan bir komut dosyası kavramı geçerli değildir. Geleneksel bir betik giriş noktasına ihtiyaç duymadan doğrudan kod parçacıklarını yürütüyorsunuz.

Python'da Nasıl Usta Olunur?

Herhangi bir programlama dilinde usta olmak için, işlevlerin veya araçların temel kavramlarının nasıl çalıştığını anlamanız gerekir. Tıpkı bu makalede if __name__ == "__main__" yapısını öğrendiğiniz gibi.

Temel kavramları anlamak, bunları kullandığınızda programınızın tam olarak nasıl davranacağını bilmenize yardımcı olacaktır. Aceleye gerek yok, kavramları birer birer öğrenmek, her birini daha derinlemesine incelemenize yardımcı olacaktır.