3일 전

파이썬 3.9의 새로운 기능과 더 나아진 기능

Serdar Yegulalp | InfoWorld
최근 출시된 파이썬(Python) 3.9는 기능과 개발 방법, 두 가지 측면에서 큰 변화가 적용됐다. 파이썬의 인기는 지난 몇 년 사이 크게 높아졌고 데이터 과학, 머신러닝과 같이 빠르게 발전 중인 분야에서 폭발적으로 사용이 늘었다. 파이썬 프로젝트 측도 새로운 요구에 보조를 맞추기 위해 부지런히 노력하고 있다.

파이썬 3.9의 중요한 새로운 기능은 다음과 같다.
ⓒ Getty Images Bank


파이썬 릴리스 주기, 연간으로 전환

지금까지 파이썬은 18개월 단위로 개발, 출시됐다. PEP 602는 파이썬 개발 팀에 연간 릴리스 주기를 도입할 것을 제안했는데 이 제안이 채택됐다.

릴리스 주기가 연간으로 전환한 것은 릴리스당 기능의 수가 더 적어짐을 의미하지만 동시에 기능 테스트에 대한 피드백이 더 빨라지고 각 릴리스의 단절적 변화(breaking change)가 더 줄어들어 사용자와 리눅스 배포판 관리자 관점에서 파이썬을 더 자주 업그레이드할 인센티브가 높아진다는 것을 의미하기도 한다. 또한 개발 주기의 후반부에 제안된 새 기능이 새 릴리스에 적용되는 기간도 단축될 것이다.

새 타임라인에 따라 파이썬 3.9는 2020년 10월에 공식 출시된다. 파이썬 3.10은 2020년 5월 19일부터 공식 프리 알파 개발 단계를 시작했고, 파이썬 3.9가 공식 출시될 때 알파 개발 단계로 진입해 2021년 10월에 출시된다. 미래의 파이썬 릴리스도 이와 동일한 패턴에 따른다.


빨라진 기본 속도

지난 버전에서도 파이썬은 리비전이 나올 때마다 성능이 개선됐다. 파이썬 3.9에서는 기존 코드를 변경할 필요 없이 성능을 높여주는 두 가지 큰 개선이 이뤄졌다.

첫 번째 개선은 파이썬 3.8에 도입된 vectorcall 프로토콜의 사용 확대다. vectorcall은 호출에 의해 생성되는 임시 객체를 최소화하거나 없애는 방법으로 일반적인 여러 함수의 호출 속도를 높여준다. 파이썬 3.9에서는 여러 파이썬 빌트인 함수(range, tuple,set, frozenset, list, dict)가 내부적으로 vectorcall을 사용해 실행 속도를 높인다.

두 번째 큰 성능 향상은 더 효율적인 파이썬 소스코드 파싱이다. C파이썬(CPython) 런타임용 새로운 파서의 설계 목적은 성능 문제 해결보다는 기존 파서의 내부적인 비일관성을 해결하는 데 있지만 부가적인 혜택으로 특히 볼륨이 큰 코드에서 파싱 속도가 더 빨라졌다. 


더 많은 파이썬 문자열과 사전 함수

파이썬은 일반적인 데이터 형식을 쉽게 조작할 수 있게 해준다. 파이썬 3.9는 문자열과 사전을 위한 새로운 기능으로 이 편의성을 더욱 높였다. 문자열의 경우 프리픽스(prefixes)와 서픽스(suffixes)를 제거하기 위한 새로운 메소드가 있다. 지금까지 오랫동안 많은 수작업이 필요했던 부분이다. 사전의 경우 이제 유니온 연산자(union operators)가 있다. 하나는 두 개의 사전을 새로운 사전 하나로 병합하기 위한 연산자, 다른 하나는 한 사전의 내용을 다른 사전으로 업데이트하는 연산자다.


데코레이터, 일부 제약 제거

데코레이터(Decorators)는 파이썬 함수를 래핑해 프로그램 방식으로 함수의 동작을 변경할 수 있게 해준다. 이전까지 데코레이터는 @ 기호, 이름(예: func) 또는 점으로 연결한 이름(func.method), 그리고 선택적 요소인 단일 호출(func.method(arg1, arg2))로만 구성이 가능했다. 파이썬 3.9에서 데코레이터는 이제 유효한 모든 식으로 구성이 가능하다.

