Python 3.10에서 'match...case' 사용

WBOY
풀어 주다: 2023-04-12 09:25:13
앞으로
1967명이 탐색했습니다.

Python 3.10에서 'match...case' 사용

"match...case" 구문은 다른 객체 지향 언어의 switch 문과 유사하며 구조를 대소문자와 더 쉽게 일치시킬 수 있도록 설계되었습니다.

시작해 보겠습니다.

구문

"match...case" 구문은 다음과 같습니다.

def greeting(message):
match message.split():
case ["hello"]:
print("this message says hello")
case ["hello", name]:
print("This message is a personal greeting to {name}")
case _:
print("The message didn’t match with anything")
로그인 후 복사

구문을 살펴보고 어떻게 작동하는지 살펴보겠습니다.

우리가 만든 함수는 message라는 매개변수를 받습니다. match 키워드는 나열된 사례를 비교하기 위해 개체를 허용합니다.

이 예에서 match 키워드는 message.split() 작업의 결과인 문자열 목록을 받습니다. 더 자세히 설명하기 위해 다음과 같이 함수를 호출한다고 가정해 보겠습니다.

greeting("hello")
로그인 후 복사

함수는 먼저 이 문자열을 모든 공백으로 분할하고 목록을 형성합니다. 위 입력의 경우 일치 연산자는 ["hello"] 목록을 사용합니다. 그런 다음 목록을 각 사례와 비교합니다. 첫 번째 사례는 다음과 같습니다.

case ["hello"]
로그인 후 복사

입력이 정확히 일치하므로 이 경우에도 코드가 계속 실행됩니다.

출력:

this message says hello
로그인 후 복사

함수를 Greeting("hello George")과 같이 호출하면 어떻게 될까요?

이 입력을 사용하면 일치 연산자는 ["hello", "George"] 목록을 사용하여 모든 사례를 비교합니다. 첫 번째 경우인 "hello"는 비교 목록에 요소가 하나가 아닌 두 개 있기 때문에 일치하지 않습니다.

구조적 일치

일치 연산자는 주어진 표현식의 구조와 일치하므로 비교 표현식이 목록의 첫 번째 요소와 일치하더라도 첫 번째 사례는 사례 표현식의 길이로 인해 일치하지 않습니다.

두 번째 경우는 ["hello", 이름]입니다. 입력이 일치하면 이런 일이 발생합니다. Python에 일치시킬 리터럴 값을 제공하지 않으면 비교 표현식의 모든 값을 Case 표현식의 변수 이름에 바인딩합니다. 따라서 이 예에서는 이름이 George로 설정됩니다. 그리고 이 경우는 일치합니다(첫 번째 요소로 "hello"가 있고 name에 바인딩된 요소도 있음). 따라서 출력은 다음과 같습니다.

This message is a personal greeting to George
로그인 후 복사

