versus java python

versus - python vs java 2017



ProgramaciĆ³n en Python vs. programaciĆ³n en Java (13)

He estado escribiendo Java durante los últimos años, y ahora comencé a escribir en python (además).

El problema es que cuando miro mi código de Python parece que alguien trató de combinar el código de Java en un formato de python, y sale mal porque, bueno, python no es Java.

¿Algún consejo sobre cómo escapar de este patrón de "Escribir Java en Python"?

¡Gracias!


1) Python admite muchos aspectos (pero no todos) de la programación orientada a objetos; pero es posible escribir un programa Python sin hacer ningún uso de los conceptos de OO.

1) Java soporta solo programación orientada a objetos.

2) Python está diseñado para ser utilizado interpretativamente. Se puede ingresar una declaración de Python en el indicador del intérprete

(>>>)

, y será ejecutado de inmediato. (Las implementaciones hacen uso de la compilación automática en códigos de bytes (archivos .pyc).

2) Los programas escritos en Java deben compilarse explícitamente en códigos de bytes ( archivos .class ), aunque un IDE puede hacer esto automáticamente de forma transparente para el usuario. Java no admite la ejecución directa de sentencias, aunque existen herramientas como Dr. Java que lo admiten.

3) Python se escribe dinámicamente: • Se introduce una variable asignándole un valor. Ejemplo:

someVariable = 42

• A una variable a la que se le ha asignado un valor de un tipo dado más tarde se le puede asignar un valor de un tipo diferente. Ejemplo:

someVariable = 42 someVariable = ''Hello, world''

3) Java es

mecanografiado estáticamente

: • Una variable debe declararse explícitamente como de algún tipo antes de asignarle un valor, aunque la declaración y la asignación pueden realizarse al mismo tiempo. Ejemplos:

int someVariable; int someVariable = 42;

• A una variable que se ha declarado de un tipo particular no se le puede asignar un valor de un tipo diferente.

4) Python admite los siguientes tipos de datos integrados: enteros simples (normalmente enteros de 32 bits en el rango de -2147483648 a 2147483647). • Enteros largos (tamaño limitado solo por el tamaño de la memoria de la máquina que se ejecuta) • Booleanos (Falso y Verdadero). • Numeros reales. • Números complejos. Además, Python admite varios tipos que representan una colección de valores, incluidas cadenas, listas y diccionarios.

4) Java tiene dos tipos de tipos de datos: tipos primitivos y tipos de referencia. Java admite los siguientes tipos de datos primitivos: • bytes - enteros de 8 bits • cortos - enteros de 16 bits • int - enteros de 32 bits • largos - enteros de 64 bits (Java también admite una clase java.math.BigInteger para representar enteros cuyo tamaño está limitado solo por la memoria) • flotante - números reales de 32 bits. • doble - números reales de 32 bits. • booleano - (falso y verdadero). • char - un solo personaje. Además, Java admite matrices de cualquier tipo como los tipos de referencia, y la API incluye la clase String y un gran número de clases utilizadas para colecciones de valores.

5)

Python está orientado a la línea:

las declaraciones terminan al final de una línea a menos que el salto de línea se escape explícitamente con. No hay manera de poner más de una declaración en una sola línea. Ejemplos: esta es una declaración esta es otra declaración esta es una declaración larga que se extiende sobre más de una línea

5)

Statements in Java always end with a semicolon (;)

. Es posible que una declaración se ejecute en más de una línea o que tenga varias declaraciones en una sola línea. Ejemplos: esto es una declaración; esta es otra afirmación; esta es una declaración larga que se extiende sobre más de una línea; una declaración; otro; otro;

6)

Los comentarios de Python comienzan con #

y extender hasta el final de la línea. Ejemplo:

Esto es un comentario

Una nueva declaración comienza aquí

6) Java tiene dos tipos de comentarios. Un comentario que comienza con // se extiende hasta el final de la línea (como los comentarios de Python). Los comentarios también pueden comenzar con / * y terminar con * /. Estos pueden extenderse a lo largo de múltiples líneas o estar integrados dentro de una sola línea. Ejemplos:

// This is a comment A new statement starts here /* This is also a comment */ /* And this is also a comment, which is long enough to require several lines to say it. */

La declaración comienza / * comentario * / luego continúa

