私はsphinx.ext.autodocでGoogleスタイルのドキュメントストリングを使用して、自分の関数のドキュメントを自動的に生成し、コード内に正しく文書化されていることを確認します。同じ関数で異なる引数の可能性を文書化する
私はid
またはsize + hash
に基づいて情報を返す関数def myfunc(id=None, size=None, hash=None)
を持っています。引数としてid
がある場合、size
とhash
は必要ありません。引数としてsize
とhash
がある場合、id
は必要ありません。
sphinxでは、オプションの引数を指定することはできますが、この場合、必須となるものとオプションのものは分かりません。ここでは例です:
def get_file(id=0, size=0, hash="")
"""
Get file metadata.
Args:
id (int): id of the file.
size (int): file size in bytes.
hash (str): md5 hash of file.
Returns:
file_data (str): metadata information about the file.
"""
if id:
# Get file with id.
...
elif size and hash:
# Get file with size and hash.
...
else:
# Bad arguments, handle error.
...
return file_data
質問です:のdocstringに必要なものを引数伝えるためにどのように?
あなたは関数自体は、両方の引数のペアは、結果は同じであっても、別の関数でなければならないこと、問題であることを簡単に主張することができます:
def get_file_by_id(id)
"""
Get file metadata from id.
Args:
id (int): id of the file.
Returns:
file_data (str): metadata information about the file.
"""
# Get file with id.
...
return file_data
def get_file_by_hash(size, hash)
"""
Get file metadata from hash.
Args:
size (int): file size in bytes.
hash (str): md5 hash of file.
Returns:
file_data (str): metadata information about the file.
"""
# Get file with hash+size.
...
return file_data
しかし、この場合には、単一の関数は次のようになりますできるだけ優先されるのは、関数が単一の関数を使用する別のAPIへのバインディングであるためです。
これは引数がオプションかどうかを示しますが、私の場合はこの例に当てはまる場合、** param2 **を使用すると** param1 **はオプションになります。 – toucanb
使い方はちょっと難しいです。オプションのパラメータを取る関数を設計しているならば、それはちょうど* that *であると理解されます。それらの引数のペアをまとめて指定する必要がある場合は、それらを名前付きタプルまたはその他の有益な構造にまとめることができます。それはおそらくより良い設計オプションでしょう。 – idjaw
個人的には、わかりやすく明確にするために機能を分けるべきだと思います。また、文書を簡単に書くことができます。 – idjaw