"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 중국어 웹사이트의 기타 관련 기사를 참조하세요!