Cum se implementează funcțiile de comutare a cazului în Python? [2022]

Publicat: 2021-01-08

Cuprins

Introducere

V-ați întrebat vreodată dacă există o alternativă pentru a scrie acele declarații complexe If-else în Python? Dacă nu doriți ca mai multe instrucțiuni „If” să vă aglomereze codul, ar trebui să luați în considerare utilizarea instrucțiunii Switch case, care oferă o modalitate mai curată și mai rapidă de a implementa fluxul de control în cod. Spre deosebire de C++, Java, Ruby și alte limbaje de programare, Python nu oferă o declarație switch case, dar oferă câteva soluții pentru a face această declarație să funcționeze.

De exemplu, Python vă permite să creați fragmente de cod care funcționează ca instrucțiunile Python Switch în celelalte limbaje de programare. Veți afla mai multe despre modalitățile de implementare a declarațiilor switch-case mai târziu în acest blog. Dacă sunteți interesat să aflați mai multe despre python, consultați cursurile noastre de știință a datelor.

Ce este o declarație Switch în Python?

În general, comutatorul este un mecanism de control care testează valoarea stocată într-o variabilă și execută instrucțiunile case corespunzătoare. Declarația Switch case introduce fluxul de control în programul dvs. și asigură că codul dvs. nu este aglomerat de mai multe instrucțiuni „if”.

Prin urmare, codul dvs. pare meticulos și transparent pentru spectatori. Este o caracteristică de programare minunată pe care programatorii o folosesc pentru a implementa fluxul de control în codul lor. Declarația Switch case funcționează prin compararea valorilor specificate în instrucțiunile case cu variabilele din codul dvs.

Cum să implementați declarația Python Switch Case

Dacă ați codat întotdeauna în limbaje precum C++ sau Java, s-ar putea să vi se pară ciudat că Python nu are o declarație switch case. În schimb, Python oferă numeroase soluții, cum ar fi un dicționar, clase Python sau funcții lambda Python pentru a implementa instrucțiuni switch-case.

Dacă doriți să aflați motivul exact pentru care nu aveți o declarație switch case în python, atunci ar trebui să verificați PEP 3103 .

Înainte de a explora aceste alternative, să vedem mai întâi cum funcționează în mod obișnuit o funcție de tip comutator în alte limbaje de programare.

În exemplul de mai jos, am folosit limbajul de programare C

comutare (monthOfYear) {

cazul 1:

printf(„%s”, ianuarie);

pauză;

cazul 2:

printf(„%s”, februarie);

pauză;

cazul 3:

printf(„%s”, martie);

pauză;

cazul 4:

printf(„%s”, aprilie);

pauză;

cazul 5:

printf(„%s”, mai);

pauză;

cazul 6:

printf(„%s”, iunie);

pauză;

cazul 7:

printf(„%s”, iulie);

pauză;

cazul 8:

printf(„%s”, august);

pauză;

cazul 9:

printf(„%s”, septembrie);

pauză;

cazul 10:

printf(„%s”, octombrie);

pauză;

cazul 11:

printf(„%s”, noiembrie);

pauză;

cazul 12:

printf(„%s”, decembrie);

pauză;

Mod implicit:

printf(„Lună incorectă”);

pauză;

}

Acum, haideți să mergem mai departe în alternativele pentru funcția de comutare a casei Python și să înțelegem cum funcționează aceste alternative cu ajutorul exemplelor.

Citiți: Oportunități de carieră în Python: tot ce trebuie să știți

Folosind Maparea dicționarului

Dacă sunteți familiarizat cu alte limbaje de programare, atunci trebuie să știți că dicționarul folosește perechi cheie-valoare pentru a stoca un grup de obiecte în memorie. Când utilizați un dicționar ca alternativă la declarațiile switch-case, cheile perechii cheie-valoare funcționează ca un caz.

Următorul exemplu arată implementarea instrucțiunii switch case folosind un dicționar. Aici, definim o funcție month() pentru a imprima lună, lună din an.

Mai întâi, începeți prin a crea instrucțiuni case și scrieți funcții individuale pentru fiecare caz. Asigurați-vă că scrieți o funcție care abordează cazul implicit.

