2009-11-13 9 views
64

Quiero comenzar a leer el código fuente de Python.Quiero comenzar a leer el código fuente de Python. Dónde debo comenzar

Mi experiencia,

sé Python y Java muy bien. Conozco algunos otros idiomas en varios niveles de competencia, pero ninguno de C/C +/particularmente bien. Estudié C en la universidad, pero nunca he programado profesionalmente en ella.

My Razones para leer este código.

  1. Comprenda cómo funciona la pitón debajo del capó.
  2. Aprende C mejor.

1 es más importante para mí que

2.

cómo debería ir sobre esto?

+8

¡Gran pregunta! No puedo ayudar porque no lo he hecho, pero realmente prestaré atención a las respuestas :) – AntonioMO

+3

¡Pregunta terrible! No puedo entender por qué no has comenzado a leer la fuente de Python. ¿Necesitas el enlace a la fuente? ¿Cuál es la pregunta? –

+4

Por ejemplo: si alguien me preguntara cómo debería leer un proyecto de Django, mi respuesta sería ... Comience con urls.py, vea a qué URL responde la aplicación/proyecto. Luego mire el modelo para tener una idea del dominio del problema. Ahora mira las vistas correspondientes a cada url ... Quiero una respuesta similar a cómo está estructurado. – agiliq

Respuesta

34

Comience por conocer la API de Python C. Es una API grande y rica, y la fuente de Python la usa naturalmente en todas partes. No llegará muy lejos en el código fuente de Python antes de que tenga que entender qué se entiende por Py_INCREF, etc.

Di una presentación en Pycon explicando la API: A Whirlwind Excursion through Python C Extensions que podría serle útil. Las extensiones C usan la misma API que el código Python.

+2

1 para la API C: Hay tantas oportunidades para agregar baterías para Python no es gracioso. –

+1

Gran presentación, muy informativo. – mjgpy3

+0

El enlace que diste fue muy útil. Gracias. – Neil

5

La pregunta es muy amplia por lo que supongo que la mejor respuesta es simplemente descargar el python source y se vuelven locos. Elige un módulo o sección de pitón que conozcas bien y comprueba qué hay debajo del capó.

+1

1 - LOL en "y se vuelven locos" .. :) – Thiyagaraj

+0

que añadió un comentario a la pregunta original, que me ayudará "volvería loco" .. – agiliq

+0

Se trata de comparar su situación con alguien que quiere entrar en la fuente de Django, usted declara que uno debería comenzar mirando "urls.py". ¿Por qué? Porque es el más importante? No estoy de acuerdo, creo que usted debe comenzar con un módulo estás muy familiarizado con, como para obtener mejores conclusiones acerca de qué resultado (y cómo) el bajo el capó algoritmos produce. – Mizipzor

19

En primer lugar, si usted está interesado principalmente en 1, me gustaría empezar con la lectura de la fuente de Python de varios módulos (y no saltar directamente a la C). Cada vez que me encontré leyendo la fuente de algunos módulos, siempre aprendí cosas nuevas sobre la programación de Python.

segundo lugar, si usted está tratando de aprender mejor C, me gustaría personalmente sugieren algo completamente diferente: el programa en el mismo. Solo leer estáticamente el código fuente es y no para que comprendas C mejor (o al menos, es un enfoque limitado, puede hacerte un poco mejor, pero hay mucho que la fuente de lectura puede darte).

Después de programar al menos un proyecto de tamaño moderado en C, , entonces Comenzaría a buscar en la fuente de Python. Esa es realmente la única forma de conocer C mejor, y realmente creo que leer la fuente C de Python sin conocer bien a C no te llevará muy lejos.

Una idea para un proyecto de C

De hecho, aquí es una idea para un proyecto de C: escribir un intérprete de Python en C. Es evidente que no va a ser ni siquiera cerca de completar, y esto es una bonita proyecto difícil, pero si solo te enfocas en algunas partes del lenguaje, creo que es una buena idea.

No sólo va a ayudarle a aprender C, que le ayudará a entender Python mucho mejor, incluso antes de mirando a la fuente: usted tiene que tener una comprensión más profunda de un montón de cosas en Python, comprenderá las ventajas del diseño en cómo funciona Python, etc.

Luego, cuando finalmente lea el código de Python, no solo comprenderá por qué algunas cosas funcionan de esa manera, probablemente aprenderá mucho C técnicas que resuelven los problemas que tienes.

13

1) En primer lugar asegúrese de que puede construir su propio Python y ejecutarlo en un depurador. Así que no solo puede agregar expresiones de impresión, sino también dividir en puntos y seguir el flujo de código. Si tiene toolsl que le permiten rastrear llamadas a funciones, perfecto, lo necesitará.

2) Comience con el archivo que implementa los tipos de datos. Son muy fáciles de entender y usted mejora su lenguaje de lenguaje C al leer el código.

3) Cree diagramas UML: las herramientas simples de ayuda de dibujo como Argo UML o MS Visio pueden ayudarlo aquí. Escriba el flujo del código.

4) Lea el código de inicio de python. Vea qué y cómo se inicializa la infraestructura básica.

6) Ty entiende el lado de Python al 100%, incluso los detalles de implementación más difíciles, qué es un AST y qué son los métodos vinculados y no vinculados y cómo los implementaría. Cuando tienes un modelo en mente sobre cómo escribirías un intérprete de Python, entonces puedes ir al paso maestro final.

7) Escriba una extensión de depurador con la API C de depuración rápida provista. Esto te ayuda a mejorar tus habilidades en C.

8) Realice el paso maestro final y sumérjase en el corazón del código del intérprete. Esto es incluso difícil de leer y comprender para un programador de C bien capacitado. Lea cómo las expresiones son evaluación y las búsquedas de métodos se almacenan en caché, los marcos se configuran para reglas de alcance, etc. Es difícil y complejo, en términos de complejidad y líneas de código.

9) Inicie Adobe Photoshop y cree un lindo diploma "Master of Python" y colóquelo en la pared de su oficina.

+1

podría por favor decirme cómo ejecutarlo en un depurador? – satoru

10

Descargue el source del sitio web de Python. Digamos que has descomprimido la fuente en un directorio llamado Python-3.1.1. Te sugiero dos puntos de partida dentro del código fuente de Python que le ayudarán a explorar cómo funciona Python bajo el capó:

  • examinar cómo la máquina virtual de Python ejecuta el código de bytes generado a partir de la interperter. Python VM está en el archivo llamado Python-3.1.1/Python/ceval.c. El núcleo de la VM es un ciclo eval que comienza en la función PyEval_EvalFrameEx en ceval.c. Lea la fuente y los comentarios en línea. Estoy seguro de que lo disfrutarías.

  • Otra opción es observar cómo se implementan los tipos de datos incorporados de python como listas, diccionarios y conjuntos. Por ejemplo, los conjuntos se implementan en Python-3.1.1/Objects/setobject.c. El directorio de Objetos también contiene implementaciones de otros tipos de datos.

+0

Cualquier información es información útil. Gracias. ¿Pueden dar más consejos para comenzar? – Neil

Cuestiones relacionadas