De forma predeterminada, las cadenas de documentos están presentes en el archivo de códigos de bytes .pyc
, y se cargan desde ellas (los comentarios no son). Si usa python -OO
(la bandera -OO
significa "optimizar intensamente", en oposición a -O
que significa "optimizar levemente", obtiene y usa archivos .pyo
en lugar de .pyc
, y estos se optimizan al omitir los documentos (además de . optimizaciones realizadas por los -O
, que eliminan assert
declaraciones), por ejemplo, consideran un archivo que tiene foo.py
:
"""This is the documentation for my module foo."""
def bar(x):
"""This is the documentation for my function foo.bar."""
return x + 1
usted podría tener la siguiente sesión de shell ...:
$ python -c'import foo; print foo.bar(22); print foo.__doc__'
23
This is the documentation for my module foo.
$ ls -l foo.pyc
-rw-r--r-- 1 aleax eng 327 Dec 30 16:17 foo.pyc
$ python -O -c'import foo; print foo.bar(22); print foo.__doc__'
23
This is the documentation for my module foo.
$ ls -l foo.pyo
-rw-r--r-- 1 aleax eng 327 Dec 30 16:17 foo.pyo
$ python -OO -c'import foo; print foo.bar(22); print foo.__doc__'
23
This is the documentation for my module foo.
$ ls -l foo.pyo
-rw-r--r-- 1 aleax eng 327 Dec 30 16:17 foo.pyo
$ rm foo.pyo
$ python -OO -c'import foo; print foo.bar(22); print foo.__doc__'
23
None
$ ls -l foo.pyo
-rw-r--r-- 1 aleax eng 204 Dec 30 16:17 foo.pyo
Tenga en cuenta que, dado que usamos -O
primero, el archivo .pyo
tenía 327 bytes, incluso después de usar -OO
, porque el archivo .pyo
todavía estaba presente y Python no lo reconstruyó/sobreescribió, simplemente usó el existente. Eliminar el existente .pyo
(o, equivalentemente, touch foo.py
para que Python sepa que el .pyo
está "desactualizado") significa que Python lo reconstruye (y, en este caso, guarda 123 bytes en el disco, y un poco más cuando el módulo se importó - pero todas las entradas .__doc__
desaparecen y son reemplazadas por None
).
Solo para aclarar, los docstrings no son comentarios. Son similares, y sirven para propósitos similares, pero la docstring es en realidad un atributo de la función/objeto, mientras que no creo que los comentarios sean accesibles de ninguna otra manera que no sea la lectura real del archivo .py. – MatrixFrog
¿Cuánta memoria teme que pueda usarse? ¿Más de 1 byte por personaje? ¿Estás programando un Timex Sinclair 1000? –