저는 sphinx 와 autodoc 플러그인을 사용하여 Python 모듈에 대한 API 문서를 생성하고 있습니다. 특정 매개 변수를 잘 문서화하는 방법을 볼 수는 있지만 매개 변수를 문서화하는 방법의 예는 찾을 수 없습니다 **kwargs
.
누구든지 이것을 문서화하는 명확한 방법에 대한 좋은 예가 있습니까?
저는 sphinx 와 autodoc 플러그인을 사용하여 Python 모듈에 대한 API 문서를 생성하고 있습니다. 특정 매개 변수를 잘 문서화하는 방법을 볼 수는 있지만 매개 변수를 문서화하는 방법의 예는 찾을 수 없습니다 **kwargs
.
누구든지 이것을 문서화하는 명확한 방법에 대한 좋은 예가 있습니까?
답변:
subprocess
-module의 문서 가 좋은 예 라고 생각 합니다. 상위 / 상위 클래스에 대한 모든 매개 변수의 전체 목록을 제공합니다 . 그런 다음 다른 모든 항목에 대해 해당 목록을 참조하십시오 **kwargs
.
subprocess.call(*popenargs, **kwargs)
. subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
다음의 모든 것이 *
인식 된 키 **kwargs
(또는 적어도 자주 사용되는 키 )로 문서화되어 있습니다
subprocess.Popen
이며, 더 이상 특히 훌륭한 예라고 확신 할 수 없습니다.
이 질문을 찾은 후 나는 유효한 Sphinx이고 상당히 잘 작동하는 다음 사항을 결정했습니다.
def some_function(first, second="two", **kwargs):
r"""Fetches and returns this thing
:param first:
The first parameter
:type first: ``int``
:param second:
The second parameter
:type second: ``str``
:param \**kwargs:
See below
:Keyword Arguments:
* *extra* (``list``) --
Extra stuff
* *supplement* (``dict``) --
Additional content
"""
는 r"""..."""
이것을 "원시"문서화 문자열을 따라서 유지하기 위해 필요 \*
스핑크스는 리터럴로 데리러 (그대로를*
"강조"의 아닌 시작).
선택한 형식 (괄호로 묶인 유형 및 m- 대시로 구분 된 설명이있는 글 머리 기호 목록)은 단순히 Sphinx에서 제공하는 자동 형식과 일치하는 것입니다.
"키워드 인수"섹션을 기본 "매개 변수"섹션처럼 보이게 만드는 이러한 노력을 한 후에는 처음부터 자체 매개 변수 섹션을 롤링하는 것이 더 쉬울 것 같습니다 (다른 답변에 따라). ,하지만 **kwargs
이미 Sphinx를 사용하고있는 경우 개념 증명으로 보완을위한 멋진 모습을 얻을 수있는 한 가지 방법 입니다.
Sphinx에서 파싱 한 Google 스타일 독 스트링
면책 조항 : 테스트되지 않았습니다.
의이 컷 아웃에서 스핑크스 문서화 문자열의 예 는 *args
과가 **kwargs
남아있는 확장되지 않은 :
def module_level_function(param1, param2=None, *args, **kwargs):
"""
...
Args:
param1 (int): The first parameter.
param2 (Optional[str]): The second parameter. Defaults to None.
Second line of description should be indented.
*args: Variable length argument list.
**kwargs: Arbitrary keyword arguments.
나는 것이 좋습니다 소형화에 대한 다음과 같은 솔루션을 :
"""
Args:
param1 (int): The first parameter.
param2 (Optional[str]): The second parameter. Defaults to None.
Second line of description should be indented.
*param3 (int): description
*param4 (str):
...
**key1 (int): description
**key2 (int): description
...
공지 방법, Optional
필요하지 않습니다 **key
인수.
그렇지 않으면 , 당신은 명시 적으로 아래 * 인수를 나열 시도 할 수 Other Parameters
와 **kwargs
아래 Keyword Args
(구문 분석 참조 섹션 ) :
"""
Args:
param1 (int): The first parameter.
param2 (Optional[str]): The second parameter. Defaults to None.
Second line of description should be indented.
Other Parameters:
param3 (int): description
param4 (str):
...
Keyword Args:
key1 (int): description
key2 (int): description
...
있습니다 doctstring 예 해당 설명서에서 스핑크스에 대한이. 특히 그들은 다음을 보여줍니다.
def public_fn_with_googley_docstring(name, state=None):
"""This function does something.
Args:
name (str): The name to use.
Kwargs:
state (bool): Current state to be in.
Returns:
int. The return code::
0 -- Success!
1 -- No good.
2 -- Try again.
Raises:
AttributeError, KeyError
A really great idea. A way you might use me is
>>> print public_fn_with_googley_docstring(name='foo', state=None)
0
BTW, this always returns 0. **NEVER** use with :class:`MyPublicClass`.
"""
return 0
질문했지만 스핑크스명시 적으로 Google Python 스타일 가이드를 가리킬 것 입니다. 그들의 독 스트링 예는 그들이 kwargs를 구체적으로 부르지 않는다는 것을 암시하는 것 같습니다. (other_silly_variable = 없음)
def fetch_bigtable_rows(big_table, keys, other_silly_variable=None):
"""Fetches rows from a Bigtable.
Retrieves rows pertaining to the given keys from the Table instance
represented by big_table. Silly things may happen if
other_silly_variable is not None.
Args:
big_table: An open Bigtable Table instance.
keys: A sequence of strings representing the key of each table row
to fetch.
other_silly_variable: Another optional variable, that has a much
longer name than the other args, and which does nothing.
Returns:
A dict mapping keys to the corresponding table row data
fetched. Each row is represented as a tuple of strings. For
example:
{'Serak': ('Rigel VII', 'Preparer'),
'Zim': ('Irk', 'Invader'),
'Lrrr': ('Omicron Persei 8', 'Emperor')}
If a key from the keys argument is missing from the dictionary,
then that row was not found in the table.
Raises:
IOError: An error occurred accessing the bigtable.Table object.
"""
pass
ABB는 하위 프로세스 관리 문서를 참조하는 데 허용되는 답변에 대해 질문이 있습니다. 모듈을 가져 오면 inspect.getsource를 통해 모듈 독 스트링을 빠르게 볼 수 있습니다.
Silent Ghost의 권장 사항을 사용하는 파이썬 인터프리터의 예 :
>>> import subprocess
>>> import inspect
>>> import print inspect.getsource(subprocess)
물론 도움말 기능을 통해 모듈 문서를 볼 수도 있습니다. 예를 들어 help (subprocess)
개인적으로 kwargs에 대한 하위 프로세스 독 스트링의 팬은 아니지만 Google 예제와 마찬가지로 Sphinx 문서 예제에 표시된대로 kwargs를 별도로 나열하지 않습니다.
def call(*popenargs, **kwargs):
"""Run command with arguments. Wait for command to complete, then
return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
return Popen(*popenargs, **kwargs).wait()
ABB의 질문에 대한이 답변을 포함하고 있습니다. 코드에 주석을 달기위한 통찰력과 영감을 얻기 위해 이러한 방식으로 모든 모듈의 소스 또는 문서를 검토 할 수 있다는 점에 주목할 가치가 있기 때문입니다.
other_silly_variable
kwargs 인수는 아니지만 완전히 정상적인 인수입니다.
다른 사람이 유효한 구문을 찾고 있다면 .. 여기에 docstring의 예가 있습니다. 이것이 내가 한 방법입니다. 유용하기를 바라지 만, 특별히 어떤 것과도 호환된다고 주장 할 수 없습니다.
def bar(x=True, y=False):
"""
Just some silly bar function.
:Parameters:
- `x` (`bool`) - dummy description for x
- `y` (`string`) - dummy description for y
:return: (`string`) concatenation of x and y.
"""
return str(x) + y
def foo (a, b, **kwargs):
"""
Do foo on a, b and some other objects.
:Parameters:
- `a` (`int`) - A number.
- `b` (`int`, `string`) - Another number, or maybe a string.
- `\**kwargs` - remaining keyword arguments are passed to `bar`
:return: Success
:rtype: `bool`
"""
return len(str(a) + str(b) + bar(**kwargs)) > 20
이 사용 설명서의 스타일에 따라 다르지만 당신이 사용하는 경우 numpydoc의 스타일을 그것을 문서화하는 것이 좋습니다되어 **kwargs
사용 Other Parameters
.
예를 들어 quornian의 예를 따르십시오.
def some_function(first, second="two", **kwargs):
"""Fetches and returns this thing
Parameters
----------
first : `int`
The first parameter
second : `str`, optional
The second parameter
Other Parameters
----------------
extra : `list`, optional
Extra stuff. Default ``[]``.
suplement : `dict`, optional
Additional content. Default ``{'key' : 42}``.
"""
특히 함수 시그니처에서 명확하지 않기 때문에 kwargs의 기본값을 제공하는 것이 좋습니다.
numpydoc 스타일 로이 작업을 수행하는 방법을 찾고 있다면 유형을 지정하지 않고 매개 변수 섹션에서 간단히 언급**kwargs
할 수 있습니다 -pandas 문서 스프린트 2018 의 스핑크스 확장 napolean 및 docstring 가이드 의 numpydoc 예제 에서 설명 된 대로 .
다음은 LSST 개발자 가이드 에서 찾은 예 입니다. 매개 변수에 대한 설명이 무엇인지 잘 설명합니다 **kwargs
.
def demoFunction(namedArg, *args, flag=False, **kwargs):
"""Demonstrate documentation for additional keyword and
positional arguments.
Parameters
----------
namedArg : `str`
A named argument that is documented like always.
*args : `str`
Additional names.
Notice how the type is singular since the user is expected to pass individual
`str` arguments, even though the function itself sees ``args`` as an iterable
of `str` objects).
flag : `bool`
A regular keyword argument.
**kwargs
Additional keyword arguments passed to `otherApi`.
Usually kwargs are used to pass parameters to other functions and
methods. If that is the case, be sure to mention (and link) the
API or APIs that receive the keyword arguments.
If kwargs are being used to generate a `dict`, use the description to
document the use of the keys and the types of the values.
"""
또는 @Jonas Adler가 제안한 것을 기반 으로 섹션에 및 설명 을 넣는**kwargs
Other Parameters
것이 더 낫다는 것을 알았 습니다. matplotlib 문서 가이드 의이 예제 에서도 동일하게 제안합니다.