Python'da yeniyim, ancak diğer OOP dillerinde deneyimim var. Kursum python'daki main yöntemini açıklamıyor.
Lütfen bana main yönteminin python'da nasıl çalıştığını söyleyin ? Kafam karıştı çünkü Java ile karşılaştırmaya çalışıyorum.
def main():
# display some lines
if __name__ == "__main__": main()
main nasıl yürütülür ve main
i yürütmek için neden bu garip if
e ihtiyacım var? if`i kaldırdığımda kodum çıktı olmadan sonlandırılıyor.
Minimal kod -
class AnimalActions:
def quack(self): return self.strings['quack']
def bark(self): return self.strings['bark']
class Duck(AnimalActions):
strings = dict(
quack = "Quaaaaak!",
bark = "The duck cannot bark.",
)
class Dog(AnimalActions):
strings = dict(
quack = "The dog cannot quack.",
bark = "Arf!",
)
def in_the_doghouse(dog):
print(dog.bark())
def in_the_forest(duck):
print(duck.quack())
def main():
donald = Duck()
fido = Dog()
print("- In the forest:")
for o in ( donald, fido ):
in_the_forest(o)
print("- In the doghouse:")
for o in ( donald, fido ):
in_the_doghouse(o)
if __name__ == "__main__": main()
Python'da yürütme main'den başlamak zorunda DEĞİLDİR. Çalıştırılabilir kodun"ilk satırı" ilk olarak çalıştırılır.
def main():
print("main code")
def meth1():
print("meth1")
meth1()
if __name__ == "__main__":main() ## with if
Çıktı -
meth1
main code
More on main() - http://ibiblio.org/g2swap/byteofpython/read/module-name.html
Bir modül'ün __name__
Her modülün bir adı vardır ve bir modüldeki ifadeler kendi modülünün adını öğrenebilir. Bu özellikle belirli bir durumda kullanışlıdır - Daha önce de belirtildiği gibi, bir modül ilk kez içe aktarıldığında, o modüldeki ana blok çalıştırılır. Peki ya bloğu, program başka bir modülden içe aktarıldığında değil de sadece kendi başına kullanıldığında çalıştırmak istersek? Bu, modülün name niteliği kullanılarak gerçekleştirilebilir.
Bir modülün adı kullanılıyor
#!/usr/bin/python
# Filename: using_name.py
if __name__ == '__main__':
print 'This program is being run by itself'
else:
print 'I am being imported from another module'
Çıktı -
$ python using_name.py
This program is being run by itself
$ python
>>> import using_name
I am being imported from another module
>>>
Nasıl Çalışır -
Her Python modülünün tanımlanmış bir __name__
si vardır ve bu __main__
ise, modülün kullanıcı tarafından bağımsız olarak çalıştırıldığı anlamına gelir ve ilgili uygun eylemleri yapabiliriz.
Python'un Java, C, C++, vb. gibi tanımlanmış bir giriş noktası yoktur. Bunun yerine basitçe bir kaynak dosyayı satır satır çalıştırır. ifdeyimi, dosyanız başka bir modülde bir kütüphane olarak değil de "Main" modülü olarak yüklenirse çalıştırılacak bir
main` işlevi oluşturmanıza olanak tanır.
Açık olmak gerekirse, bu Python yorumlayıcısının bir dosyanın ilk satırından başlayıp onu yürüttüğü anlamına gelir. class Foobar:ve
def foobar()` gibi satırları çalıştırmak ya bir sınıf ya da bir fonksiyon yaratır ve bunları daha sonra kullanmak üzere bellekte saklar.
Şimdi oluşturduğunuz modül (.py) dosyasını başka bir python betiğinden içe aktarırsanız, içindeki kodu çalıştırmayacaktır
if __name__ == '__main__':
...
Komut dosyasını doğrudan konsoldan çalıştırırsanız, komut dosyası yürütülecektir.
Python bir main() fonksiyonu kullanmaz veya gerektirmez. Bu koruma tarafından korunmayan herhangi bir kod, modülün yürütülmesi veya içe aktarılması üzerine yürütülecektir.
Bu konu python.berkely.edu adresinde biraz daha genişletilmiştir.