Je suis nouveau en Python, mais j'ai de l'expérience dans d'autres langages OOP. Mon cours n'explique pas la méthode main en python.
Veuillez me dire comment fonctionne la méthode main en Python ? Je suis confus car j'essaie de le comparer à Java.
def main():
# display some lines
if __name__ == "__main__": main()
Comment main est-il exécuté et pourquoi ai-je besoin de cet étrange if
pour exécuter main
. Mon code se termine sans sortie lorsque j'enlève le if
.
Le code minimal -
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()
En Python, l'exécution ne doit PAS nécessairement commencer à main. La première ligne de "code exécutable" ; est exécutée en premier.
def main():
print("main code")
def meth1():
print("meth1")
meth1()
if __name__ == "__main__":main() ## with if
Sortie -
meth1
main code
Plus d'infos sur main() - http://ibiblio.org/g2swap/byteofpython/read/module-name.html
Le __name__
d'un module
Chaque module a un nom et les instructions dans un module peuvent trouver le nom de son module. Ceci est particulièrement pratique dans une situation particulière - Comme mentionné précédemment, lorsqu'un module est importé pour la première fois, le bloc principal de ce module est exécuté. Que faire si nous voulons exécuter le bloc uniquement si le programme a été utilisé par lui-même et non lorsqu'il a été importé d'un autre module ? Ceci peut être réalisé en utilisant l'attribut name du module.
Utilisation de l'attribut name d'un module.
#!/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'
Sortie -
$ python using_name.py
This program is being run by itself
$ python
>>> import using_name
I am being imported from another module
>>>
Comment ça marche -
Chaque module Python a son __name__
défini et si c'est __main__
, cela implique que le module est exécuté de manière autonome par l'utilisateur et nous pouvons faire les actions appropriées correspondantes.
Python n'a pas de point d'entrée défini comme Java, C, C++, etc. Il exécute simplement un fichier source ligne par ligne. L'instruction if
vous permet de créer une fonction main
qui sera exécutée si votre fichier est chargé en tant que module "Main" ; plutôt qu'en tant que bibliothèque dans un autre module.
Pour être clair, cela signifie que l'interpréteur Python commence à la première ligne d'un fichier et l'exécute. L'exécution de lignes comme class Foobar:
et def foobar()
crée une classe ou une fonction et les stocke en mémoire pour une utilisation ultérieure.
Si vous importez le fichier module (.py) que vous créez maintenant à partir d'un autre script python, il n'exécutera pas le code qu'il contient.
if __name__ == '__main__':
...
Si vous exécutez le script directement depuis la console, il sera exécuté.
Python n'utilise pas ou ne requiert pas de fonction main(). Tout code qui n'est pas protégé par cette garde sera exécuté lors de l'exécution ou de l'importation du module.
Ce point est développé un peu plus sur python.berkely.edu