def ianuarie():

întoarce "ianuarie"

def februarie():

întoarcere „februarie”

def march():

întoarcere „marș”

def aprilie():

intoarce "aprilie"

def may():

returnează „mai”

def iunie():

intoarce "iunie"

def iulie():

intoarce "iulie"

def august():

intoarce "august"

def septembrie():

întoarcere „septembrie”

def octombrie():

întoarcere „octombrie”

def noiembrie():

întoarce „noiembrie”

def decembrie():

întoarce „decembrie”

implicit implicit():

returnează „lună incorectă”

Apoi, creați un obiect dicționar în Python și stocați toate funcțiile pe care le-ați definit în programul dvs.

comutator = {

0: „ianuarie”,

1: „februarie”,

2: „marș”,

3: „aprilie”,

4: „poate”,

5: „iunie”,

6: „iulie”,

7: „august”,

8: „septembrie”,

9: „octombrie”,

10: „noiembrie”,

11: „decembrie”

}

În cele din urmă, creați o funcție de comutare în programul dvs. care ar trebui să accepte un întreg ca intrare, să efectueze o căutare în dicționar și să invoce funcțiile corespunzătoare.

def month(monthOfYear):

return switcher.get(monthOfYear, default)()

Codul complet va arăta astfel

def ianuarie():

întoarce "ianuarie"

def februarie():

întoarcere „februarie”

def march():

întoarcere „marș”

def aprilie():

intoarce "aprilie"

def may():

returnează „mai”

def iunie():

intoarce "iunie"

def iulie():

intoarce "iulie"

def august():

intoarce "august"

def septembrie():

întoarce „septembrie”

def octombrie():

întoarcere „octombrie”

def noiembrie():

întoarce „noiembrie”

def decembrie():

întoarce „decembrie”

implicit implicit():

returnează „lună incorectă”

comutator = {

0: „ianuarie”,

1: „februarie”,

2: „marș”,

3: „aprilie”,

4: „poate”,

5: „iunie”,

6: „iulie”,

7: „august”,

8: „septembrie”,

9: „octombrie”,

10: „noiembrie”,

11: „decembrie”

}

luna def(lunaAnului):

return switcher.get(monthOfYear, default)()

imprimare(comutați(1))

imprimare(comutați(0))

Codul de mai sus tipărește următorul rezultat

februarie

ianuarie

Citește și: 42 de idei și subiecte interesante pentru proiecte Python pentru începători

Utilizarea claselor Python

De asemenea, puteți utiliza clasele Python ca alternativă la implementarea declarațiilor switch-case. O clasă este un constructor de obiecte care are proprietăți și metode. Să înțelegem acest lucru mai departe cu ajutorul aceluiași exemplu de mai sus. Aici, vom defini o metodă de comutare în interiorul unei clase de comutare Python.

Exemplu

În primul rând, vom defini o metodă de comutare în interiorul unei clase de comutare Python care ia o lună a anului ca argument, transformă rezultatul într-un șir.

clasa PythonSwitch:

def month(self, monthOf Year):

implicit = „Lună incorectă”

return getattr(self, 'case_' + str(monthOf Year), lambda: implicit)()

Notă: În exemplul de mai sus, am folosit două lucruri: cuvântul cheie lambda și metoda getattr().

  • Folosim cuvântul cheie lambda pentru a defini o funcție anonimă în Python. Cuvântul cheie Lambda invocă funcția implicită atunci când un utilizator introduce o intrare nevalidă.
  • Metoda getattr() este folosită pentru a invoca o funcție în Python.

Acum, creați funcții individuale pentru fiecare caz.

def ianuarie(auto):

întoarce "ianuarie"

def februarie(auto):

întoarcere „februarie”

def march(self):

intoarce "martie"

def aprilie (auto):

intoarce "aprilie"

def may(self):

returnează „mai”

def June(self):

intoarce "iunie"

def iulie (auto):

intoarce "iulie"

def august(self):

intoarce "august"

def septembrie (auto):

întoarce „septembrie”

def octombrie (auto):

întoarcere „octombrie”

def noiembrie(auto):

întoarcere „noiembrie”

def decembrie (auto):

