6월 4일에는 Python 3.8.0b1이, 7월 4일에는 두 번째 베타 버전인 Python 3.8.0b2가 릴리즈됐다. 이는 Python 3.8이 feature complete하게 되었다는 것을 의미한다. 정식 릴리즈가 10월에 이뤄질텐데, 그 전에 이 베타 버전을 통해 Python 3.8의 새로운 기능들을 살펴보자. 이해하기 쉽고 headline이라고 볼 수 있는 변경 사항들만 언급할테니, 외의 내용들은 파이썬 공식 문서를 읽어보기 바란다.
Assignment Expression
이라는 이름으로 PEP 572에 소개된 walrus operator
개념이 포함되었다. NAME := expr
이라는 표기법을 사용하여 변수 할당을 할 수 있게 만드는 것이다. condition capturing
이라는 어휘로 이해하면 될 것 같다.
이는 if statement의 entry point 레벨에서, 해당 block scope에 대한 변수를 정의할 때 사용할 수 있다.
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
그리고 while statement에서 iteration마다의 변수 할당에 사용할 수 있다. 이는 디테일한 iteration을 구현할 때 매우 많은 도움이 된다. 예를 들어 파일의 내용을 순서대로 16바이트씩 읽어 처리하는 모종의 스크립트를 작성한다고 하면, Python 3.8은 walrus operator 덕분에 더 간결하고 깔끔해 진다.
f = open('...')
while chunk := f.read(16):
...
comprehension에서도 사용할 수 있다. 위에서도 말했듯 condition capturing
이라는 어휘로 이해하자.
def f(x):
...
results = [(x, y, x/y) for x in input_data if (y := f(x)) > 0]
응용한다고 쳤을 때, 대화형 CLI 어플리케이션이나 socket 관련 어플리케이션을 만들 때 사용할 수도 있겠다.
while (command := input("> ")) != "quit":
print(f"You entered: {command}")
while data := sock.recv(8192):
print(f"Received data: {data}")
타이틀만 봤을 땐 fstring이 디버깅 관련 문제가 있어서 이걸 개선했겠거니 싶었는데, fstring에 대한 문법이 추가된 것이었다. 바로 =
specifier다. f'{expr=}'
식으로 작성된 섹션은, 해당 표현식 그대로의 텍스트와, 평가된 표현식의 순서대로 문자열이 된다.
x = 3
print(f'{x=}') # x=3
print(f'{x*3=}') # x*3=9
print(f'{x * 9 + 15 = }') # x * 9 + 15 = 42
예제에도 포함되어 있듯이, expression에 들어 있는 공백이 보존되기 때문에 매우 유용하다.
keyword-only parameter를 위해 *
specifier가 지원되고 있었는데, Python 3.8에서는 positional-only parameter 개념이 생겨나며 함수에 /
specifier가 새로이 지원된다. PEP 570에 이 내용이 명시되어 있으며, 따라서 Python 3.8부터는 파라미터를 positional-only
, positional-or-keyword
, keyword-only
로 나누어야 한다.
def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
----------- ---------- ----------
| | |
| Positional or keyword |
| - Keyword only
-- Positional only
6월 4일에는 Python 3.8.0b1이, 7월 4일에는 두 번째 베타 버전인 Python 3.8.0b2가 릴리즈됐다. 이는 Python 3.8이 feature complete하게 되었다는 것을 의미한다. 정식 릴리즈가 10월에 이뤄질텐데, 그 전에 이 베타 버전을 통해 Python 3.8의 새로운 기능들을 살펴보자. 이해하기 쉽고 headline이라고 ...
60챕터 정도로 계획을 잡았고, 그동안 약 20개의 글을 통해 17개 챕터의 내용을 공유했다. 그러나 이런 주제로 글을 쓰는 게 개인의 성장에 그리 큰 도움을 주지 않는 것 같아 그동안 연재를 일시중지하고 있었다. 내용의 난이도가 높아서가 아니라, 교과서를 쓰는 느낌이라서 그렇다. 언젠가부터 다시 글을 쓰긴 할텐데, 커리큘럼들을 그냥 공유해 두고 있는 게 ...
Go 언어에는 gofmt라는 도구가 있다. Go를 설치하면 기본적으로 제공되는 콘솔용 코드 포매팅 프로그램인데, gofmt -w main.go같은 커맨드를 통해 Go 코드를 포매팅하는 식이다. indent 맞춰 주고, 구조체를 align 시켜주는 등 코드의 비주얼적인 개선 작업들을 한다. Visual Studio Code에서 Go extension을 설치하...
나는 보통 재능이나 공부의 양으로 친구들의 성장 속도를 따라가기 힘들었다. 그래서 '무작정 열심히'보단, '의식적인 연습'을 지속해 나가야 했다. 이득충이 되는 방향으로 공부를 하다 보니까, 내가 어떤 방식으로 공부를 하는 지 어느 정도 정리가 됐다. velog의 독자들은 '경험기'같은 글에 니즈가 꽤 있는 것 같아서, 부족하지만 내 공부를 위한 매개체들을...
이전 글 : 파이썬으로 URL 가지고 놀기 - yarl 편 yarl은 immutable에 적극적이며 익숙한 개발자에게 urllib의 좋은 대안이 될 수 있는 라이브러리다. 그러나 나는 yarl이 그렇게나 까는 mutable 객체를 제공하는 라이브러리를 원했다. 아래와 같은 이유에서다. - Python은 immutable에 민감한 언어가 아니다. - 객...