Questo è un comunemente -uso idioma, ma NON è equivalente a Java public static void main(String args[])
. Tutti i moduli Python eseguono dall'alto verso il basso tutte le istruzioni nell'ambito del modulo. Per la maggior parte dei moduli importati, queste istruzioni sono generalmente limitate alle definizioni di classi e metodi, che impostano valori nello spazio dei nomi del modulo, ma in realtà non eseguono il codice delle funzioni. Ma se inserisci un'istruzione nello scope del modulo come SPECIAL_CONSTANT = 42
, questa verrà eseguita immediatamente quando il modulo viene importato o eseguito autonomamente, senza necessità di main()
o __main__
o altro. Prova a inserire un'istruzione print
nella parte superiore di un modulo semplice. Sia che si importi quel modulo sia che lo si esegua da solo dalla riga di comando, l'istruzione print
eseguirà sempre.
Ciò che è bello di questo idioma è che consente di incorporare alcuni semplici test o codice demo direttamente in una libreria che viene in genere importata da qualche modulo scritto dal cliente. Forse qualcosa di simile:
# special_super_duper_module.py
# this next statements will run, even though not in main() or set off
# with "__name__ ==" tests or any such thing
print "You are using special_super_duper_module.py, written by Felix the Cat"
SPECIAL_CONSTANT = 42
def super_duper_function1():
pass
def super_duper_function2():
pass
if __name__ == "__main__":
print "You are running special_super_duper_module.py interactively"
assert super_duper_function1() == None, "expected None, got non-None result"
assert super_duper_function2() == None, "expected None, got non-None result"
# doctests or unittests could also go here, or just a simple demo
Quando il modulo viene importato da qualche codice che vuole utilizzare le funzioni Super Duper, poi il piccolo banner in alto stamperà, ma il codice che viene conditionalized da if __name__ etc....
vinto' t get run. Ma se il tuo utente esegue il modulo direttamente usando il comando python, allora il test incorporato o il codice demo eseguirà.
Al contrario, public static void main(String args[])
è una firma di metodo speciale che indica alla VM Java quale metodo di quale classe iniziare. Python inizia appena nella parte superiore del modulo chiamato e inizia a correre da lì. Ecco perché è sufficiente scrivere:
print "Hello, World!"
in un modulo tutto da solo per scrivere il tuo primo programma Python.
JUST mi ha battuto su di esso :) – Devoted
è un po 'confuso avere anche un metodo chiamato 'main (args)' qui, poiché non c'è niente di speciale che lo faccia invocare dal runtime python. È il controllo per '__name __ == '__ principale __'' che conta –
Questo non è esattamente un ritorno 'void', vero?:) –