이 제한을 피하는 전통적인 방법 가운데 하나는 데코레이터로 사용될 때 더 복잡한 식을 대신하는 함수 또는 람다 식(lambda expression)을 만드는 것이었다. 이제는 데코레이터로 기능할 수 있는 무언가를 산출하기만 한다면 어떤 식이든 가능하다.


새로운 파이썬 형식 연산

파이썬은 지난 몇 버전에 걸쳐 형식 힌트(type hinting) 지원을 확장해왔다. 주로 린터와 코드 검사기를 위한 것이다. C파이썬에서 런타임에 형식이 강제되지 않고, 파이썬이 정적 형식 지정 언어가 될 계획도 없다. 그러나 형식 힌트는 큰 코드베이스에서 일관성을 보장하는 데 유용한 툴이므로 파이썬 코드에서도 형식 힌트가 분명 도움이 된다.

파이썬 3.9에는 형식 힌트와 형식 주석(type annotations)을 위한 두 가지 새로운 기능이 도입됐다. 하나는 컬렉션 콘텐츠(예: 목록과 사전)용 형식 힌트로, 이제 파이썬에서 네이티브로 사용 가능하다. 따라서 예를 들어 목록을 typing 라이브러리 없이 list[int], 즉 정수 목록으로 기술할 수 있다.

파이썬 형식 메커니즘에 두 번째로 추가된 기능은 유연한 함수 및 변수 주석이다. 이를 통해 Annotated 형식을 사용해 사전에(린팅 툴(linting tools) 사용) 또는 런타임에 검사가 가능한 메타데이터를 사용해 형식을 기술할 수 있다.


파이썬 내부 구조 개선

파이썬의 내부 구조를 정리하고 개선하고 현대화하는 것은 파이썬 개발진이 지속적으로 추구하는 부분이고, 파이썬 3.9에도 이와 관련해 몇 가지 변경된 점이 있다.

첫째, 모듈이 가져오기 메커니즘과 상호작용하는 방식이 재설계됐다. C로 작성된 파이썬 확장 모듈은 이제 새로운 로딩 메커니즘을 사용할 수 있다. 이렇게 하면 가져올 때 일반 파이썬 모듈과 더 비슷하게 작동하게 된다. 파이썬 표준 라이브러리의 여러 모듈이 이 동작을 새롭게 지원한다(_abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref). 새로운 로딩 메커니즘은 파이썬에서 확장 모듈을 더 유연하게 다룰 수 있게 해줄 뿐만 아니라 고급 후킹 동작과 같은 새로운 기능도 실현한다.

내부 정비와 관련한 두 번째 변화는 파이썬 3의 수명주기 종료시까지 지속이 보장되는, C파이썬을 위한 안정적 내부 ABI다. 지금까지는 파이썬의 각 메이저 리비전의 ABI는 이전 버전과 호환되지 않았기 때문에 새로운 버전마다 확장 모듈을 다시 컴파일해야 했다. 이제부터는 안정적 ABI를 사용하는 확장 모듈은 파이썬 버전이 바뀌어도 계속 작동한다. 파이썬 3.9의 표준 라이브러리에서 안정적 ABI를 사용하는 모듈은 audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib이다.


파이썬 3.9의 기타 변경 사항

  • 파이썬 표준 라이브러리에서 이제 IANA 타임존 데이터베이스(IANA Time Zone Database)를 지원한다. 이 데이터베이스는 충실히 유지관리되고 광범위하게 사용되며, 파이썬 datetime 라이브러리에서 이 데이터베이스를 직접 사용할 수 있게 된 것은 시간 절약 측면에서 매우 반가운 소식이다.
  • 새로운 문자열 메소드로 프리픽스와 서픽스를 쉽게 제거할 수 있다. 프리픽스와 서픽스 제거는 흔한 시나리오지만 지금까지는 필요 이상의 번잡한 작업이 필요했다. 새로운 .removeprefix() 및 removesuffix() 메서드는 문자열에 프리픽스와 서픽스가 존재할 경우 이 둘을 뺀 수정된 사본을 반환한다. editor@itworld.co.kr 


