Python 3.9 에 등장한 상큼한 7가지 Features



LTS(Long Term Support) 버전이 없는 파이썬은 빠르게 버전업이 진행되며, 그때마다 새로운 기능들이 자주 추가 됩니다. 파이썬 버그 트래커 에서 새로운 Features 후보와 기존 버전들이 가지고 있는 버그들을 토대로 RC(Release Candidate) 버전이 나오게 되고 복수의 RC 버전 중 하나를 골라 정식 버전으로 채택됩니다. 우리가 보는 python 3.10.1 rc2 이런 버전들이 릴리즈 후보 입니다.

 

다수의 버그 픽스, 피쳐, 업데이트 중 큰 7가지를 정리해 보았습니다.

 

 

1. Dictionary Update

개발을 하면서 정말 있었으면 좋겠다고 생각한 적이 있었던 기능 입니다.

 

기존 Dictionary Update

>>> a = dict(a="abc", b="bcd") 
>>> b =dict(c="cde", e="efg")
>>> a.update(b)
>>> a
{'a': 'abc', 'b': 'bcd', 'c': 'cde', 'e': 'efg'}
>>> c = {**a, **b}
>>> c
{'a': 'abc', 'b': 'bcd', 'c': 'cde', 'e': 'efg'}


새로운 Dict Update 기능

>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}
>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> y | x
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}
>>> x |= y
>>> x
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}


2. 타입 힌트

이제 type 모듈에서 List와 Dict를 사용하지 않고 빌트인 된 콜렉션 타입으로 타입에 힌트를 줄 수 있습니다.

뿐만 아니라 다른 타입의 파이썬 표준 라이브러리도도 타입힌트(queue.Queue 등)로 줄 수 있게 되었습니다.

 

기존 타이핑

from typing import List, Dict


def hello(r: List[str]):
for a in r:
print(a)

 

새로운 타이핑

def hello(r: list[str]):
for a in r:
print(a)

 

3. 새로운 String Method

  • removeprefix()

  • removesuffix()

기존 구현 방법은 replace method나 정규식 사용을 해야 하며, 다양한 스트링을 받을 경우 처리 해야하는 예외 사항이 많습니다.

새로운 기능

>>> string = "헬로 월드" 
>>> string.removeprefix("헬로 ")
'월드'
>>> string.removesuffix(" 월드")
'헬로'

 

4. JAVA에 있던 nextafter() 의 등장

math.nextafter(x,y) 로 구성되고, x → y 까지의 수 중 표현할 수 있는 다음 수를 리턴합니다.

>>> from math import nextafter
>>> nextafter(2, 3)
2.0000000000000004
>>> nextafter(6, 0)
5.999999999999999
>>> nextafter(0, 9)
5e-324
>>> nextafter(3.141592, 3.14)
3.1415919999999997

파이썬이 표현할 수 있는 수를 뜻합니다.

 


5. 패키지 Import Error 버그 픽스

피쳐는 아니지만, 사람들을 의아하게 만들었던 모듈 임포트 버그 개선.

‘__import__()’는 이제 ValueError 가 아닌 ImportError를 raise 합니다.

builtins.__import__() raise ValueError whereas

importlib.__import__() raise ImportError

 

6. 랜덤바이트 생성

이미 파이썬은 다양한 랜덤 바이트 생성 함수가 있습니다.

os.getrandom()
os.urandom()
secrets.token_bytes()

하지만, 이 랜덤 바이트 들은 다시는 생성할 수 없죠.

random.seed 가 같다면 재생성 가능한 랜덤 바이트를 만들 수 있습니다.

>>> random.randbytes(19)
b'\x9a5;\x83\xd2Q\x93\x145\x18\x827\xe0w\xb7\x01\\\x96\xf2'

 

재생성이 가능하다는 말은 시크릿 토큰으로 사용할 수 없다는 이야기 입니다. 시크릿 토큰을 만들기 위해서는 secrets 모듈을 사용하셔야 합니다.

 

 

7. pytz로 부터 해방. IANA 타임존

말도 많고 탈도 많고, 버그도 많은 pytz를 사용한 타임존 구현법

>>> from datetime import datetime
>>> from pytz import timezone

>>> utc = datetime.utcnow()
>>> utc
datetime.datetime(2020, 10, 12, 4, 21, 44, 737440)

>>> kst = utc.astimezone(timezone('Asia/Seoul'))
>>> kst
datetime.datetime(2020, 10, 12, 4, 21, 44, 737440, tzinfo=<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>)

 

새로운 타임존 구현법

>> > from datetime import datetime
>> > from zoneinfo import ZoneInfo
>> > utc = datetime.utcnow()
>> > utc
datetime.datetime(2020, 10, 12, 4, 24, 49, 297058)
>> > kst = utc.astimezone(ZoneInfo('Asia/Seoul'))
>> > kst
datetime.datetime(2020, 10, 12, 4, 24, 49, 297058, tzinfo=zoneinfo.ZoneInfo(key='Asia/Seoul'))

 

다음편에 다시 만나요!


  • [[a.original_name]] ([[a.file_size | fileSizer]])
좋아요[[ postLike | likePlus ]]
공유
라이언

“Lead Python Engineer”

댓글 [[totalCommentCount]]
[[ comment.author__nick_name ]] [[ comment.datetime_updated | formatDate]] (수정됨)

[블라인드 처리된 글 입니다.]

답장
[[ sub.author__nick_name ]] [[ sub.datetime_created | formatDate ]] (수정됨)

취소
댓글을 남겨주세요.
'파이썬' 관련 최신 포스트
[[ post.title ]]
[[ post.datetime_published_from | DateOnly ]]