Կարող եք ձեր կոդը փորձարկել այստեղ
Конструкция match
Սկսած 3.10 տարբերակից, Python լեզուն ներկայացրեց այնպիսի ֆունկցիոնալություն, ինչպիսին օրինակների համընկնումն է : Նախշերի համընկնումը ներկայացնում է համընկնման կառուցվածքի օգտագործումը , որը թույլ է տալիս համապատասխանեցնել արտահայտությունը որոշակի օրինաչափության հետ: Իսկ եթե արտահայտությունը համապատասխանում է օրինաչափությանը, ապա կատարվում են որոշակի գործողություններ։ Այս առումով համընկնման կառուցվածքը նման է if/else/elif կառուցվածքին , որը կատարում է որոշակի գործողություններ՝ կախված ինչ-որ պայմանից: Այնուամենայնիվ, համընկնման ֆունկցիոնալությունը շատ ավելի լայն է. այն նաև թույլ է տալիս տվյալներ հանել կոմպոզիտային տեսակներից և կիրառել գործողություններ օբյեկտների տարբեր մասերի վրա:
Համապատասխանության կառուցվածքն ունի հետևյալ պաշտոնական սահմանումը.
match արտահայտություն:
case նմուշ_1:
գործողություն_1
case նմուշ_2:
գործողություն_2
case նմուշ_N:
գործողություն_N
case _:
գործողություն լռելյայն
Համընկնման բանալի բառից հետո գալիս է համեմատվող արտահայտությունը: Եվ հետո երկու կետից հետո հաջորդ տողերում կան դեպքերի հայտարարություններ : Յուրաքանչյուր դեպքի արտահայտությունից հետո նշվում է օրինաչափություն, որի հետ համեմատվում է համընկնող արտահայտությունը: Կաղապարից հետո նշվում է գործի բլոկում կատարվող գործողությունների մի շարք՝ առանձնացված երկու կետով: Համապատասխանի կառուցվածքը հաջորդաբար համեմատում է արտահայտությունը պատյանների բլոկների օրինաչափությունների հետ: Եվ եթե որոշ case block- ից օրինաչափություն է հայտնաբերվել , որը համապատասխանում է համընկնումի արտահայտությանը, ապա այս case բլոկի հրահանգները կատարվում են: Ինչպես պարզունակ տեսակների, այնպես էլ տարրերի և դասի օբյեկտների հաջորդականության տվյալները կարող են օգտագործվել որպես օրինաչափություններ, որոնց հետ համեմատվում են արտահայտությունները: Նախ, եկեք դիտարկենք իրավիճակը, երբ պարզունակ տիպերի բառացիները գործում են որպես կաղապարներ: Օրինակ, կախված լեզվից, մենք կցուցադրենք ողջույնի հաղորդագրություն.
def print_hello(language):
match language:
case "russian":
print("Привет")
case "english":
print("Hello")
case "german":
print("Hallo")
print_hello("english") # Hello
print_hello("german") # Hallo
print_hello("russian") # Привет
Այստեղ ֆունկցիան print_hello վերցնում է լեզվի պարամետր, որով փոխանցվում է ընտրված լեզուն։ Բուն գործառույթում համընկնման կառուցվածքը համեմատում է լեզվի փոփոխականի արժեքը։ Case բլոկները սահմանում են օրինաչափություններ՝ տողեր, որոնց լեզվի փոփոխականը համընկնում է: Օրինակ, երբ կանչվում է, print_hello("english")լեզվի պարամետրը «անգլերեն» է, ուստի համընկնումի կառուցվածքը կընտրի հետևյալ գործի բլոկը.
case "english":
print("Hello")
Նկատի ունեցեք, որ գործի բլոկները նահանջված են համընկնումի կետի սկզբից: Եվ յուրաքանչյուր դեպքի բլոկի հրահանգները կտրված են տվյալ գործի բլոկի սկզբից: Բայց եթե գործի բլոկը ունի մեկ հայտարարություն, այն կարող է տեղադրվել գործի հայտարարության նույն տողում.
def print_hello(language):
match language:
case "russian": print("Привет")
case "english": print("Hello")
case "german": print("Hallo")
print_hello("english") # Hello
print_hello("german") # Hallo
print_hello("russian") # Привет
Ավելին, եթե համընկնումից արտահայտությունը չի համընկնում գործի օրինաչափություններից որևէ մեկին, ապա համապատասխանաբար այս գործի բլոկներից ոչ մեկը չի կատարվում: Եթե ցանկանում եք, որ որոշ կանխադրված գործողություններ կատարվեն, երբ արժեքները չեն համընկնում (եթե դեպքերի օրինակներից ոչ մեկը չի համապատասխանում համընկնումի արտահայտությանը), ապա այս դեպքում օգտագործվում է _ (գծիկ) օրինաչափությունը.
def print_hello(language):
match language:
case "russian":
print("Привет")
case "english":
print("Hello")
case "german":
print("Hallo")
case _:
print("Undefined")
print_hello("english") # Hello
print_hello("spanish") # Undefined
Եթե գործի օրինաչափություններից ոչ մեկը չի համապատասխանում լեզվի արժեքին, ապա բլոկը կկատարվի.
case _:
print("Undefined")
Բայց դուք կարող եք նաև սահմանել գործի բլոկ, որը թույլ է տալիս համեմատել միանգամից մի քանի արժեքների հետ: Այս դեպքում արժեքները բաժանվում են ուղղահայաց բարով.
def print_hello(language):
match language:
case "russian":
print("Привет")
case "american english" | "british english" | "english":
print("Hello")
case _:
print("Undefined")
print_hello("english") # Hello
print_hello("american english") # Hello
print_hello("spanish") # Undefined
Այս դեպքում ձևանմուշը case "american english" | "british english" | "english"համընկնում է միանգամից երեք արժեքի: Դուք կարող եք համեմատել արտահայտությունները այլ տեսակի տվյալների հետ նույն կերպ: Օրինակ:
def operation(a, b, code):
match code:
case 1:
return a + b
case 2:
return a - b
case 3:
return a * b
case _:
return 0
print(operation(10, 5, 1)) # 15
print(operation(10, 5, 2)) # 5
print(operation(10, 5, 3)) # 50
print(operation(10, 5, 4)) # 0
Այստեղ գործողության ֆունկցիան վերցնում է երկու թվեր և գործառնական կոդ։ Համապատասխանության կառուցվածքը համեմատում է գործողության կոդը որոշակի արժեքների հետ և, կախված արժեքից, կատարում է որոշակի գործողություն թվերի վրա: Օրինակ, եթե կոդը 1 է, ապա արտահայտությունը կատարվում է.
case 1:
return a + b
Այս դեպքի արտահայտությունը ֆունկցիայից կվերադարձնի a և b թվերի գումարը։ Նմանապես, եթե կոդը = 2, ապա տարբերությունը վերադարձվում է, իսկ եթե կոդը = 3, ապա վերադարձվում է թվերի արտադրյալը: Մնացած բոլոր դեպքերում վերադարձվում է 0:
Մեկնաբանություն գրելու համար խնդրում ենք մուտք լինել