いいえ、関数の本体内から関数の docstring を設定することはできません。関数の外部または関数内でコードを実行する必要があります (最初に関数を呼び出す必要があります)。
Python が通常 docstring を設定する方法は、関数スイートの最初の行 (行の下にインデントされたすべてdef
)を取得することです。それが文字列リテラルの場合、スイートからそれを削除し、docstring にします。その後、Python はスイートの残りを関数コード オブジェクトにfunction()
コンパイルし、コンパイルされたコード オブジェクトと docstring (とりわけ) を渡すことによって新しいオブジェクトを作成します。
代わりにたまたま文字列を生成する式を使用すると、その「トリック」は機能しません。python はその式を無視し、コンパイルする関数スイートの一部として残します。関数スイート自体はコンパイルされ実行されないため、コンパイル時に関数オブジェクトで使用される docstring に「手を伸ばして」設定することはできません。
関数のdocstring を動的に設定できる唯一__doc__
の方法は、関数オブジェクトを直接参照し、そのまたはfunc_doc
変数を設定することです (この 2 つはエイリアスです)。確かに、それは関数スイートで行うことができますが、それはかなり無意味です。そうするまで、docstring は間違っています。
モジュールから関数をインポートすると、すでにドキュメント文字列も取得されていることに注意してください。
>>> import itertools
>>> print itertools.groupby.__doc__
groupby(iterable[, keyfunc]) -> create an iterator which returns
(key, sub-iterator) grouped by each value of key(value).
docstring を個別にインポートする必要はありません。