2010-07-21 16 views
43

He estado programando usando Python por poco más de medio año y estoy más interesado en Python en lugar de usar Python para desarrollar aplicaciones. Actualmente estoy trabajando en portar algunas bibliotecas desde Python2 a Python3. Sin embargo, tengo una visión más bien abstracta de cómo hacer portuarios desde Python2 a Python3, ya que la mayoría de los cambios tratan problemas de diseño en Python2.x¿Cómo puedo obtener más información sobre las partes internas de Python?

Me gustaría obtener más información sobre las partes internas de Python; ¿Debo ir por un enfoque de arriba hacia abajo o de abajo hacia arriba? ¿Hay alguna referencia que puedas recomendar?

+0

¿Puede explicar por qué cree que necesita saber nada en absoluto sobre el funcionamiento interno de Python (2.x? 3.x? Ambos) para ser capaz de portar código de 2 a 3? –

+0

quizás la pregunta no era lo suficientemente clara (¡lo siento por eso!). Actualmente no encuentro ningún tipo de dificultad para portar bibliotecas, es solo que me gustaría tener una mejor comprensión de las partes internas de Python. Tengo curiosidad sobre cómo funcionan las cosas bajo el capó. Me preguntaba si un enfoque descendente o ascendente para el mismo sería mejor. Además, si alguien puede sugerir recursos para el mismo. –

+0

@uki es una respuesta extremadamente tardía, pero solo pondré esto aquí para cualquier persona que pueda estar interesada. [Dentro de la máquina virtual de Python] (https://leanpub.com/insidethepythonvirtualmachine) proporciona un recorrido por el interior de python con suficientes detalles. – cobie

Respuesta

29

Parece que desea saber más sobre la razón de ser del diseño del lenguaje, en lugar de las partes internas. "Internals" para mí significa cosas como cómo se colocan los objetos en la memoria, cómo funciona el recuento de referencias, etc.

Si está buscando una comprensión más profunda de las decisiones de diseño, intente leer el PEPs: son las propuestas de cambios en el idioma, y ​​a menudo incluyen discusiones detalladas de los motivos de los cambios, alternativas rechazadas, etc. en. Incluso las PEP rechazadas son útiles, porque muestran el pensamiento que ha dado forma al lenguaje.

Por ejemplo:

y así sucesivamente ..

Si realmente desea aprender sobre partes internas de Python, a continuación, empezar por leyendo sobre la API Python C, que se usa t o construir Python en sí: mi charla A Whirlwind Excursion through Python C Extensions es un lugar para comenzar.Luego puede sumergirse en el código fuente de Python en sí mismo para cualquier cosa que necesite aprender.

+4

Siguiendo con el tema de Ned, puede obtener la historia detrás de algunas de las decisiones de diseño directamente de la boca del caballo - http://python-history.blogspot.com/ –

0
+0

sí. pero 2to3 no se ocupa de todos los cambios. también, hacer la conversión no es mi problema; Me gustaría entender los cambios en un nivel más básico. –

+0

Aw, realmente no merecía un voto negativo, era solo un malentendido. Votado para compensar –

1

me gustaría leer primero el documento What's New para Python 3. Se da una buena visión general de alto nivel y toca los cambios detallados.

También puede hacer una búsqueda de 'porting to python 3' o similar. Hay muchos buenos recursos y herramientas.

Una herramienta nueva y difícil de encontrar es six, por Benjamin Peterson. Permite la escritura de código que es compatible en toda la brecha de Python 2 * 3.

La parte que me resultó más difícil para mantener el código compatible con Python 2 y Python 3 fue la implementación. Podría escribir código que funcionaría bien, pero cuando hice el paquete y la implementación, no estaba claro cuándo debería ocurrir la conversión. Finalmente encontré un comando distutils build_py_2_to_3 que haría el truco. Al usar ese comando en mi setup.py, podría lanzar una distribución fuente que se implementaría en Python 2 o Python 3. Puede encontrar An example en jaraco.util.

También ha preguntado acerca de las partes internas. Si realmente quieres llegar a la parte interna, puedes ver la fuente de Python 2.x y Python 3.x, aunque, sinceramente, me quedaría con la lectura de los tutoriales y tal vez con algunos de los archivos .py en las bibliotecas de Python.

+0

No tengo problemas para portar bibliotecas como tales. Estoy familiarizado con _how_ para portar bibliotecas. Me gustaría tener alguna ayuda sobre qué tipo de enfoque tomar para comprender las partes internas de Python. Lo siento si la pregunta no estaba clara. –

1

¿Debo elegir un enfoque descendente o ascendente?

Both! Seriamente.

15

Para alguien que está tropezando con esta pregunta de enlaces relacionados o búsqueda, hay una documentación escrita Yaniv Aknin en Python Internals. Comienza desde cero y es altamente legible.

Cuestiones relacionadas