MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Parametrii funcției

O funcție poate accepta parametri. Prin intermediul parametrilor, se pot transmite date către funcție. Un exemplu banal este funcția print(), care folosește parametri pentru a accepta valoarea de afișat în consolă.

Acum vom defini și utiliza propria funcție cu parametri:

def spune_salut(nume):
   print(f"Salut, {nume}")

spune_salut("Tom")
spune_salut("Bob")
spune_salut("Alice")

Funcția spune_salut are un parametru nume, și la apelarea funcției putem transmite acestui parametru o valoare. În interiorul funcției, putem folosi parametrul ca pe o variabilă obișnuită, de exemplu, pentru a afișa valoarea acestuia în consolă folosind funcția print. Astfel, în expresia:

spune_salut("Tom")

Șirul "Tom" va fi transmis parametrului nume. În consecință, la execuția programului, vom obține următorul output în consolă:

Salut, Tom
Salut, Bob
Salut, Alice

La apelarea funcției, valorile sunt transmise parametrilor în funcție de poziție. De exemplu, să definim și să apelăm o funcție cu mai mulți parametri:

def afiseaza_persoana(nume, varsta):
   print(f"Nume: {nume}")
   print(f"Vârstă: {varsta}")
afiseaza_persoana("Tom", 37)

Aici funcția afiseaza_persoana acceptă doi parametri: nume și varsta. La apelarea funcției:

afiseaza_persoana("Tom", 37)

Prima valoare - "Tom" este transmisă primului parametru, adică parametrului nume. A doua valoare - 37 este transmisă celui de-al doilea parametru - varsta. În interiorul funcției, valorile parametrilor sunt afișate în consolă:

Nume: Tom
Vârstă: 37

Valori implicite

Unii parametri ai funcției pot fi făcuți opționali, specificând valori implicite pentru aceștia la definirea funcției. De exemplu:

def spune_salut(nume="Tom"):
   print(f"Salut, {nume}")


spune_salut()         # aici parametrul nume va avea valoarea "Tom"
spune_salut("Bob")    # aici nume = "Bob"

Aici parametrul nume este opțional. Și dacă nu transmitem o valoare pentru acesta la apelarea funcției, se va folosi valoarea implicită, adică șirul "Tom". Output-ul în consolă al acestui program:

Salut, Tom
Salut, Bob

Dacă funcția are mai mulți parametri, parametrii opționali trebuie să fie plasați după cei obligatorii. De exemplu:

def afiseaza_persoana(nume, varsta=18):
   print(f"Nume: {nume}  Vârstă: {varsta}")


afiseaza_persoana("Bob")
afiseaza_persoana("Tom", 37)

Aici parametrul varsta este opțional și are implicit valoarea 18. Înaintea acestuia este plasat parametrul obligatoriu nume. Astfel, la apelarea funcției putem să nu transmitem o valoare parametrului varsta, dar trebuie să transmitem o valoare parametrului nume.

Dacă este necesar, putem face toți parametrii opționali:

def afiseaza_persoana(nume="Tom", varsta=18):
   print(f"Nume: {nume}  Vârstă: {varsta}")


afiseaza_persoana()              # Nume: Tom  Vârstă: 18
afiseaza_persoana("Bob")         # Nume: Bob  Vârstă: 18
afiseaza_persoana("Sam", 37)     # Nume: Sam  Vârstă: 37

Transmiterea valorilor parametrilor prin nume. Parametri numiți

În exemplele de mai sus, la apelarea funcției, valorile sunt transmise parametrilor în funcție de poziție. Dar valorile pot fi transmise și parametrilor prin nume. Pentru aceasta, la apelarea funcției, se specifică numele parametrului și i se atribuie o valoare:

def afiseaza_persoana(nume, varsta):
   print(f"Nume: {nume}  Vârstă: {varsta}")

afiseaza_persoana(varsta=22, nume="Tom")

În acest caz, valorile parametrilor varsta și nume sunt transmise prin nume. Și chiar dacă parametrul nume este primul în definirea funcției, putem scrie afiseaza_persoana(varsta=22, nume="Tom") la apelarea funcției și astfel să transmitem valoarea 22 parametrului varsta și șirul "Tom" parametrului nume.

Simbolul * permite stabilirea parametrilor care vor fi numiți - adică acei parametri cărora li se pot transmite valori doar prin nume. Toți parametrii care se află la dreapta simbolului * primesc valori doar prin nume:

def afiseaza_persoana(nume, *, varsta, companie):
   print(f"Nume: {nume}  Vârstă: {varsta}  Companie: {companie}")

afiseaza_persoana("Bob", varsta=41, companie="Microsoft")    

# Nume: Bob  Vârstă: 41  Companie: Microsoft

În acest caz, parametrii varsta și companie sunt numiți.

Putem face toți parametrii numiți, plasând simbolul * înaintea listei de parametri:

def afiseaza_persoana(*, nume, varsta, companie):
   print(f"Nume: {nume}  Vârstă: {varsta}  Companie: {companie}")

Dacă dorim să definim parametri cărora li se pot transmite valori doar prin poziție, adică parametri poziționali, putem folosi simbolul /: toți parametrii care se află înaintea simbolului / sunt poziționali și pot primi valori doar prin poziție:

def afiseaza_persoana(nume, /, varsta, companie="Microsoft"):
   print(f"Nume: {nume}  Vârstă: {varsta}  Companie: {companie}")


afiseaza_persoana("Tom", companie="JetBrains", varsta=24)    

# Nume: Tom  Vârstă: 24  Companie: JetBrains
afiseaza_persoana("Bob", 41)                                  

# Nume: Bob  Vârstă: 41  Companie: Microsoft

În acest caz, parametrul nume este pozițional.

Pentru o funcție, putem defini simultan parametri poziționali și numiți.

def afiseaza_persoana(nume, /, varsta=18, *, companie):
   print(f"Nume: {nume}  Vârstă: {varsta}  Companie: {companie}")
afiseaza_persoana("Sam", companie="Google")              

# Nume: Sam  Vârstă: 18  Companie: Google
afiseaza_persoana("Tom", 37, companie="JetBrains")        

# Nume: Tom  Vârstă: 37  Companie: JetBrains
afiseaza_persoana("Bob", companie="Microsoft", varsta=42)

# Nume: Bob  Vârstă: 42  Companie: Microsoft

În acest caz, parametrul nume este pozițional și obligatoriu - îi putem transmite o valoare doar prin poziție.

Parametrul companie este numit, deoarece se află la dreapta simbolului *. Parametrul varsta poate primi valori atât prin nume, cât și prin poziție.

Număr variabil de parametri

Folosind simbolul stea *, putem defini un parametru prin care se pot transmite un număr variabil de valori. Acest lucru poate fi util atunci când dorim ca funcția să primească mai multe valori, dar nu știm exact câte. De exemplu, să definim o funcție de calculare a sumei numerelor:

def suma(*numere):
   rezultat = 0
   for n în numere:
       rezultat += n
   print(f"suma = {rezultat}")

suma(1, 2, 3, 4, 5)      # suma = 15
suma(3, 4, 5, 6)         # suma = 18

În acest caz, funcția suma acceptă un singur parametru - *numere, dar steaua înaintea numelui parametrului indică faptul că, de fapt, putem transmite un număr variabil de valori sau un set de valori în locul acestui parametru. În funcția propriu-zisă, putem parcurge acest set de valori folosind un ciclu for, putem obține fiecare valoare din acest set în variabila n și putem efectua diverse acțiuni cu aceasta. De exemplu, în acest caz, se calculează suma numerelor transmise.

← Lecția anterioară Lecția următoare →