11.11.2023
5
Beğenme
1294
Görüntülenme
Python'da if __name__ == '__main__'
yapısı, bir Python dosyasının modül olarak mı yoksa ana program olarak mı kullanıldığını kontrol etmek için kullanılır.
Direkt olarak çalıştırdığımızda:
__name__
değeri default olarak __main__
olduğundan dolayı if __name__ == '__main__'
yapısının altında bulunan kodlar otomatik olarak çalışacaktır.Modül olarak içeri aktardığımızda
if __name__ == '__main__'
Yapısı Olmadan
Bunu daha iyi görmek için aşağıdaki kod parçacığını ele alalım.
Bu kodu direkt olarak çalıştırdığımızda program bize 6 adet unique değer verecektir.
from random import sample
# sample unique degerler uretir
def loto_sayilarini_uret(min_sayi, max_sayi, adet):
return sample(range(min_sayi, max_sayi + 1), adet)
def main():
min_sayi = 1
max_sayi = 49
adet = 6
sayilar = loto_sayilarini_uret(min_sayi, max_sayi, adet)
#sayilar.sort()
print('Lotoyu kazanan sayilar:', sayilar)
main()
# Output
#Lotoyu kazanan sayilar: [3, 46, 4, 38, 49, 16]
Şimdi bu kodu sayisal_loto.py isimli bir Python dosyasına kaydettiğimizi düşünelim.
Şimdi de bu dosyayı içe aktaralım ve ne olduğuna bakalım.
import sayisal_loto
# Output
#Lotoyu kazanan sayilar: [47, 1, 5, 42, 26, 16]
Görüldüğü gibi program import ettiğimiz gibi baştan aşağı tüm kodları çalıştırdı ve ekrana 6 tane unique değer bastı.
if __name__ == '__main__'
Yapısı İle
Eğer programa if __name__ == '__main__'
yapısını eklersek ne olduğuna bakalım.
from random import sample
# sample unique degerler uretir
def loto_sayilarini_uret(min_sayi, max_sayi, adet):
return sample(range(min_sayi, max_sayi + 1), adet)
def main():
min_sayi = 1
max_sayi = 49
adet = 6
sayilar = loto_sayilarini_uret(min_sayi, max_sayi, adet)
#sayilar.sort()
print('Lotoyu kazanan sayilar:', sayilar)
if __name__ == '__main__':
main()
# Output
#Lotoyu kazanan sayilar: [19, 38, 33, 26, 10, 17]
Bu kodu direkt olarak çalıştırdığımızda __name__
değeri default olarak __main__
'e eşit olduğundan dolayı program bize 6 adet unique değer verecektir.
Peki bu kodu sayisal_loto.py isimli dosyadan import edersek ne olacak?
import sayisal_loto
Görüldüğü gibi bu sefer dosyayı import ettiğimizde programın if __name__ == '__main__':
yapısı altında bulunan kodlar çalıştırılmadı. Bunun sebebi artık __name__
yapısının değerinin __main__
'e eşit olmamasıdır. __name__
yapısının yeni değeri import ettiğimiz dosyanın adı olmuştur. Yani bu senaryoda sayisal_loto __name__
değerine eşit olmuştur.
Şuan sadece dosyadaki fonksiyonlar kullanılabilir hale geldi.
Eğer bunları kullanmak istersek aşağıdaki gibi çağırmamız gerekecek.
import sayisal_loto
loto = sayisal_loto.main()
loto
# Output
#Lotoyu kazanan sayilar: [14, 10, 20, 41, 45, 44]
Bu yapı kullanılarak bir Python dosyasının hem modül olarak hem de aynı dosyanın doğrudan çalıştırıldığında farklı bir işlevi yerine getirmesini sağlayabiliriz.
if __name__ == '__main__':
bloğu içindeki kodlar çalışmayacaktır. Böylece, modül olarak kullanılan dosyaların yanlışlıkla yan etki oluşturacak kodlar içermesi engellenir.if __name__ == '__main__':
bloğu içindeki kodlar, dosyanın doğrudan çalıştırıldığı zaman çalışacak ek işlemler veya test kodları olarak kullanılabilir. Böylece, dosyanın doğru şekilde çalıştığını test etmek için ayrı bir test dosyası yazmaya gerek kalmaz.Beni daha fazla dokümantasyon ve bilgi için aşağıdaki Github hesabımdan takip edebilirsin :)
Kullanıcı yorumlarını görüntüleyebilmek için kayıt olmalısınız!