2011-12-22 20 views

Respuesta

71

Dado que Python es de código abierto, puede leer el source code.

Para averiguar en qué archivo se implementa un módulo o función en particular, generalmente puede imprimir el atributo __file__. Alternativamente, puede usar el módulo inspect, consulte la sección Retrieving Source Code en la documentación de inspect.

Para las clases y métodos integrados esto no es tan sencillo ya que inspect.getfile y inspect.getsource devolverá un error de tipo que indica que el objeto está incorporado. Sin embargo, muchos de los tipos incorporados se pueden encontrar en el Objects sub-directory of the Python source trunk. Por ejemplo, vea here para la implementación de la clase enumerate o here para la implementación del tipo list.

+0

¿Puedes dar un ejemplo con 'enumerate'? – Benjamin

+2

Puede ver la forma en que el enumerado incorporado se prueba [aquí] (http://hg.python.org/cpython/file/b36cb4602e21/Lib/test/test_enumerate.py). – Makoto

+3

el código de enumeración es [aquí] (http://svn.python.org/view/python/trunk/Objects/enumobject.c?view=markup) –

14

El shell iPython lo facilita: function? le proporcionará la documentación. function?? muestra también el código. PERO esto solo funciona para funciones puras de python.

Entonces siempre puede download el código fuente para el (c) Python.

Si le interesan las implementaciones pythonic de la funcionalidad central, eche un vistazo a la fuente PyPy.

+1

PyPy usa RPython para la mayoría de las cosas incorporadas, que pueden ser casi de bajo nivel como C casi tan alto como Python. Por lo general, está en el medio. En cualquier caso, está tipado estáticamente, por lo que no es realmente Python. – delnan

+0

Vea un proyecto inicial para ver el código fuente de una función incorporada: https://github.com/punchagan/cinspect – Thomas

20

Aquí es una respuesta libro de cocina para complementar la respuesta @ Chris, CPython se ha trasladado a GitHub y el repositorio Mercurial ya no será actualizado:

  1. Instalar Git si es necesario.
  2. git clone https://github.com/python/cpython.git

  3. Código será pago y envío a un subdirectorio llamado cpython ->cd cpython

  4. Digamos que estamos buscando la definición de print() ...
  5. egrep --color=always -R 'print' | less -R
  6. Aha! Ver Python/bltinmodule.c ->builtin_print()

Disfrutar.

4

simplemente puede usar el comando help() para obtener ayuda acerca de funciones incorporadas, así como su código.

por ejemplo: si desea ver el código de str(), simplemente escriba - help(str)

volverá así,

>>> help(str) 
Help on class str in module __builtin__: 

class str(basestring) 
| str(object='') -> string 
| 
| Return a nice string representation of the object. 
| If the argument is a string, the return value is the same object. 
| 
| Method resolution order: 
|  str 
|  basestring 
|  object 
| 
| Methods defined here: 
| 
| __add__(...) 
|  x.__add__(y) <==> x+y 
| 
| __contains__(...) 
|  x.__contains__(y) <==> y in x 
| 
| __eq__(...) 
|  x.__eq__(y) <==> x==y 
| 
| __format__(...) 
|  S.__format__(format_spec) -> string 
| 
|  Return a formatted version of S as described by format_spec. 
| 
| __ge__(...) 
|  x.__ge__(y) <==> x>=y 
| 
| __getattribute__(...) 
-- More -- 
2

enter image description here

tuve que cavar un poco para encontrar la fuente de la siguiente Built-in Functions ya que la búsqueda arrojaría miles de resultados. (Buena suerte buscando a cualquiera de los que encontrar donde está la fuente es)

De todos modos, todas esas funciones se definen en bltinmodule.c Funciones empezar con builtin_{functionname}

incorporado Fuente: https://github.com/python/cpython/blob/master/Python/bltinmodule.c

2

Un recurso bastante desconocido es el Python Developer Guide.

En un (algo) reciente GH issue, se ha agregado un nuevo capítulo para abordar la pregunta que está haciendo: CPython Source Code Layout. Si algo debe cambiar, ese recurso también se actualizará.

Cuestiones relacionadas