Whats new in python 3.6

파이썬 3.6에서 달라지는 점

이번주 금요일1에 파이썬 3.6이 발표될 예정이다. 몇 가지 새로워지는 변경사항에 대해 살펴보자.

새 기능들

포맷 문자열 리터럴

str.format()을 사용하던 문자열 포맷팅이 f" ... " 리터럴로 사용할 수 있게 된다. 해당 리터럴 내에서는 { } 내에 현재 스코프의 변수를 이용해서 치환될 수 있다.

name = "John"
greet = f"He said his name is {name}"
print(greet) # "He said his name is John"
width = 10
precision = 4
value = decimal.Decimal("12.34567")
print(f"result: {value: {width}.{precision}}")
# "result: 12.35"
# ^^^^^ 5

변수 어노테이션

타입 힌트라고 알려진 변수 어노테이션을 명시할 수 있다.

primes: List[int] = []
captain: str # there is no initial value

PEP484에 보다 자세한 명세가 있다. Iterable, Callable 등의 프로토콜 타입 및 제네릭도 쓸 수 있다. 단 이는 어노테이션일뿐이며 파이썬 자체가 정적 타입언어가 되는 것은 아니다.

숫자에 언더스코어 적용 가능

Swift 처럼 숫자 사이에 언더스코어를 넣어 가독성을 향상시킬 수 있게 됐다. 또한 포맷팅에서도 :_x, :,f 등을 이용해서 자리수마다 기호를 공짜로 삽입할 수 있다.

비동기 축약

async for, await 을 리스트 축약 문법에 적용할 수 있다.

result = [i async for i in aiter() if i % 2]
result = [await fun() for fun in funcs if await condition()]

클래스 정의 문법의 단순화

__init_subclass라는 클래스 메소드를 새로 도입하였고, 이를 통해서 서브 클래싱을 통한 새 클래스를 만드는 문법을 단순화할 수 있다.2

그외

파이썬 구현체의 개선점

  • dict 타입의 구현이 PyPy의 그것과 같이 변경되어 더 빠르고 효율적으로 동작하도록 개선됐다. 약 20~25%가량의 메모리가 절약된다.
  • 새로운 프로토콜에 의해 클래스 커스터마이징이 간단해졌다.[^0]
  • 클래스 속성의 정의의 순서가 보존된다.
  • **kwargs의 순서가 함수로 넘겨진 키워드 순서를 보존한다.

표준 라이브러리 개선점

  • 파이썬 3.6부터 asyncio는 안정적인 API로 취급되며, 성능과 기능이 향상되었다.
  • 파일 시스템의 경로 프로토콜은 이제 pathlib을 통해 새롭게 구현되으며, 표준 라이브러리에서 파일 경로에 대해 동작하는 모든 API는 pathlib 기반으로 수정되었다.
  • typing 모듈이 많이 개선되었고, 안정적인 API로 취급된다.
  • tracemalloc 모듈이 크게 개선되었다.
  • datetime 모듈은 로컬 시간대 계산이 보다 명료해졌다.

윈도 환경에서의 개선

  • 파일 시스템과 콘솔 인코딩이 윈도에서도 UTF8로 취급된다.
  • py.exe 런처가 더이상 Python2 를 Python3에 우선하지 않는다.
  • python.exe, pythonw.exe는 이제 260자 이상의 경로를 인자로 받지 않는다.
  • ._pth 파일 포맷이 추가되었고, 이는 강제로 격리되어 레지스트리나 환경변수 룩업을 하지 않는다.
  • python36.zip 파일은 PYTHONHOME의 랜드마크로 사용된다.

  1. https://www.python.org/dev/peps/pep-0494/ 에서 12월 15일이라고 했는데 표준시 기준이라면 이번 주말쯤이 될 듯 하다. 
  2. PEP 487에 정의되어 있다. 공식문서 참고 

Read more

워드프레스에서 고스트로 이전

워드프레스에서 고스트로 이전

이 글을 쓰면서도 믿기 힘든 사실인데, 블로그라는 걸 처음 시작한지가 20년이 되었습니다. 이글루스에서 처음 시작했다가, SK컴즈가 인수한다고 발표함과 동시에 워드프레스로 플랫폼을 옮겼죠. 워드프레스오 옮긴 이후에는 호스팅 환경을 이리 저리 옮기긴 했지만 거의 18년 가까이 워드프레스를 사용해온 것 같습니다. 그 동안 워드프레스는 블로깅 툴에서 명실상부한 범용CMS로 발전했습니다. 사실 웬만한 홈페이지들은 이제

By sooop
띄어쓰기에 대한 생각

띄어쓰기에 대한 생각

업무 메일을 쓸 때 가장 많이 쓰는 말 중에 하나가 메일 말미에 ‘업무에 참고 부탁 드립니다.‘인데요, 어느 날부터 아웃룩에서 이 ‘부탁 드립니다’가 틀렸다고 맞춤법 지적을 하기 시작했습니다. 맞는 말은 ‘부탁드립니다’라고 붙여 쓰는 거라고. 사실 아래아한글 시절부터 이전의 MS워드까지, 워드프로세서들의 한국어 맞춤법 검사 실력은 거의 있으나 마나 한

By sooop

구글 포토에서 아이클라우드로 탈출한 후기

한 때 구글 포토가 백업 용량을 무제한으로 제공해 주겠다고해서, 구글 포토를 사용해서 사진을 백업해왔습니다. 물론 이 이야기의 결말은 저나 이 글을 읽고 있는 여러분이나 모두 알고 있습니다. 사실 AI에게 학습 시킬 이미지 데이터를 모으기 위한 것일 뿐이라거나 하는 이야기는 그 당시에도 있었습니다만, 에이 그래도 구글인데 용량은 넉넉하게 주겠지…하는 순진한

By sooop

Julia의 함수 사용팁

연산자의 함수적 표기 Julia의 연산자는 기본적으로 함수이며, 함수 호출 표기와 같은 방식으로 호출하는 것이 가능합니다. 또한 그 자체로 함수이기 때문에 filter(), map() 과 같이 함수를 인자로 받는 함수에도 연산자를 그대로 적용하는 것이 가능합니다. 특히 + 연산자는 sum() 함수와 같이 여러 인자를 받아 인자들의 합을 구할 수 있습니다. 2 + 3 # = 5 +(2,

By sooop