12
votes

Les Doctstrings et les commentaires Python sont-ils stockés dans la mémoire lorsqu'un module est chargé?

sont des doctrings python et des commentaires stockés en mémoire lorsqu'un module est chargé?

Je me suis demandé si cela est vrai, car je documente bien mon code bien; peut-il affecter l'utilisation de la mémoire?

Habituellement, chaque objet Python a une méthode __ . Ces docstrations sont-elles lues dans le fichier ou traitées autrement?

J'ai fait des recherches ici dans les forums, Google et les listes de diffusion, mais je n'ai trouvé aucune information pertinente.

savez-vous mieux?


2 commentaires

Juste pour clarifier, Docstrings ne sont pas des commentaires. Ils sont similaires et servent des objectifs similaires, mais la docstring est en fait un attribut de la fonction / objet, alors que je ne pense pas que les commentaires sont accessibles d'une manière tout-temps autre que la lecture du fichier .py lui-même.


Combien de mémoire la peur qui pourrait utiliser? Plus de 1 octet par caractère? Est-ce que vous programmez une Timex Sinclair 1000?


4 Réponses :


5
votes

Ils sont se lisent dans le fichier (lorsque le fichier est compilé à PYC ou lorsque la PYC est chargée - elles doivent être disponibles sous objet .__ Doc __ ) mais non -> Cela ne fera pas d'impact significatif sur la performance dans une circonstance raisonnable, ou vous écrivez-vous vraiment des chaînes DOC multi-mégaoctets?


1 commentaires

+1 bonne et humoristique réponse et non , je ne écrire des chaînes multi-mégaoctets multi-mégaoctets;)



12
votes

Oui, les docstrations sont lues dans le fichier, mais cela ne devrait pas vous empêcher de les écrire. Jamais jamais compromettre la lisibilité du code pour la performance jusqu'à ce que vous ayez fait un test de performance et que vous avez constaté que la chose qui vous inquiète est en fait le goulot d'étranglement de votre programme qui cause un problème. Je penserais qu'il est extrêmement improbable qu'une doctorante entraîne un impact de performance mesurable dans une situation mondiale réelle.


0 commentaires

25
votes

Par défaut, DOCStrings sont présents dans le fichier .pyc bytecode et sont chargés d'eux (les commentaires ne sont pas). Si vous utilisez python -oo (le drapeau --OOO signifie "optimiser intensément", par opposition à -o qui signifie "optimiser légèrement ), vous obtenez et utilisez des fichiers .pyo au lieu de fichiers .pyc , et ceux-ci sont optimisés en omettant les docstrations (en plus des optimisations effectuées par -o , qui retirez affirmez les instructions ). Par exemple, envisagez un fichier foo.py qui a: xxx

vous auriez pu La session de shell suivante ...: xxx

Notez que, puisque nous avons utilisé -o premier, le .pyo Le fichier était de 327 octets - même après avoir utilisé --OOO , car le fichier .pyo était toujours autour et Python n'a pas reconsuré / écrasé, il a simplement utilisé l'existant . Supprimer le existant .pyo (ou, équivalent, toucher foo.py de sorte que python connaisse le .pyo est "hors de date") signifie que Python la reconstruit (et, dans ce cas, économise 123 octets sur disque, et un peu plus lorsque le module importé - mais tous .__ doc __ Les entrées disparaissent et sont remplacées par Aucun ).


1 commentaires

Au fait, des chaînes autonomes qui ne sont pas des doctorants (pas au sommet de fonctions, de classes ou de modules) génèrent Aucun code à tout niveau d'optimisation. Ils ne sont pas dans les fichiers .pyc ou .pyo. Ils sont vraiment Commentaires multi-lignes .



1
votes

do python docstrings et commentaires sont stocké en mémoire lorsque le module est chargé?

docstrings sont compilés dans le fichier .pyc et sont chargés en mémoire. Les commentaires sont rejetés pendant la compilation et n'ont aucun impact sur quoi que ce soit à l'exception de la durée supplémentaire insignifiante prise pour les ignorer lors de la compilation (ce qui ne se passe une seule fois après tout changement de fichier .PY, à l'exception du script principal qui est re-compilé à chaque fois qu'il est courir).

Notez également que ces chaînes ne sont conservées que si elles sont la chose première dans le module, la définition de la classe ou la définition de la fonction. Vous pouvez inclure des chaînes supplémentaires à peu près n'importe où, mais elles seront jetées pendant la compilation, tout comme les commentaires sont.


0 commentaires