함수 반환 유형 및 인수 유형을 아는 방법?
나는 파이썬의 덕 타이핑 개념을 알고 있지만 때때로 함수의 인수 유형이나 함수의 반환 값 유형으로 어려움을 겪습니다.
이제 내가 직접 함수를 작성했다면 유형을 알 수 있습니다. 하지만 누군가 내 함수를 사용하고 호출하기를 원하면 어떻게 유형을 알 수 있을까요? 일반적으로 함수의 독 스트링에 유형 정보를 넣습니다 (예 : "...the id argument should be an integer..."
and "... 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
네, 그렇습니다.
In Python a function doesn't always have to return a variable of the same type (although your code will be more readable if your functions do always return the same type). That means that you can't specify a single return type for the function.
In the same way, the parameters don't always have to be the same type too.
Yes, since it's a dynamically type language ;)
Read this for reference: PEP 257
For example: how to describe concisely in a docstring that a function returns a list of tuples, with each tuple of the form (node_id, node_name, uptime_minutes) and that the elements are respectively a string, string and integer?
Um... There is no "concise" description of this. It's complex. You've designed it to be complex. And it requires complex documentation in the docstring.
Sorry, but complexity is -- well -- complex.
Docstrings (and documentation in general). Python 3 introduces (optional) function annotations, as described in PEP 3107 (but don't leave out docstrings)
I have worked in Python a lot, so it is not just a shallow answer; Please use a statically typed language like Go or TypeScript for production use. It is a coding horror trying to figure out types in any slightly complex applications with dynamically typed languages
참고URL : https://stackoverflow.com/questions/5336320/how-to-know-function-return-type-and-argument-types
'IT Share you' 카테고리의 다른 글
Excel에서 특정 워크 시트를 활성화하는 방법은 무엇입니까? (0) | 2020.12.04 |
---|---|
iPhone 부드러운 스케치 그리기 알고리즘 (0) | 2020.12.04 |
FormsAuthentication 쿠키 이름을 변경할 수 있습니까? (0) | 2020.12.04 |
커밋 후 SVN 패치 생성 (0) | 2020.12.04 |
실제 h1 대신 .h1을 사용하는 이유는 무엇입니까? (0) | 2020.12.04 |