2009-06-27 27 views
52

Tengo un principiante que proviene de un entorno Java. Como empresa, ahora nos centramos en el desarrollo de Python (aunque con algunos sistemas heredados en Java).Pasar de Java a Python

Estoy buscando consejos y recursos para ayudar en la transición y me pregunto si ustedes aquí tienen algún consejo útil para un novato.

Saludos.

Respuesta

94

Haz que se lee

Beginner's Guide to Python

Python for Java Programmers

considerar leer la respuesta aceptada a esta pregunta para que señale estas cosas a él

Java -> Python lista de algunas características de Java no tiene

Dos artículos que tratan los diferentes enfoques generales

Python is Not Java

Java is Not Python, either

lateral parcial en comparación lado del código de Java y Python

Python/Java A Side-by-Side

le dan punteros cómo/dónde encontrar documentación similar a la API de Java JDK

The Python Language Reference

The Python Standard Library

Global Module Index

+1

¿Cuánto ¿Puedo confiar en que * Java no es algo Python no es Java *? Es muy viejo y estoy seguro de que las cosas han cambiado, pero ¿cuánto? – piegames

4

Estoy en una posición algo similar a usted, ya que conozco Java bastante bien, pero estoy empezando a usar Python.

El Python tutorial es un muy buen lugar para comenzar.

El Python Style Guide le dice todo lo que necesita saber sobre cómo debería ser su código (y esto es importante en Python, el espacio en blanco es importante).

Y recuerda que if y for siempre tienen una : después de ellos :-)

6

que he encontrado dive into python ser el mejor remedio contra el choque cultural , eso seguramente sucederá al pasar de otro lenguaje menor (es broma, por supuesto) a Python. Casi no tiene programas de "Hola mundo", sino que muestra formas de python de, digamos, trabajar con xml, escribir pruebas de unidades, etc. Fue extremadamente útil para mí.

1

¿Qué hay de http://python.computersci.org/?

Creo que con una guía de esa manera, además de la tutoría en los idiomas de Python (comps de la lista, y así sucesivamente), mientras que la conversión de algo de código Java para Python como un ejercicio sería suficiente

7

Para los estudiantes que vienen de fondo puro Java y quiero llevar a cabo su tesis que involucre algún software basado en Python, he encontrado que la mejor manera es simplemente dejarlos comenzar a escribir código después de haber leído algunos primeros tutoriales.

Luego, de vez en cuando, selecciono su código y sugiero fragmentos de código que huelen demasiado a Java-ish para migrar a un estilo más Pythonic.

mayoría de las veces esto es

  • fines de bucles que se pueden cambiar a las listas por comprensión
  • uso excesivo de clases, donde 1) módulos, tuplas o diccionarios funcionan bien o 2) interfaces no están es necesario explícitamente
  • condiciones
  • demasiado complejos utilizados en las sentencias if (1<x && x<=y && y<10) que puede ser simplificado (1 < x <= y < 10)
  • re-inventan funcionalidad, lo que podría ser fácilmente importados desde scipy o las bibliotecas estándar de Python código
  • pegamento para experimentos en bash que ahora se pueden implementar mucho más fácil de leer en Python sí
25

yo diría que un problema cuando se pasa de cualquier idioma en el que está cómoda es la sensación perdida de repente sin saber cómo funciona nada!

Yo aconsejaría a relleno en el fondo para ellos por primera vez en términos de lo siguiente:

  1. ¿Cómo se estructura proyectos? (recuerde que Java es 'generalmente' una clase por archivo y en el paquete 'directorios'; ¿Python es similar?)
  2. ¿Cómo hace usted compilación proyectos? (¿Cuáles son las versiones de Python de ant, classpath etc.?)
  3. ¿Cómo configura y despliega su código? (¿Cuáles son las versiones de Python de Spring, guice, etc.?)
  4. ¿Dónde están los buenos sitios de la comunidad para buscar ayuda?
  5. ¿Cuáles son algunas de las herramientas de 3 ª parte más útiles

Creo que las diferencias de idioma (como acostumbrarse a lambdas) será bastante fácil y tomar un par de semanas en el propio ritmo del desarrollador, pero no entienden los puntos anteriores ralentizarán el proceso de familiarización.

1