întoarce „decembrie”

Codul complet va arăta astfel

clasa PythonSwitch:

def month(self, monthOf Year):

implicit = „Lună incorectă”

return getattr(self, 'case_' + str(monthOf Year), lambda: implicit)()

def ianuarie(auto):

întoarce "ianuarie"

def februarie(auto):

întoarcere „februarie”

def march(self):

intoarce "martie"

def aprilie (auto):

intoarce "aprilie"

def may(self):

returnează „mai”

def June(self):

intoarce "iunie"

def iulie (auto):

intoarce "iulie"

def august(self):

intoarce "august"

def septembrie (auto):

întoarce „septembrie”

def octombrie (auto):

întoarcere „octombrie”

def noiembrie(auto):

întoarce „noiembrie”

def decembrie (auto):

întoarce „decembrie”

my_switch = PythonSwitch()

imprimare (my_switch.month(1))

imprimare (my_switch.month(10))

Codul de mai sus tipărește următorul rezultat

ianuarie

octombrie

Verificați: Salariu pentru dezvoltatori Python în India

Concluzie

În acest blog, ați aflat despre declarațiile switch-case, care sunt alternativele declarațiilor switch-case și cum să le utilizați. După cum s-a explicat mai sus, Python nu are o funcție încorporată a carcasei comutatorului, dar puteți utiliza oricând aceste alternative pentru a face codul să arate îngrijit și curat și pentru a obține performanțe mai bune.

Dacă sunteți curios să aflați despre știința datelor, consultați programul Executive PG în știința datelor de la IIIT-B și upGrad, care este creat pentru profesioniști care lucrează și oferă peste 10 studii de caz și proiecte, ateliere practice practice, mentorat cu experți din industrie, 1 -on-1 cu mentori din industrie, peste 400 de ore de învățare și asistență profesională cu firme de top.

Faceți diferența între un dicționar obișnuit și un dicționar Python.

Dicționarul Python sau „Dict” este o structură de date încorporată în Python, care este folosită pentru a stoca o colecție neordonată de elemente. Spre deosebire de alte structuri de date Python care stochează valori unice, structura de date dicționar stochează perechi cheie-valoare în care fiecare cheie este unică. Nu își amintește ordinea de inserare a perechilor cheie-valoare și iterează prin chei. Pe de altă parte, un dicționar ordonat sau OrderedDict ține o evidență a ordinii de inserare a perechilor cheie-valoare. De asemenea, consumă mai multă memorie decât un dicționar obișnuit în Python, datorită implementării listei dublu legate. Dacă ștergeți și reintroduceți aceeași cheie, aceasta va fi inserată în poziția inițială, deoarece OrderedDict își amintește ordinea de inserare.

Ce operațiuni ale lui namedtuple o fac o opțiune convenabilă de utilizat pentru cazurile de comutare?

Namedtuple din Python efectuează diverse operații. Următoarea este o listă cu unele dintre cele mai frecvente operațiuni efectuate de namedtuple. Elementele dintr-un namedtuple pot fi accesate prin indicii lor, spre deosebire de un dicționar. Modul alternativ de a accesa elementele este prin numele cheii lor. Funcția make() returnează un namedtuple. Funcția _asadict() returnează un dicționar ordonat care este construit din valorile mapate. Funcția _replace() ia un nume de cheie ca argument și modifică valorile mapate cu aceasta. Funcția _fileds() returnează toate numele cheilor ale namedtuple-ului dat.

Când preferăm liste pentru stocarea datelor?

Lista Python este considerată a fi cea mai bună structură de date pentru a stoca datele în următoarele scenarii - O listă poate fi utilizată pentru a stoca diferite valori cu diferite tipuri de date și poate fi accesată doar de indicii respectivi. Când trebuie să efectuați operații matematice asupra elementelor, o listă poate fi folosită, deoarece vă permite să operați matematic elementele direct. Deoarece o listă poate fi redimensionată, aceasta poate fi folosită pentru a stoca datele atunci când nu sunteți sigur de numărul de elemente care trebuie stocate. Elementele listei sunt ușor de mutat și poate stoca și elemente duplicate, spre deosebire de set și dicționar.