2010-05-25 19 views
14

¿Cuál es el equivalente del pitón de los "principales (args String []) public static void {...}"? Recuerdo haberlo usado en el pasado y luego lo olvidé.de Python "public void"

Lo que estoy tratando de recordar básicamente es una función que creo incluido algunos subrayados (__) ...

THX

Respuesta

21
#!/usr/bin/env python 

import sys 

def main(args): 
    print args 

if __name__ == '__main__': 
    main(sys.argv) 

edición: emular a un retorno void.

+0

JUST me ganó :) – Devoted

+2

es un poco confuso tener también un método llamado 'main (args)' aquí, ya que no hay nada especial que haga que sea invocado por el tiempo de ejecución de python. Es el cheque para '__name __ == '__ main __'' que cuenta –

+0

Eso no es exactamente un retorno 'nulo', ¿o sí?:) –

10
if __name__ == "__main__": 
    ....do your thing 
0

Oh!

if __name__ == '__main__': 
+0

No del todo. Necesita subrayados dobles iniciales y finales, ya que estos son nombres "mágicos". – Santa

9

Esta es una frecuencia -uso idiom, pero NO es equivalente a Java public static void main(String args[]). Todo módulos de Python se ejecutan de arriba a abajo todas las declaraciones en el alcance del módulo. Para la mayoría de los módulos importados, estos enunciados generalmente están limitados a las definiciones de clase y método, que configuran valores en el espacio de nombres del módulo, pero en realidad no ejecutan el código de las funciones. Pero si se pone un comunicado en el ámbito de módulo como SPECIAL_CONSTANT = 42, entonces esto se llevará a cabo inmediatamente cuando el módulo ha sido importada o independiente ejecute - sin necesidad de main() o __main__ ni nada. Intente poner una declaración print en la parte superior de un módulo simple. Ya sea que importar ese módulo o bien puede hacerlo por sí mismo desde la línea de comandos, la declaración será printsiempre ejecutar.

Lo bueno de este lenguaje es que le permite incluir algunas pruebas sencillas o código de demostración perfectamente con una biblioteca que normalmente se importa por algún módulo escrito por su cliente. Tal vez algo como esto:

# 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 

Cuando el módulo es importado por un código que quiere usar sus funciones súper duper, a continuación, la pequeña bandera en la tapa se imprimirá, pero el código que se conditionalized por if __name__ etc....won' t ejecutar. Pero si su usuario ejecuta el módulo directamente con el comando python, se ejecutará la prueba integrada o el código de demostración .

Por el contrario, public static void main(String args[]) es una firma de método especial que le dice a la máquina virtual de Java lo qué método de la clase lo que para empezar. Python solo comienza en la parte superior del módulo nombrado y comienza a ejecutarse desde allí. Es por eso que solo necesita escribir:

print "Hello, World!" 

en un módulo por sí solo para escribir su primer programa Python.

+0

+1 por la respuesta completa en lugar de una respuesta superficial de Gadarene-upticker-attracting :-) –

+3

@John - Hoy aprendí una nueva palabra. (Nunca vi un Gadarene, nunca espero ..., etc. etc.) Lo que * odio * sobre 'public static void main (String [] args)' es que es una barrera tan enigmática para el primero -Los desarrolladores de tiempo e, invariablemente, las respuestas de los instructores a quienes preguntan son "no se preocupe por lo que significa, solo escríbalo". Considero que es un defecto de diseño de idioma que uno debe aprender 1. main como punto de entrada, 2. protección de método público, 3. definiciones de métodos estáticos, 4. void para indicar una función sin retorno, y 5. una declaración de matriz, solo para que el programa imprima tu nombre! – PaulMcG

Cuestiones relacionadas