나는 파이썬의 덕 타이핑 개념을 알고 있지만 때때로 함수의 인수 유형이나 함수의 반환 값 유형으로 어려움을 겪습니다.
이제 내가 직접 함수를 작성하면 유형을 알 수 있습니다. 하지만 누군가 내 함수를 사용하고 호출하기를 원하면 어떻게 유형을 알 수 있을까요? 일반적으로 함수의 독 스트링에 유형 정보를 넣습니다 (예 : "...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) 형식의 각 튜플과 요소가 각각 문자열, 문자열 및 정수라는 것을 독 스트링에서 간결하게 설명하는 방법은 무엇입니까?
음 … 이것에 대한 “간결한”설명은 없습니다. 복잡합니다. 당신은 그것을 복잡하게 설계했습니다. 그리고 독 스트링에 복잡한 문서가 필요합니다.
미안하지만 복잡성은-음-복잡합니다.