3일 전

파이썬 3.9의 새로운 기능과 더 나아진 기능

Serdar Yegulalp | InfoWorld
최근 출시된 파이썬(Python) 3.9는 기능과 개발 방법, 두 가지 측면에서 큰 변화가 적용됐다. 파이썬의 인기는 지난 몇 년 사이 크게 높아졌고 데이터 과학, 머신러닝과 같이 빠르게 발전 중인 분야에서 폭발적으로 사용이 늘었다. 파이썬 프로젝트 측도 새로운 요구에 보조를 맞추기 위해 부지런히 노력하고 있다.

파이썬 3.9의 중요한 새로운 기능은 다음과 같다.
ⓒ Getty Images Bank


파이썬 릴리스 주기, 연간으로 전환

지금까지 파이썬은 18개월 단위로 개발, 출시됐다. PEP 602는 파이썬 개발 팀에 연간 릴리스 주기를 도입할 것을 제안했는데 이 제안이 채택됐다.

릴리스 주기가 연간으로 전환한 것은 릴리스당 기능의 수가 더 적어짐을 의미하지만 동시에 기능 테스트에 대한 피드백이 더 빨라지고 각 릴리스의 단절적 변화(breaking change)가 더 줄어들어 사용자와 리눅스 배포판 관리자 관점에서 파이썬을 더 자주 업그레이드할 인센티브가 높아진다는 것을 의미하기도 한다. 또한 개발 주기의 후반부에 제안된 새 기능이 새 릴리스에 적용되는 기간도 단축될 것이다.

새 타임라인에 따라 파이썬 3.9는 2020년 10월에 공식 출시된다. 파이썬 3.10은 2020년 5월 19일부터 공식 프리 알파 개발 단계를 시작했고, 파이썬 3.9가 공식 출시될 때 알파 개발 단계로 진입해 2021년 10월에 출시된다. 미래의 파이썬 릴리스도 이와 동일한 패턴에 따른다.


빨라진 기본 속도

지난 버전에서도 파이썬은 리비전이 나올 때마다 성능이 개선됐다. 파이썬 3.9에서는 기존 코드를 변경할 필요 없이 성능을 높여주는 두 가지 큰 개선이 이뤄졌다.

첫 번째 개선은 파이썬 3.8에 도입된 vectorcall 프로토콜의 사용 확대다. vectorcall은 호출에 의해 생성되는 임시 객체를 최소화하거나 없애는 방법으로 일반적인 여러 함수의 호출 속도를 높여준다. 파이썬 3.9에서는 여러 파이썬 빌트인 함수(range, tuple,set, frozenset, list, dict)가 내부적으로 vectorcall을 사용해 실행 속도를 높인다.

두 번째 큰 성능 향상은 더 효율적인 파이썬 소스코드 파싱이다. C파이썬(CPython) 런타임용 새로운 파서의 설계 목적은 성능 문제 해결보다는 기존 파서의 내부적인 비일관성을 해결하는 데 있지만 부가적인 혜택으로 특히 볼륨이 큰 코드에서 파싱 속도가 더 빨라졌다. 


더 많은 파이썬 문자열과 사전 함수

파이썬은 일반적인 데이터 형식을 쉽게 조작할 수 있게 해준다. 파이썬 3.9는 문자열과 사전을 위한 새로운 기능으로 이 편의성을 더욱 높였다. 문자열의 경우 프리픽스(prefixes)와 서픽스(suffixes)를 제거하기 위한 새로운 메소드가 있다. 지금까지 오랫동안 많은 수작업이 필요했던 부분이다. 사전의 경우 이제 유니온 연산자(union operators)가 있다. 하나는 두 개의 사전을 새로운 사전 하나로 병합하기 위한 연산자, 다른 하나는 한 사전의 내용을 다른 사전으로 업데이트하는 연산자다.


데코레이터, 일부 제약 제거

데코레이터(Decorators)는 파이썬 함수를 래핑해 프로그램 방식으로 함수의 동작을 변경할 수 있게 해준다. 이전까지 데코레이터는 @ 기호, 이름(예: func) 또는 점으로 연결한 이름(func.method), 그리고 선택적 요소인 단일 호출(func.method(arg1, arg2))로만 구성이 가능했다. 파이썬 3.9에서 데코레이터는 이제 유효한 모든 식으로 구성이 가능하다.

