[python] 함수 반환 유형 및 인수 유형을 아는 방법?

나는 파이썬의 덕 타이핑 개념을 알고 있지만 때때로 함수의 인수 유형이나 함수의 반환 값 유형으로 어려움을 겪습니다.

이제 내가 직접 함수를 작성하면 유형을 알 수 있습니다. 하지만 누군가 내 함수를 사용하고 호출하기를 원하면 어떻게 유형을 알 수 있을까요? 일반적으로 함수의 독 스트링에 유형 정보를 넣습니다 (예 : "...the id argument should be an integer...""... the function will return a (string, [integer]) tuple.")

그러나 독 스트링에서 정보를 찾고 (그리고 코더로서 거기에 넣는) 실제로 그것이 수행되어야하는 방식입니까?

편집 : 대부분의 답변은 “예, 문서화!”로 향하는 것 같습니다. 나는 이것이 ‘복잡한’유형에 대해 항상 매우 쉬운 것은 아니라고 생각합니다.
예 : 함수가 튜플 목록을 반환하고 각 튜플 (node_id, node_name, uptime_minutes) 형식의 각 튜플과 요소가 각각 문자열, 문자열 및 정수라는 것을 독 스트링에서 간결하게 설명하는 방법 은 무엇입니까?
독 스트링 PEP 문서는 이에 대한 지침을 제공하지 않습니다.
반론은이 경우 클래스를 사용해야한다는 것입니다.하지만 파이썬은 목록과 튜플을 사용하여, 즉 클래스 없이 이러한 것들을 전달할 수 있기 때문에 매우 유연합니다 .



답변

2011 년 이후로 상황이 조금 바뀌 었습니다! 이제 Python 3.5에는 인수에 주석을 달고 함수의 유형을 반환하는 데 사용할 수있는 유형 힌트 가 있습니다. 예를 들면 다음과 같습니다.

def greeting(name):
  return 'Hello, {}'.format(name)

이제 다음과 같이 작성할 수 있습니다.

def greeting(name: str) -> str:
  return 'Hello, {}'.format(name)

이제 유형을 볼 수 있듯이 사용자와 유형 검사기가 코드를 조사하는 데 도움이되는 일종의 선택적 정적 유형 검사가 있습니다.

자세한 설명은 PyCharm 블로그의 유형 힌트에 대한 블로그 게시물을 참조하십시오 .


답변

이것이 동적 언어가 작동하는 방식입니다. 그래도 항상 좋은 것은 아닙니다. 특히 문서가 좋지 않은 경우-누구든지 잘못 문서화 된 파이썬 프레임 워크를 사용하려고 했습니까? 때때로 당신은 소스를 읽는 것으로 되돌아 가야합니다.

다음은 덕 타이핑 문제를 방지하는 몇 가지 전략입니다.

  • 문제 도메인에 대한 언어 생성
  • 이름을 올바르게 지정하는 데 도움이됩니다.
  • 유형을 사용하여 도메인 언어로 개념을 나타냅니다.
  • 도메인 언어 어휘를 사용하여 이름 함수 매개 변수

또한 가장 중요한 사항 중 하나 :

  • 데이터를 가능한 한 로컬로 유지하십시오!

잘 정의되고 문서화 된 몇 가지 유형 만 전달되어야합니다. 코드를 살펴보면 다른 것은 분명해야합니다. 코드 주변을 살펴보면 알아낼 수없는 이상한 매개 변수 유형이 멀리서 나오지 마십시오.

관련 (또한 독 스트링과 관련이 있음), 파이썬에는 doctests. 이를 사용하여 방법이 어떻게 사용될 것으로 예상되는지 문서화하고 동시에 멋진 단위 테스트 범위를 갖습니다!


답변

예, 클래스와 함수를 다른 프로그래머에게 더 친숙하게 만들려면 독 스트링을 사용해야합니다.

더보기 : http://www.python.org/dev/peps/pep-0257/#what-is-a-docstring

일부 편집기에서는 입력하는 동안 독 스트링을 볼 수 있으므로 작업이 더 쉬워집니다.


답변

나는 Coursera 과정에 참석했고, 그 과정에서 디자인 레시피에 대해 배웠습니다.

docstring 형식 아래에서 preety가 유용하다는 것을 알았습니다.

정의 영역 (베이스, 높이) :
    '' '(숫자, 숫자)-> 숫자 # ** TypeContract **
    치수가 # ** Description ** 인 트링 영역을 반환합니다.
    그리고 높이

    >>> area (10,5) # ** 예제 **
    25.0
    >> 면적 (2.5,3)
    3.75
    '' '
    리턴 (베이스 * 높이) / 2

이런 식으로 독 스트링을 작성하면 개발자에게 많은 도움이 될 것 같습니다.

동영상 링크 [동영상보기] : https://www.youtube.com/watch?v=QAPg6Vb_LgI


답변

네, 그렇습니다.

Python에서 함수가 항상 동일한 유형의 변수를 반환 할 필요는 없습니다 (함수가 항상 동일한 유형을 반환하면 코드를 더 읽기 쉽게). 즉, 함수에 대해 단일 반환 유형을 지정할 수 없습니다.

같은 방식으로 매개 변수도 항상 같은 유형일 필요는 없습니다.


답변

예 : 함수가 튜플 목록을 반환하고 각 튜플 (node_id, node_name, uptime_minutes) 형식의 각 튜플과 요소가 각각 문자열, 문자열 및 정수라는 것을 독 스트링에서 간결하게 설명하는 방법은 무엇입니까?

음 … 이것에 대한 “간결한”설명은 없습니다. 복잡합니다. 당신은 그것을 복잡하게 설계했습니다. 그리고 독 스트링에 복잡한 문서가 필요합니다.

미안하지만 복잡성은-음-복잡합니다.


답변

예, 동적 유형 언어이기 때문에;)

참조 용으로 읽어보십시오 : PEP 257