이제 다음과 같이 함수를 호출해 보겠습니다. Greeting(" hello 조지 존슨').

비교 표현은 ["hello", "George", "Johnson"]이 됩니다. 이제 각각의 경우를 살펴보겠습니다. 첫 번째 경우는 비교 표현식에 1개가 아닌 3개의 요소가 있기 때문에 실패합니다. 두 번째 경우도 같은 방식으로 실패합니다. 두 번째 경우에서는 첫 번째 요소가 "hello"인 길이 2의 목록을 볼 것으로 예상합니다. 첫 번째 요소는 실제로 "hello"이지만 비교 표현식에는 3개의 요소가 있으므로 이 경우는 일치하지 않습니다.

남은 유일한 옵션은 모든 것과 일치하는 기본 케이스인 밑줄 케이스입니다. switch 문의 기본 케이스처럼 생각하세요. 비교 표현식이 다른 것과 일치하지 않으면 항상 _ 케이스와 일치합니다.

마지막 케이스로 밑줄을 긋습니다. 모든 케이스가 밑줄 케이스와 일치하므로 이 경우 케이스는 실행되지 않습니다. 이는 if...else의 else 키워드와 유사합니다. _ 케이스는 Python이 _를 유효한 변수 이름으로 인식하기 때문에 모든 것과 일치합니다. 따라서 대소문자 ["hello", name]을 일치시킬 때와 마찬가지로 비교 표현식은 _name에 바인딩됩니다. 특별한 경우 _ 변수는 ["hello", "George", "Johnson"] 값을 보유합니다.

최신 함수 호출 인사말("hello George Johnson")의 출력은 다음과 같습니다.

The message didn’t match with anything
로그인 후 복사

고급 사용법

"match...case" 구문은 다양한 표현식과 값을 비교하는 매우 강력한 도구입니다. . 위의 예에서 했던 것처럼 목록을 비교하면 더 많은 일치 기능을 사용할 수 있습니다.

케이스 표현식에서는 연산자를 사용하여 나머지 모든 요소를 ​​변수에 넣을 수 있습니다. 예:

comparison_list = ["one", "two", "three"]
match comparison_list:
case [first]:
print("this is the first element: {first}")
case [first, *rest]:
print("This is the first: {first}, and this is the rest: {rest}")
case _:
print("Nothing was matched")
로그인 후 복사

이 스니펫에서 두 번째 케이스는 다음과 같은 출력과 일치하여 실행됩니다.

This is the first: one, and this is the rest: ["two", "three"]
로그인 후 복사

다음과 같이 두 개 이상의 구조에서 케이스 분기를 결합하는 것도 가능합니다.

match comparisonList:
 case [first] | [first, "two", "seven"]:
 print("this is the first element: {first}")
 case [title, "hello"] | ["hello", title]:
 print("Welcome esteemed guest {title}")
 case [first, *rest]:
 print("This is the first: {first}, and this is the rest: {rest}")
 case _:
 print("Nothing was matched")
로그인 후 복사

첫 번째 및 두 번째 케이스 케이스 분기를 실행하기 위해 비교 표현식을 적용할 수 있는 여러 가지 다른 표현식으로 구성됩니다. 이는 분기 결합에 어느 정도 유연성을 제공합니다.

사전의 "match...case" 구문도 소개합니다. 일치 연산자는 비교 표현식에 Case 표현식의 속성이 포함되어 있는지 확인합니다. 예:

comparisonDictionary = {
 "John": "boy",
 "Jack": "boy",
 "Jill": "girl",
 "Taylor": "girl"
}
match comparisonDictionary:
 case {"John": "boy", "Taylor": "boy"}:
 print("John and Taylor are both boys")
 case {"John": "boy", "Taylor": "girl"}:
 print("Taylor is a girl and John is a boy")
 case _:
 print("Nothing matches")
로그인 후 복사

출력:

Taylor is a girl and John is a boy
로그인 후 복사

일치 연산자는 입력 사전에 대소문자 속성이 있는지 확인한 다음 값이 일치하는지 확인합니다.

요약하자면, 새로운 "match...case" 연산자는 Python 개발자가 분기 사례를 생성할 때 활용할 수 있는 강력한 도구입니다. 이를 통해 들어오는 변수의 구조를 안정적으로 검사하고 변수에 존재하지 않는 항목에 액세스하려고 하지 않는지 확인할 수 있습니다.

중요 사전 일치에서는 입력 사전에 대소문자가 지정한 것보다 더 많은 속성이 있어도 대소문자가 계속 일치합니다.

결론적으로, 새로운 "match...case" 연산자는 Python 개발자가 분기 사례를 생성할 때 활용할 수 있는 강력한 도구입니다. 이를 통해 들어오는 변수의 구조를 안정적으로 검사하고 변수에 존재하지 않는 항목에 액세스하려는 시도가 이루어지지 않도록 할 수 있습니다.

위 내용은 Python 3.10에서 'match...case' 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