이번주 관심주제

기타

한글 print시 포맷문제

Type Annotation in Python

Python에서 Signature 의 의미

what is the difference … stackoveflow 답변 번역

정보

  • C++에 대한 얘기로 python 상황에서 자료를 찾아볼 필요가 있음

번역

  • 원문 : answer of what is the difference between function declaration and signature?
  • 함수 declaration은 함수의 prototype이다.
    • 또는 그 지점에서 컴파일러가 prototype을 발견하지 못했다면 함수 정의에서 가져 올수도 있다
    • (함수 declarations은) return type, 함수의 이름, 함수의 파라미터(C에서는 선택적임)를 포함한다
  • 함수 signature는 함수 선언의 일부이다.
    • 함수 declaration은 컴파일러가 overload resolution 을 수행하는 데 사용한다.
    • (역자 주) overload resolution ?
      • overload는 함수나 연산자의 이름은 유지하면서 기능을 추가로 부여하는 것을 말함
      • resolution 이란?
        • 변수나 함수의 이름이 하나뿐이라면 찾는게 어렵지 않지만 같은 이름이 scope상에 여럿 보인다면 해석이 필요할 것이다
        • resolution은 binding 되는 이름이 어느 것이 찾아내는 것으로 해석정도로 풀이하면 될것 같다
  • 여러 개의 함수가 같은 이름을 가질 수 있기 때문에 (즉, 오버로드가 될수 있기 때문에)
    • 컴파일러는 함수 후보군중에서 호출할 함수로 해석될( resolve to) 특정 이름을 결정할 방법이 필요하다
    • signature는 그런 overload resolution에서 컴파일러가 consider한 것이다.
  • 특별하게, 표준은 signature를 다음과 같이 정의했다.

    overload resolution에 참여하는 함수에 대한 정보(information): 파라미터의 타입, 함수가 class 멤버라면 함수 자신에 대한 cv-qualifiers (만일 있다면) 그리고 그 멤버함수가 선언된 클래스

  • return type은 함수 signature에 속하지 않는 다는 것에 주의해라.
  • 표준이 각주에서 말하는 것처럼..

    Function signature는 return type을 포함하지 않는다. 그것들이 overload resolution에 참여하지 않기 때문이다.

Function Signautre Object , python.org 에서

번역

Abstract, 메소드

  • Python 은 항상 강력한 introspection 가능성을 지원했다.
    • 그 가능성은 introspecting 함수와 메소드를 포함한다.
    • (이 PEP의 나머지 부분에서 , “function”은 function과 method 둘다를 의미한다)
    • introspection capabilities는 자기 자신을 볼 줄아는 능력인가?
  • function object를 조사함으로써, 당신은 완전하게 function의 signature를 재구축(reconstruct)할 수 있다
  • 불행하게도, 이 정보는 불편한 방식으로 저장되어있다.
    • 그리고 6개의 깊숙히 내포된 attribute로 퍼져 나뉘어져 있다.
  • 이 PEP은 function signature의 새로운 표현방식을 제안한다
  • 새 표현방식은 function과 그의 파라메터에 모든 필요한 정보를 포함하며
    • introspection을 쉽고 간단하게(straightforward) 만들것이다.
  • 하지만, 이 object는 기존의 function metadata를 대체하지는 않는다.
    • (function metadata는) python이 그런 function들을 실행하는데 자체적으로 사용한다.

Signature Object

  • 하나의 Signature 객체는 한 함수의 call signature와 그의 return 어노테이션을 나타낸다.(represent)
  • 그 함수에 입력되는 각 파라메터에 대해,
    • (signature 객체는) 그것의 parameters collection에 Parameter 객체를 저장한다
  • 하나의 Signature 객체는 아래와 같은 public attributes와 메소드를 갖는다.
    • return_annotation: object
      • 함수에 대한 “return” 어노테이션.
      • 함수에 “return” 어노테이션이 없다면, 이 attribute은 Sinature.empty로 설정된다.
    • parameters: OrderedDict
      • 파라메터 객체들에 대응되는 파라메터 이름들의 순서가 고정된(ordered) 매핑
    • bind(*args, **kwargs) -> BoundArguments
      • 위치기반, 키워드기반 arguments로부터 parameters 로의 mapping을 생성함.
      • 넘겨받은 arguments가 signature와 맞지 않으면 TypeError를 냄.
    • bind_partial(*args, **kwargs) -> BoundArguments
      • bind()와 같은 방식으로 일하지만, 일부 요구되는 arguments가 빠지는 것을
  • Signature 객체는 immutable 하다.
    • 변형된 복사 (modified copy)를 만들기 위해서는 Signature.repalce() 를 사용해라

python에서 resolution 이란?

  • resolution의 일반 언어에서의 의미
    • 모니터 해상도 - 화면을 얼마나 촘촘하게 풀어내는가? 풀어내는 정도
    • resove - 해결하다
  • 그럼 python(프로그래밍 언어) 에서 resolution이란?
  • 위의 Resolution of names는 개념적인 설명이 예제도 없이 죽 이어지므로 한 번 읽고 제대로 이해하기가 매우 어렵다.
  • Overload resolution (C++ only, IBM