2010-02-03 4 views
11
D.R.Y. D.R.Y.

스핑크스에서는 선언과 함께 매개 변수를 문서화하는 방법이 있습니까?

를 적용하기 위해 매개 변수를 선언하는 동일한 줄에 각 매개 변수를 문서화하는 것을 선호합니다. 다음과 같은 코드가있는 경우 :

def foo(
     flab_nickers, # a series of under garments to process 
     has_polka_dots=False, 
     needs_pressing=False # Whether the list of garments should all be pressed 
    ): 
    ... 

매개 변수를 doc 문자열에 저장하고 매개 변수 설명을 유지 하시겠습니까?

피하고 싶습니다 :

def foo(
     flab_nickers, # a series of under garments to process 
     has_polka_dots=False, 
     needs_pressing=False # Whether the list of garments should all be pressed 
    ): 
    '''Foo does whatever. 

    * flab_nickers - a series of under garments to process 
    * needs_pressing - Whether the list of garments should all be pressed. 
     [Default False.] 

파이썬 2.6이나 파이썬 3에서 가능한 일종의 데코레이터 조작입니까? 다른 방법이 있습니까?

+0

RST가 충분히 깨끗하다면 (스핑크스의'param'은 실제로 도움이되지 않습니다.) 함수 정의를 살펴보고 docstring으로 내려가는 것이 쉬워야합니다. 나는 기본 스핑크스 스타일 ('param's)을 사용하지 않고 코드에서 훨씬 더 * 잘 보이고 렌더링되었을 때 여전히 괜찮은 Google 스타일로 간다. ([이 질문] (http://stackoverflow.com/a)/11176267/194586)은 두 가지 장점을 모두 누리는 것에 대해 이야기합니다. –

답변

8

나는 이것을 할 것이다.

이 코드로 시작하십시오.

def foo(
     flab_nickers, # a series of under garments to process 
     has_polka_dots=False, 
     needs_pressing=False # Whether the list of garments should all be pressed 
    ): 
    ... 
내가 함수 매개 변수 정의를 잡고 빌드 파서를 작성합니다

는 다음 다양한 인수 문자열 패턴의 꽤 솔직 정규식 처리의

def foo(
     flab_nickers, 
     has_polka_dots=False, 
     needs_pressing=False, 
    ): 
    """foo 

    :param flab_nickers: a series of under garments to process 
    :type flab_nickers: list or tuple 
    :param has_polka_dots: default False 
    :type has_polka_dots: bool 
    :param needs_pressing: default False, Whether the list of garments should all be pressed 
    :type needs_pressing: bool 
    """ 
    ... 

문서 템플릿을 작성하는 .

많은 Python IDE (예 : PyCharm)는 기본 Sphinx param 표기법을 이해하고 심지어 IDE에서 선언 된 유형을 준수하지 않는다고 생각하는 범위의 vars/메소드를 플래그 지정합니다.

코드에 쉼표가 추가되어 있습니다. 그것은 단지 일을 일관되게 만드는 것입니다. 그것은 해를 끼치 지 않으며 미래에 사물을 단순화 할 수도 있습니다.

파이썬 컴파일러를 사용하여 구문 분석 트리를 가져 와서 수정하고 업데이트 코드를 내보낼 수도 있습니다. 나는 다른 언어 (파이썬이 아님)에 대해이 작업을 수행 했으므로 조금 알고 있지만 파이썬에서 얼마나 잘 지원되는지 모르겠다.

또한 일회성 변환입니다.

함수 정의에있는 원래의 인라인 주석은 비공식적 인 언어로 주석이며 가장 정교한 도구 이외에는 사용할 수 없으므로 DRY를 실제로 따르지 않습니다.

Sphinx 주석은 RST 마크 업 언어이므로 DRY에 더 가깝기 때문에 일반 텍스트 구문 분석 도구 docutils을 사용하여 처리하기가 훨씬 쉬워졌습니다.

도구가 그것을 사용할 수있는 경우에만 건조합니다.

유용한 링크 : https://pythonhosted.org/an_example_pypi_project/sphinx.html#function-definitions http://sphinx-doc.org/domains.html#id1

+2

[ 'an_example_pypi_project'에 대한 Python 문서] (http://packages.python.org/an_example_pypi_project/sphinx.html#full-code-example)에는 Sphinx docstring 서식 옵션이 나와 있습니다. –

+0

아니요, 해당 문서의 주석이 작동하지 않습니다. "Args : name (str) : 사용할 이름입니다." – MeaCulpa

1

당신은 전처리없이, 의견 파이썬 존재하지 않는 소스가 컴파일되고 나면 그렇게 할 수 없습니다. 반복하지 않으려면 주석을 제거하고 docstring에서만 매개 변수를 문서화하십시오. 이것은 인수를 문서화하는 표준 방법입니다.

+0

어쩌면 나쁜 습관 일지 모르지만 최상위 모듈의 매개 변수 목록에 100 개의 매개 변수가있는 Verilog (하드웨어 디자인 언어)를 사용한 후 인라인 설명서의 취향을 얻었습니다. 따라서 Verilog 매개 변수 문서를 실제 매개 변수 문서 행에서 제외하면 100 줄로 구분할 수 있습니다. 이는 유지 관리가 불가능합니다. –

+0

그리고이 최상위 레벨의 verilog 모듈에는이 파일을 수정하는 사람들이 많이 있기 때문에 좋은 시민이되는 사람들에게 의존 할 수 없습니다. 어쨌든, 당신이 옳을 수도 있습니다. 그것은 둥근 구멍에 사각형의 못일 수 있습니다. –

+0

@ 로스 로저스 (Ross Rogers) : 스핑크스는 당신을 위해 나쁜 시민을 식별 할 것입니다. : param name :이 실제 인수와 일치하지 않으면 경고 메시지가 나타납니다. –

5

주석이 부분적으로 파이썬 3에서 이러한 문제를 해결하기위한 것입니다 :

http://www.python.org/dev/peps/pep-3107/

잘 모르겠어요 아직 스핑크스 이러한 적용에 어떤 일이 있었는지.

+0

오늘 스핑크스 코드를 살펴본 결과, 스핑크스가 적어도 반환 주석을 지원한다는 것을 확인할 수있었습니다. 매개 변수 유형 주석은 거기에 일종의 있지만 지금은 거의 초보적인 것처럼 보입니다. – obskyr

관련 문제