이 제한을 피하는 전통적인 방법 가운데 하나는 데코레이터로 사용될 때 더 복잡한 식을 대신하는 함수 또는 람다 식(lambda expression)을 만드는 것이었다. 이제는 데코레이터로 기능할 수 있는 무언가를 산출하기만 한다면 어떤 식이든 가능하다.


새로운 파이썬 형식 연산

파이썬은 지난 몇 버전에 걸쳐 형식 힌트(type hinting) 지원을 확장해왔다. 주로 린터와 코드 검사기를 위한 것이다. C파이썬에서 런타임에 형식이 강제되지 않고, 파이썬이 정적 형식 지정 언어가 될 계획도 없다. 그러나 형식 힌트는 큰 코드베이스에서 일관성을 보장하는 데 유용한 툴이므로 파이썬 코드에서도 형식 힌트가 분명 도움이 된다.

파이썬 3.9에는 형식 힌트와 형식 주석(type annotations)을 위한 두 가지 새로운 기능이 도입됐다. 하나는 컬렉션 콘텐츠(예: 목록과 사전)용 형식 힌트로, 이제 파이썬에서 네이티브로 사용 가능하다. 따라서 예를 들어 목록을 typing 라이브러리 없이 list[int], 즉 정수 목록으로 기술할 수 있다.

파이썬 형식 메커니즘에 두 번째로 추가된 기능은 유연한 함수 및 변수 주석이다. 이를 통해 Annotated 형식을 사용해 사전에(린팅 툴(linting tools) 사용) 또는 런타임에 검사가 가능한 메타데이터를 사용해 형식을 기술할 수 있다.


파이썬 내부 구조 개선

파이썬의 내부 구조를 정리하고 개선하고 현대화하는 것은 파이썬 개발진이 지속적으로 추구하는 부분이고, 파이썬 3.9에도 이와 관련해 몇 가지 변경된 점이 있다.

첫째, 모듈이 가져오기 메커니즘과 상호작용하는 방식이 재설계됐다. C로 작성된 파이썬 확장 모듈은 이제 새로운 로딩 메커니즘을 사용할 수 있다. 이렇게 하면 가져올 때 일반 파이썬 모듈과 더 비슷하게 작동하게 된다. 파이썬 표준 라이브러리의 여러 모듈이 이 동작을 새롭게 지원한다(_abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref). 새로운 로딩 메커니즘은 파이썬에서 확장 모듈을 더 유연하게 다룰 수 있게 해줄 뿐만 아니라 고급 후킹 동작과 같은 새로운 기능도 실현한다.

내부 정비와 관련한 두 번째 변화는 파이썬 3의 수명주기 종료시까지 지속이 보장되는, C파이썬을 위한 안정적 내부 ABI다. 지금까지는 파이썬의 각 메이저 리비전의 ABI는 이전 버전과 호환되지 않았기 때문에 새로운 버전마다 확장 모듈을 다시 컴파일해야 했다. 이제부터는 안정적 ABI를 사용하는 확장 모듈은 파이썬 버전이 바뀌어도 계속 작동한다. 파이썬 3.9의 표준 라이브러리에서 안정적 ABI를 사용하는 모듈은 audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib이다.


파이썬 3.9의 기타 변경 사항

  • 파이썬 표준 라이브러리에서 이제 IANA 타임존 데이터베이스(IANA Time Zone Database)를 지원한다. 이 데이터베이스는 충실히 유지관리되고 광범위하게 사용되며, 파이썬 datetime 라이브러리에서 이 데이터베이스를 직접 사용할 수 있게 된 것은 시간 절약 측면에서 매우 반가운 소식이다.
  • 새로운 문자열 메소드로 프리픽스와 서픽스를 쉽게 제거할 수 있다. 프리픽스와 서픽스 제거는 흔한 시나리오지만 지금까지는 필요 이상의 번잡한 작업이 필요했다. 새로운 .removeprefix() 및 removesuffix() 메서드는 문자열에 프리픽스와 서픽스가 존재할 경우 이 둘을 뺀 수정된 사본을 반환한다. editor@itworld.co.kr 


X