Je suis venu ici à la recherche d'un simple 1-liner pour supprimer ou corriger l'identation niveau de la docstring pour l'impression, sans en faire désordre, par exemple en le rendant accrocher à l'extérieur de la fonction" dans le script.
Voici ce que j'ai fait:
import string
def myfunction():
"""
line 1 of docstring
line 2 of docstring
line 3 of docstring"""
print str(string.replace(myfunction.__doc__,'\n\t','\n'))[1:]
Évidemment, si vous êtes à la mise en retrait avec des espaces (par exemple, 4) plutôt que la touche de tabulation utiliser quelque chose comme ceci à la place:
print str(string.replace(myfunction.__doc__,'\n ','\n'))[1:]
Et vous n'avez pas besoin de supprimer le premier personnage si vous le souhaitez votre docstrings ressembler à ceci à la place:
"""line 1 of docstring
line 2 of docstring
line 3 of docstring"""
print string.replace(myfunction.__doc__,'\n\t','\n')
6 votes
Les chaînes de documents sont traitées spécialement Le texte de la première ligne est supprimé ; le plus petit retrait commun à toutes les autres lignes non vides est supprimé de toutes les lignes. À part cela, les chaînes littérales multilignes en Python sont malheureusement ce que vous voyez est ce que vous obtenez en termes d'espace blanc : tous les caractères entre les délimiteurs de la chaîne font partie de la chaîne, y compris l'indentation qui, avec les instincts de lecture de Python, semble devoir être mesurée à partir de l'indentation de la ligne où commence le littéral.
3 votes
@EvgeniSergeev L'outil de traitement effectue cette tâche (et cela dépend largement de votre choix d'outil de traitement).
method.__doc__
n'est pas modifiée par Python lui-même, pas plus que n'importe quelle autre méthode.str
littérale.