7) Las cadenas de Python se pueden incluir entre comillas simples o dobles (''o "") . Un carácter está representado por una cadena de longitud 1. Ejemplos:

''This is a string'' "This is also a string" # Equivalent ''c'' # A string "c" # An equivalent string

Python usa los siguientes operadores para construir expresiones booleanas compuestas:

and, or and not. Example: not(x > 0 and y > 0) or z > 0

7) Las cadenas Java deben estar entre comillas dobles (""). Un carácter es un tipo diferente de objeto y está encerrado entre comillas simples (''). Ejemplos:

"This is a String" ''c'' // A character, but not a String Java uses the following operators for constructing compound boolean expressions: &&, ||, ! and ^ (meaning exclusive or) Example: ! (x > 0 && y > 0) || z > 0 ^ w > 0

8) En Python, los operadores de comparación.

(>, <,> =, <=, == y! =) se puede aplicar a números

, cadenas y otros tipos de objetos), y compare los valores de alguna manera apropiada (por ejemplo, orden numérico, orden léxico) cuando sea posible.

8) En Java, la mayoría de los operadores de comparación (>, <,> = y <=) se pueden aplicar solo a los tipos primitivos. Se pueden aplicar dos (== y! =) A cualquier objeto, pero cuando se aplican a tipos de referencia, prueban el mismo objeto (diferente) en lugar del mismo valor (diferente).

9) No existe una convención de Python aceptada universalmente para nombrar clases, variables, funciones, etc.

9) Por convención, la mayoría de los nombres en Java utilizan mayúsculas y minúsculas. Los nombres de las clases comienzan con una letra mayúscula; Los nombres de variables y funciones comienzan con una letra minúscula. Las constantes de clase se nombran usando todas las letras mayúsculas con guiones bajos. Ejemplos: AClassName aVariableName aFunctionName () A_CLASS_CONSTANT

10) Las declaraciones de bucle definido de Python tienen la forma de la variable en la expresión: Ejemplo:

for p in pixels: something

10) Java tiene dos tipos de declaraciones de bucle definidas. Uno tiene la forma

for (variable in collection) Example: for (p in pixels) something;

11) Python usa la función incorporada range () con for para hacer un bucle en un rango de enteros. Ejemplos:

for i in range(1, 10) something (i takes on values 1, 2, 3, 4, 5, 6, 7, 8, 9) for i in range(1, 10, 2) something (i takes on values 1, 3, 5, 7, 9)

11) Java utiliza una forma diferente de for para recorrer un rango de enteros. Ejemplos:

for (int i = 1; i < 10; i ++) something; (i takes on values 1, 2, 3, 4, 5, 6, 7, 8, 9) for (int i = 1; i < 10; i += 2) something; (i takes on values 1, 3, 5, 7, 9)

12) Las declaraciones condicionales de Python tienen la forma si condición: y una parte opcional de otro tipo tiene la forma otra: La forma elif condición: se permite como alternativa a un else: inmediatamente seguido por un if. Ejemplos:

if x < 0: something if x < 0: something else: something different if x < 0: something elif x > 0: something different else: yet another thing

12) Las declaraciones condicionales de Java tienen la forma if (condición) y una otra parte opcional tiene la forma else (sin dos puntos) No hay forma elif, o si se usa directamente. Ejemplos:

if (x < 0) something; if (x < 0) something; else something different; if (x < 0) something; else if (x > 0) something different; else yet another thing;

13) El alcance de una declaración condicional o de bucle de Python se denota mediante sangría. (Si se van a incluir varias líneas, se debe tener cuidado para asegurarse de que cada línea tenga una sangría idéntica). Ejemplos:

if x < 0: do something do another thing regardless of the value of x if x < 0: do something do something else do yet a third thing do another thing regardless of the value of x

13) El alcance de una declaración condicional o en bucle de Java es normalmente la siguiente declaración. La sangría es ignorada por el compilador (aunque estilísticamente sigue siendo altamente deseable para el beneficio de un lector humano). Si se van a incluir varias líneas, el alcance debe estar delimitado por llaves ({,}). (Opcionalmente, se pueden usar incluso si el alcance es una sola línea). Ejemplos:

if (x < 0) do something; do another thing regardless of the value of x; if (x < 0) do something; // Bad style-don''t do this! do another thing regardless of the value of x; if (x < 0) { do something; do something else; do yet a third thing; } do another thing regardless of the value of x; if (x < 0) { do something; } do another thing regardless of the value of x;


Alguien me proporcionó esta lista de cómo "Python no es Java" cuando inicié Python después de Java, y fue muy útil.

Además, revisa esta pregunta similar de SO que publiqué hace poco tiempo cuando estoy en una posición similar.


Algunas de las principales formas en que Python se diferencia de los lenguajes similares a C / Java son:

  1. Lista de comprensiones.

  2. Soporte para la programación funcional.

  3. El uso de ciertas construcciones pitónicas en lugar de construcciones similares a C similares, aunque ambas parecen funcionar (se puede argumentar que la comprensión de la lista es parte de esto, pero existen otras).

Hay otros, pero estos son los principales que me molestaron cuando empecé Python (y venía de años de Java como tú).

Antes de usar cualquiera de estos, es útil entender por qué debería ir por el código pythonic en lugar de la forma habitual de C / Java en Python, aunque ambos le dan el mismo resultado.

Para empezar, Python proporciona algunas funciones potentes que no están disponibles en C / Java que hacen que su código sea mucho más claro y sencillo (aunque esto es subjetivo y puede que no se vea mejor para alguien que viene de Java al principio). Los dos primeros puntos caen en esta categoría. Por ejemplo, el soporte para funciones como objetos y cierres de primera clase hace que sea fácil hacer cosas que necesitarían todo tipo de acrobacias extrañas con clases internas en Java.

Pero una razón importante es que Python es un lenguaje interpretado, y ciertas construcciones son mucho más rápidas que el código equivalente de C / Java. Por ejemplo, las comprensiones de listas suelen ser mucho más rápidas que un bucle for equivalente que recorre los índices de una lista y accede a cada elemento por índice. Este es un beneficio muy objetivo, y en mi opinión, gran parte de la forma de pensar de "Python en forma demasiado lenta" proviene del uso del código de estilo Java en Python.

Una de las mejores maneras de aprender sobre el código pythonic es leer el código de otras personas. De hecho, aprendí mucho mirando el código de Python publicado en las respuestas a las preguntas de SO. Estos a menudo vienen con explicaciones y, por lo general, es obvio por qué es mejor que el código no pitónico (velocidad, claridad, etc.).

Editar:

Por supuesto, hay otras formas de obtener el código de otras personas. También puede descargar y consultar el código de cualquier buen proyecto de código abierto de Python. Los libros también son un buen recurso, recomendaría O''Reilly Python Cookbook . Tiene muchos ejemplos de códigos útiles y explicaciones muy detalladas.


Aprende algunos otros idiomas. Le ayudará a marcar la diferencia entre los algoritmos (la estructura de procesamiento, sin cambios entre idiomas) y las características sintácticas locales del idioma. Luego puede "escribir Foo en barra" para cualquier combinación de idiomas "Foo" y "Barra".


Come Python, duerme Python y bebe Python. Esa es la única manera........


Definitivamente no es una panacea, pero creo que deberías probar un código de golf en Python. Obviamente, nadie debería escribir el código IRL "jugado al golf", pero encontrar la forma más concisa de expresar algo realmente lo obliga a explotar la funcionalidad incorporada del lenguaje.



Intente encontrar algoritmos que entienda bien y vea cómo se implementan en las bibliotecas estándar de Python.

Persistir. :)


Podrías considerar sumergirte en los paradigmas de Python. La mejor manera es saber primero qué son y luego explorar las mejores prácticas leyendo algunos textos y revisando algunos ejemplos de código. Recomiendo Learning Python de Mark Lutz; Ideal para principiantes y usuarios avanzados.

Hará usted mismo una gran injusticia si programa con Python y no aprovecha toda la sintaxis Pythonic incorporada y fácil de usar.

Como decía mi profesor de francés, "el francés no es solo el inglés con palabras diferentes".


Podrías empezar por leer El zen de Python . Le dará una idea de cómo se debe escribir el código Python, siempre que comprenda el lenguaje lo suficiente como para entender de qué se trata. :-)


Puedes publicar tu código en Refactor mi código para ver si alguien te puede mostrar una forma más pitónica de hacerlo.