Secundándose oxbow_lakes, ¿cómo se proyectan los equipos documento sus cosas?
Aunque el buen documento es en gran medida independiente del lenguaje, ¿puede la gente comentar sobre los estándares de doc, las herramientas, los navegadores ?
Ejemplos de buen Python/buen documento de Java sería útil.

0

Ya hay muchos buenos consejos, pero debo llamar la atención sobre la naturaleza más interactiva de Python versus Java. Python a diferencia de Java le ofrece un clásico "Read-Eval-Print-Loop" (REPL) que le permite experimentar rápidamente con el idioma. En lugar de adivinar cómo funcionaría una declaración particular en la vida real, la respuesta se puede obtener escribiendo la expresión en el intérprete y viendo el resultado de inmediato. Esta es una de las razones por las que recomiendo Python a los programadores principiantes; obtienes comentarios más inmediatos que el ciclo tradicional de edición y compilación de otros idiomas.

En particular uso ipython para gran parte de mi interacción con Python. Entre otras cosas, te permite escribir '?' después de cualquier identificador para obtener ayuda sobre un identificador, que le brinda más información que la función de ayuda estándar(), y tiene menos teclas presionadas.

Además, para convertir el aprendizaje de Python en un juego, personalmente aprendí mucho de mi Python al resolver acertijos en el PythonChallenge. (Descargo de responsabilidad: no estoy afiliado a PythonChallenge). Hay que admitir que resolver los desafíos requiere algo más que el conocimiento de Python (pequeña pista: hacer "ver fuente" mucho), pero el deseo de resolver un rompecabezas te dará la motivación para aprender nuevas partes de Python. Lo hizo por mí al menos. La mejor de las suertes.

1

Python es un lenguaje que puede ser descrito como:

"reglas puede caber en la palma de su mano con una enorme bolsa de ganchos".

Casi todo en python sigue los mismos estándares simples. Todo es accesible, modificable y modificable. Hay muy pocos elementos de nivel de lenguaje.

Tomemos por ejemplo, la función integrada len (data). len(data) funciona simplemente verificando un método data.__len__(), y luego lo llama y devuelve el valor. De esta forma, len() puede funcionar en cualquier objeto que implemente un método __len__().


Empiece por aprender acerca de los tipos y la sintaxis básica:

  1. dinámicas fuertemente tipado Idiomas
  2. bool, int, float, string, lista, tupla, dict, establecer
  3. declaraciones, sangrado, "todo es un objeto"
  4. definiciones de funciones básicas

luego pasar a aprender acerca de cómo funciona pitón:

  1. importaciones y los módulos (muy simples)
  2. la ruta de Python (sys.ruta)
  3. la dir() función
  4. __builtins__

Una vez que tenga una comprensión de cómo encajar las piezas juntas, volver atrás y cubrir algunas de las características más avanzadas del lenguaje:

  1. iteradores
  2. reemplaza como __len__ (hay toneladas de estos)
  3. lista comprehe nsions y generadores
  4. clases y objetos (de nuevo, muy simple una vez que sabes un par de reglas)
  5. reglas de herencia pitón

Y una vez que tenga un nivel de comodidad con estos artículos (con un enfoque en lo que hace ellos Pythonic), miran artículos más específicos:

  1. que rosca en Python (nótese el intérprete de bloqueo global)
  2. gestores de contexto
  3. base de datos de acceso
  4. archivo IO
  5. tomas
  6. etc ...

y nunca olvidar El Zen de Python (por Tim Peters)

Beautiful is better than ugly. 
Explicit is better than implicit. 
Simple is better than complex. 
Complex is better than complicated. 
Flat is better than nested. 
Sparse is better than dense. 
Readability counts. 
Special cases aren't special enough to break the rules. 
Although practicality beats purity. 
Errors should never pass silently. 
Unless explicitly silenced. 
In the face of ambiguity, refuse the temptation to guess. 
There should be one-- and preferably only one --obvious way to do it. 
Although that way may not be obvious at first unless you're Dutch. 
Now is better than never. 
Although never is often better than *right* now. 
If the implementation is hard to explain, it's a bad idea. 
If the implementation is easy to explain, it may be a good idea. 
Namespaces are one honking great idea -- let's do more of those!