2021년 31주차 기록
2021.08.02
docstring python-module-unicodedata southeast-asian-languages type-annotation
08/02 (월) ~ 08/08 (일)
이번주 관심주제
기타
- #docstring
- 2021-08-05 : Docstrings in Python
- 2021-08-05 : 현재 클래스의 이름 얻기
- 2021-08-05 : How to call a function by its name as a string in Python, kite
한글 print시 포맷문제
- #python-module-unicodedata #southeast-asian-languages
- 2021-08-05 : 파이썬으로 한글 print format 설정 시 padding이 잘 맞지 않을 때
- 2021-08-05 : python print 한글 고정폭, egloos.zum.com/nitraqu
- 2021-08-05 : unicodedata.east_asian_width() Example, programcreek.com
- 2021-08-05 : EAST ASIAN WIDTH, unicode.org/Technical Reports
Type Annotation in Python
- #type-annotation
- function 타입이 없는 줄 알았는데
types
를 import 해야하는 것이였음- 2021-08-05 : types.FunctionType, python.org
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 되는 이름이 어느 것이 찾아내는 것으로
해석
정도로 풀이하면 될것 같다
- 변수나 함수의 이름이 하나뿐이라면 찾는게 어렵지 않지만 같은 이름이 scope상에 여럿 보인다면
- 여러 개의 함수가 같은 이름을 가질 수 있기 때문에 (즉, 오버로드가 될수 있기 때문에)
- 컴파일러는 함수 후보군중에서 호출할 함수로 해석될( 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가 빠지는 것을
-
- return_annotation: object
- Signature 객체는 immutable 하다.
- 변형된 복사 (modified copy)를 만들기 위해서는 Signature.repalce() 를 사용해라
python에서 resolution 이란?
- resolution의 일반 언어에서의 의미
- 모니터 해상도 - 화면을 얼마나 촘촘하게 풀어내는가? 풀어내는 정도
- resove - 해결하다
- 그럼 python(프로그래밍 언어) 에서 resolution이란?
- 4.2.2 Resolution of names , - python.org > Reference
- 해당 문서의 한글 해석에서는
resolution
을검색
으로 해석 - 나의 의견은
해석
이 더 맞지않나 생각됨.- 변수이름이 주어졌을 때 이 이름이 어느 namespace로 연결되는지
검색
보다는해석
하는게 더 어울리는 듯
- 변수이름이 주어졌을 때 이 이름이 어느 namespace로 연결되는지
- 위의
Resolution of names
는 개념적인 설명이 예제도 없이 죽 이어지므로 한 번 읽고 제대로 이해하기가 매우 어렵다.- 파이썬 답게 코딩하기 1장 에서 이 내용의 일부에 대해 1장에서 14 페이지 정도에 걸쳐서 예제를 들어 자세히 설명하고 있다.
- 위 내용 관련한 stackoverflow 질문
- Overload resolution (C++ only, IBM