[Python]Removal of Tuple Parameter Unpacking

dj-yang·2021년 7월 13일
0

python

목록 보기
3/4
post-thumbnail

서론

책에서 추천해주는 링크를 읽어보려고 들어간 곳에서 멘탈이 나갔다..


파이썬 3버전부터 함수 매개 변수에서 사용할 수 있었던 언패킹이 불가능해졌다.

def fxn(a, (b, c), d):
    pass

위와 같은 방식으로 기존에 가능했다면 앞으로 사용하려면 아래와 같은 방법을 사용해야 한다.

def fxn(a, b_c, d):
    b, c = b_c
    pass

직접적으로 파이썬 코드를 사용하는 사람에 입장에서는 크게 달라지는 부분은 없다.
왜 이같이 변경되었는 지에 대한 설명은 pip-3113에 나와있다.

정리

다양한 근거를 제시하며 변경의 당위성을 알렸는데 이해한 부분은 다음과 같다.

  1. 변경되어도 사실 개발하는 입장에서는 크게 변하는 부분이 없다.
  2. 실제 기존 방식과 같이 사용되는 코드는 조사 당시 40/20,000 개의 확률 정도였다.(굉장히 적게 사용한다.)

추가로 파이썬 바이트 코드에 대한 부분에 대해서 언급했는데 이 부분은 아직도 잘 모르겠다.

In order to get all of the details about the tuple from the function one must analyse the bytecode of the function. This is because the first bytecode in the function literally translates into the tuple argument being unpacked. Assuming the tuple parameter is named .1 and is expected to unpack to variables spam and monty (meaning it is the tuple (spam, monty)), the first bytecode in the function will be for the statement spam, monty = .1. This means that to know all of the details of the tuple parameter one must look at the initial bytecode of the function to detect tuple unpacking for parameters formatted as .\d+ and deduce any and all information about the expected argument. Bytecode analysis is how the inspect.getargspec function is able to provide information on tuple parameters. This is not easy to do and is burdensome on introspection tools as they must know how Python bytecode works (an otherwise unneeded burden as all other types of parameters do not require knowledge of Python bytecode).

이해 안되는 부분은 빨간색으로 강조해놓았다.

개인적으로 저 내용에 대해 추론해본 내용은 파이썬에서는 함수를 초기화할 때 메모리를 차지하게 되는데, 만약 매개 변수 중에 언패킹 상태인 것이 존재한다면 해당 언패킹의 데이터가 메모리의 첫 번째 바이트를 차지하게 된다는 내용인 것 같다...

나중에 시간 날 때 조금 더 자세히 봐야할텐데 시간이 날 지 모르겠다..

고찰

역시 영어공부가 필요하다

profile
비전공자가 고통받으며 개발합니다

0개의 댓글