월요일, 4월 15, 2024
Home자동화패턴 매칭 지원 외에... '파이썬 3.10'에서는 무엇이 다른가요?

패턴 매칭 지원 외에… ‘파이썬 3.10’에서는 무엇이 다른가요?


최신 버전의 Python(v3.10)은 강력한 패턴 일치, 향상된 오류 보고, 래핑된 함수에 대한 더욱 스마트한 입력 구문 등을 제공합니다.

Python 3.10이 10월 4일에 출시되었습니다. 출시되었습니다. 용감한 Python 개발자라도 적절한 예방조치를 통해 코드를 테스트하는 것이 좋습니다(예: 가상 환경 사용).

엄밀히 말하면 Python 3.10에는 완전히 새로운 기능이 많지 않지만 그 중 하나가 ‘구조적 패턴 일치’입니다. 비동기 그 이후로 언어 구문에 가장 중요한 추가 사항이 될 수 있습니다. 여기서는 Python 3.10의 모든 새로운 기능과 이를 코드에서 지원하는 방법을 살펴봅니다.

ⓒ게티 이미지

구조적 패턴 일치
구조적 패턴 일치를 사용하면 변수를 가능한 값 집합 중 하나와 일치시킬 수 있습니다. 또한 값의 패턴을 일치시킬 수도 있습니다(예: 특정 값으로 설정된 특정 속성을 가진 개체). 이를 통해 가능성의 범위가 크게 확장되고 다양한 시나리오를 다루는 코드를 빠르게 작성할 수 있습니다. 예는 다음과 같습니다. 패턴 일치 사용 방법에 대한 자세한 내용은 다음을 참조하세요. 여기 확인하실 수 있습니다.

명령 = 입력()
command.split()과 일치:
사례 (“그만두다“):
그만두다()
사례 (“엘로드“, 파일 이름):
load_from(파일명)
사례 (“구하다“, 파일 이름):
save_to(파일명)
사례 _:
인쇄 (에프”‘{command}’ 명령을 이해할 수 없습니다“)

더욱 정확한 오류 보고

Python의 오류 보고는 오랫동안 파서에 의존해 왔습니다. Python 3.9에서 개발 팀은 “Python 팀이 유지 관리하기가 더 빠르고, 더 강력하고, 더 쉽고, 내부 해킹이 적은” 완전히 새로운 파서를 도입했습니다.

이 새로운 파서가 개발자에게 제공하는 큰 보너스 중 하나는 훨씬 더 정확하고 유용한 오류 메시지입니다. Python 3.8에서 다음 코드는 구문 오류를 생성했습니다.

인쇄 (“안녕하세요
인쇄 (“무슨 일이야?“)

파일 “.test.py“, 선 2
인쇄 (“무슨 일이야?“)
^
구문오류:잘못된 구문

실제 문제는 한 줄 앞에 있었기 때문에 이것은 별로 도움이 되지 않았습니다. Python 3.10에서는 훨씬 더 유용한 오류가 발생합니다.

파일 “.test.py“, 선 하나
인쇄 (“안녕하세요
^
구문오류: ‘(‘은 닫힌 적이 없습니다

개발팀에 따르면 파서에서 생성되는 많은 오류가 이러한 맥락에서 개선되었습니다. 보다 정확한 오류 정보를 제공할 뿐만 아니라 실제로 오류가 발생한 위치에 대한 보다 정확한 정보도 제공합니다.

매개변수 사양 변수
코드에 유형 정보를 추가하는 데 사용되는 Python의 입력 모듈을 사용하면 호출 가능한 유형(예: 함수 등)을 설명할 수 있습니다. 그러나 유형 정보는 콜러블 전체에 전파될 수 없습니다. 이로 인해 함수 데코레이터 등에 주석을 달기가 어렵습니다.

입력에 두 가지 새로운 추가 사항: 타이핑.ParamSpec 수업 입력.연결추상 유형 정의 정보로 호출 가능한 객체에 주석을 달 수 있습니다. PEP 문서이 새로운 기능의 예는 다음에서 가져왔습니다.

~에서 타자 수입 대기 중, 호출 가능, 유형Var

R = 유형Var(“아르 자형”)

데프 add_logging(f: 호출 가능(…, R)) -> 호출 가능(…, 대기 중(아르 자형)):
비동기 데프 내부(*인수: 물체**크와르그: 물체) -> R:
log_to_database()를 기다립니다
반품 f(*args, **kwargs)
반품 안의

@add_logging
데프 take_int_str(x: 정수y: 문자열) -> 정수:
반품 x + 7

take_int_str을 기다리세요(1, “아”)
take_int_str을 기다리세요(“B”, 2) # 런타임에 실패

데코레이터는 처리하는 함수에 어떤 유형의 유형을 전달하는지에 대한 적절한 세부 정보를 linter에 제공할 수 없기 때문에 linter는 take_int_str의 두 번째 인스턴스에서는 잘못된 유형을 포착할 수 없습니다. 이 코드가 새로운 매개변수 지정 변수 구문과 함께 작동하는 방식은 다음과 같습니다.

~에서 타자 수입 대기 중, 호출 가능, ParamSpec, 유형Var

피 = ParamSpec(“피”)
R = 유형Var(“아르 자형”)

데프 add_logging(f: 호출 가능(P, R)) -> 호출 가능(피, 대기 중(아르 자형)):
비동기 데프 inner(*args: P.args, **kwargs: P.kwargs) -> R:
log_to_database()를 기다립니다
반품 f(*args, **kwargs)
반품 안의

@add_logging
데프 take_int_str(x: 정수y: 문자열) -> 정수:
반품 x + 7

take_int_str을 기다리세요(1, “아”) #승인됨
take_int_str을 기다리세요(“B”, 2) # 타입 체커에 의해 올바르게 거부됨

ParamSpec위치 및 키워드 인수를 캡처할 위치를 지정할 수 있습니다. 사슬 같이 잇다일반적으로 데코레이터를 사용하여 인수를 추가하거나 제거하는 방법을 나타내는 데 사용할 수 있습니다.

Python 3.10의 기타 주요 변경 사항은 다음과 같습니다.

• 이제 유니온 유형 유니온(X,Y) 대신 간결하게 말하세요 X|Y다음과 같이 쓸 수 있습니다 (PEP 604).

• 여러 반복 가능 항목의 결과를 하나로 묶습니다. 지퍼 내장 엄격한 키워드가 추가되었습니다. 진실로 설정하면 iterable 중 하나가 다른 iterable보다 먼저 소진됩니다. 지퍼예외가 발생합니다(PEP 618).

~와 함께 이제 문은 여러 줄로 된 괄호 구문을 지원합니다(BPO-12782).

• 이제 변수를 유형 별칭으로 선언할 수 있습니다. 이를 통해 이전 참조 또는 잘못된 유형이 관련된 경우를 구별할 수 있습니다(PEP 613).

• CPython을 빌드하려면 OpenSSL 1.1.1 이상이 필요합니다. 이는 CPython의 주요 종속성 중 하나를 현대화합니다(PEP 644).

ciokr@idg.co.kr



RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisment -
Google search engine

Most Popular

Recent Comments