versus java python

versus - python vs java 2017



Java-> Python? (5)

  1. Lista de comprensiones. A menudo me encuentro filtrando / mapeando listas, y puedo decir [line.replace("spam","eggs") for line in open("somefile.txt") if line.startswith("nee")] es realmente bonito.

  2. Las funciones son objetos de primera clase. Se pueden pasar como parámetros a otras funciones, definidas dentro de otra función y tienen alcance léxico. Esto hace que sea realmente fácil decir cosas como people.sort(key=lambda p: p.age) y así clasificar a un grupo de personas de su edad sin tener que definir una clase comparador personalizada o algo igualmente detallado.

  3. Todo es un objeto Java tiene tipos básicos que no son objetos, por lo que muchas clases en la biblioteca estándar definen 9 versiones diferentes de funciones (para boolean, byte, char, double, float, int, long, Object, short). Array.sort es un buen ejemplo. Autoboxing ayuda, aunque hace las cosas incómodas cuando algo resulta ser nulo.

  4. Propiedades Python le permite crear clases con campos de solo lectura, campos generados de forma perezosa, así como campos que se verifican en la asignación para asegurarse de que nunca sean 0 o nulos o lo que sea que desee evitar, etc. ''

  5. Argumentos predeterminados y palabras clave. En Java, si desea un constructor que pueda tomar hasta 5 argumentos opcionales, debe definir 6 versiones diferentes de ese constructor. Y no hay manera de decir Student(name="Eli", age=25)

  6. Las funciones solo pueden devolver 1 cosa. En Python tiene asignación tuple, por lo que puede decir spam, eggs = nee() pero en Java necesita recurrir a parámetros mutables o tener una clase personalizada con 2 campos y luego tiene dos líneas adicionales de código para extraer esos campos

  7. Sintaxis incorporada para listas y diccionarios.

  8. Sobrecarga del operador.

  9. Bibliotecas generalmente mejor diseñadas. Por ejemplo, para analizar un documento XML en Java, dices
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("test.xml");
    y en Python dices
    doc = parse("test.xml")

De todos modos, podría seguir y seguir con más ejemplos, pero Python es en general un lenguaje mucho más flexible y expresivo. También está tipeado dinámicamente, lo que realmente me gusta, pero que tiene algunas desventajas.

Java tiene un rendimiento mucho mejor que Python y tiene soporte de herramientas mucho mejor. A veces esas cosas importan mucho y Java es el mejor lenguaje que Python para una tarea; Continúo usando Java para algunos proyectos nuevos a pesar de que me gusta mucho más Python. Pero como lenguaje, creo que Python es superior para la mayoría de las cosas que creo que necesito lograr.

Además de la naturaleza dinámica de Python (y la sintaxis), ¿cuáles son algunas de las principales características del lenguaje Python que Java no tiene, y viceversa?


Creo que este par de artículos de Philip J. Eby hace un gran trabajo al discutir las diferencias entre los dos idiomas (principalmente sobre filosofía / mentalidad en lugar de características específicas del lenguaje).


Una diferencia clave en Python es el espacio en blanco significativo . Esto deja a muchas personas, a mí también durante mucho tiempo, pero una vez que empiezas, parece natural y tiene mucho más sentido que ; s en todas partes.

Desde una perspectiva personal, Python tiene los siguientes beneficios sobre Java:

Aparte de ésos, esta página en el Wiki de Python es un buen lugar para buscar con muchos enlaces a artículos interesantes.


Aparte de lo que dijo Eli Courtwright:

  • Encuentro los iteradores en Python más concisos. Puedes usar i en algo y funciona con casi todo. Sí, Java ha mejorado desde 1.5, pero por ejemplo puedes iterar a través de una cadena en python con este mismo constructo.
  • Introspección: en python puede obtener información de tiempo de ejecución sobre un objeto o módulo sobre sus símbolos, métodos o incluso sus documentos. También puedes instanciarlos dinámicamente. Java tiene algo de esto, pero generalmente en Java toma media página de código para obtener una instancia de una clase, mientras que en Python tiene alrededor de 3 líneas. Y, por lo que sé, lo de docstrings no está disponible en Java

Con Jython puedes tener ambos. Está solo en Python 2.2, pero sigue siendo muy útil si necesita un intérprete incorporado que tenga acceso al tiempo de ejecución de Java.