Інструкція Python Switch

Вступ

Оператор switch є потужним і зручним інструментом для керування потоком вашої програми. Це дозволяє швидко й легко створювати кілька гілок коду залежно від значення даної змінної чи виразу. Він зазвичай використовується, коли вам потрібно виконати різну логіку залежно від значення заданої змінної, яка може мати більше 2 (але обмежену кількість) значень.

У цій статті ми розглянемо, як використовувати оператор switch у Python, і обговоримо його переваги перед іншими керуючими структурами. Незалежно від того, чи ви новачок у Python, чи досвідчений розробник, оператор switch може допомогти вам написати чистіший та ефективніший код.

До v3.10

До того, як оператор switch Python був доступний у мові, програмістам доводилося використовувати інші керуючі структури, щоб досягти тієї самої функціональності. Одним із поширених підходів було використання серії операторів if-else, при цьому кожна гілка коду була пов’язана з іншим значенням змінної, що тестується.

Наприклад, розглянемо наступний код:

value = "foo"

if value == "foo":
    print("foo was selected")
elif value == "bar":
    print("bar was selected")
else:
    print("Nothing valid was selected")

У цьому коді ми використовуємо оператор if-else, щоб визначити, яку гілку коду виконати на основі значення змінної value. Якщо value дорівнює «foo», буде виконано першу гілку коду. Якщо value дорівнює «bar», буде виконана друга гілка коду. В іншому випадку код у else блок буде виконано.

Хоча цей підхід працює, він може швидко стати громіздким, оскільки кількість можливих значень для змінної збільшується. Крім того, це може ускладнити читання та розуміння коду.

Інший підхід, який можна використати для створення оператора, схожого на перемикач, у Python – це використання словника. У цьому підході ключами словника є можливі значення змінної, що тестується, а значеннями є відповідні гілки коду.

Наприклад, розглянемо наступний код:

value = "foo"

switch = {
    "foo": lambda: print("foo was selected"),
    "bar": lambda: print("bar was selected"),
    "default": lambda: print("Nothing valid was selected"),
}

switch.get(value, "default")()

У цьому коді ми визначили словник під назвою switch, з ключами, що представляють можливі значення змінної value. Для кожного ключа ми призначили лямбда-функцію як значення, яке містить відповідну гілку коду. Щоб виконати відповідну гілку коду, ми використовуємо get() метод словника, який дозволяє нам вказати значення за замовчуванням для використання, якщо заданий ключ не існує в словнику.

Хоча цей підхід є більш гнучким і компактним, ніж використання операторів if-else, його все одно може бути важко прочитати та зрозуміти, особливо якщо код у кожній гілці складний. Крім того, він вимагає використання лямбда-функцій, що може заплутати деяких програмістів. Ми не рекомендуємо використовувати цей метод, якщо з якихось причин ви не можете скористатися іншими методами в цій статті.

З появою оператора Python switch у Python v3.10 програмісти тепер мають більш зручний та інтуїтивно зрозумілий спосіб керувати потоком своїх програм на основі значення заданої змінної або виразу. У наступному розділі ми розглянемо, як використовувати фактичний оператор switch у Python.

Команда match/case Заява (після v3.10)

Після Python v3.10 оператор switch обробляється за допомогою match ключове слово. Це ключове слово використовується для створення виразу відповідності шаблону, який дозволяє перевірити значення даної змінної або виразу за серією шаблонів. Якщо збіг знайдено, виконується відповідна гілка коду.

Наприклад, розглянемо наступний код:

value = "foo"

match value:
    case "foo":
        print("foo was selected")
    case "bar":
        print("bar was selected")
    case _:
        print("Nothing valid was selected")

Ознайомтеся з нашим практичним практичним посібником із вивчення Git з передовими методами, прийнятими в галузі стандартами та включеною шпаргалкою. Припиніть гуглити команди Git і фактично вчитися це!

У цьому коді ми використовуємо match ключове слово для створення виразу відповідності шаблону, який перевіряє значення змінної value проти серії візерунків. Якщо value дорівнює «foo», буде виконано першу гілку коду. Якщо value дорівнює «bar», буде виконана друга гілка коду. Інакше код у блоці else буде виконано.

Провалюватися

Однією з ключових відмінностей між операторами switch в Python і традиційними операторами switch в інших мовах є те, що Python match інструкція не підтримує пропуск. Іншими словами, як тільки збіг знайдено і відповідна гілка коду виконана, match вираз закінчується, а інший код у match оператор виконується. В інших мовах це зазвичай досягається за допомогою break ключове слово, яке тут не потрібне або не підтримується.

Якщо ви хочете досягти такої самої поведінки, як і провал у традиційному операторі switch, ви можете використовувати | оператор для відповідності кількох випадків. Цей оператор дозволяє вказувати декілька шаблонів в одному case, і будь-який із шаблонів може бути зіставлений, щоб ініціювати виконання цієї гілки.

Наприклад, розглянемо наступний код:

value = "y"

match value:
    case "yes" | "y":
        print("The user confirmed")
    case _:
        print("The user denied")

Тут, якщо значення value дорівнює «так» or “y”, буде виконано першу гілку коду. Це еквівалентно поведінці провалу в традиційному операторі switch.

Типово

Як ви, мабуть, помітили з наведених вище прикладів, регістр «за замовчуванням» обробляється за допомогою підкреслення (_). Це вважається символом підстановки та відповідає всім значенням. Якщо один із попередніх випадків відповідає значенню, тоді типова гілка коду пропускається й не виконується.

Висновок

Як бачите, оператор Python match (він же «switch») пропонує потужний і зручний спосіб контролювати потік вашої програми. Незалежно від того, чи ви новачок у Python, чи досвідчений розробник, оператор switch може допомогти вам написати чистіший та ефективніший код.

Часова мітка:

Більше від Stackabuse