MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Funcția ca tip, parametru și rezultat al altei funcții

Funcția ca tip

În Python, funcția reprezintă de fapt un tip distinct. Astfel, putem atribui unei variabile o funcție și apoi, folosind variabila, să apelăm funcția respectivă. De exemplu:

def spune_salut(): print("Salut")
def spune_la_revedere(): print("La revedere")

mesaj = spune_salut
mesaj()       # Salut
mesaj = spune_la_revedere
mesaj()       # La revedere

În acest caz, variabilei mesaj i se atribuie una dintre funcții. Mai întâi, i se atribuie funcția spune_salut():

mesaj = spune_salut

După aceasta, variabila mesaj va indica spre funcția respectivă, adică va reprezenta de fapt funcția spune_salut. Asta înseamnă că putem apela variabila mesaj ca pe o funcție obișnuită:

mesaj()       # Salut

Acest lucru va duce la executarea funcției spune_salut, iar în consolă va fi afișat șirul "Salut". Apoi, într-un mod similar, putem atribui variabilei mesaj o altă funcție și să o apelăm.

În mod similar, putem apela o funcție cu parametri și să returnăm rezultatul acesteia:

def suma(a, b): return a + b
def inmulteste(a, b): return a * b

operație = sumă
rezultat = operatie(5, 6)
print(rezultat)   # 11

operație = inmulteste
print(operatie(5, 6))      # 30

Funcția ca parametru al unei funcții

Deoarece o funcție în Python poate reprezenta o valoare la fel ca un șir de caractere sau un număr, o putem transmite ca parametru unei alte funcții. De exemplu, să definim o funcție care afișează în consolă rezultatul unei operații:

def executa_operatie(a, b, operatie):
   rezultat = operație(a, b)
   print(f"rezultat = {rezultat}")

def suma(a, b): return a + b
def inmulteste(a, b): return a * b

executa_operetie(5, 4, suma)         # rezultat = 9
executa_operatie(5, 4, inmulteste)   # rezultat = 20

În acest caz, funcția execută_operație are trei parametri, dintre care al treilea parametru, conform presupunerii, va reprezenta o funcție care acceptă doi parametri și returnează un rezultat. Cu alte cuvinte, al treilea parametru - operație reprezintă o operație, dar la momentul definirii funcției execută_operație nu știm exact ce va fi această operație. Știm doar că primește doi parametri și returnează un rezultat, care apoi este afișat în consolă.

La apelarea funcției execută_operație, putem transmite ca al treilea parametru o altă funcție, de exemplu, funcția sumă:

executa_operatie(5, 4, suma)

Astfel, în acest caz, parametrul operație va reprezenta funcția sumă și va returna suma a două numere.

Apoi, în mod similar, la apelul funcției execută_operație, putem transmite al treilea parametru o altă funcție - înmulțește, care va efectua înmulțirea numerelor:

executa_operatie(5, 4, inmulteste)   # rezultat = 20

Astfel, obținem funcții mai flexibile care acceptă alte funcții prin intermediul parametrilor.

Funcția ca rezultat al altei funcții

De asemenea, o funcție în Python poate returna o altă funcție. De exemplu, să definim o funcție care, în funcție de valoarea unui parametru, returnează una dintre mai multe operații:

def suma(a, b): return a + b
def scade(a, b): return a - b
def inmulteste(a, b): return a * b
def selecteaza_operatie(alegere):
   daca alegere == 1:
       return suma
   elif alegere == 2:
       return scade
   else:
       return inmulteste

operatie = selecteaza_operatie(1)     # operatie = suma
print(operatie(10, 6))                # 16
operatie = selecteaza_operatie(2)     # operatie = scade
print(operatie(10, 6))                # 4
operatie = selecteaza_operatie(3)     # operatie = inmulteste
print(operatie(10, 6))                # 60

În acest caz, funcția selecteaza_operatie, în funcție de valoarea parametrului alegere, returnează una dintre cele trei funcții - sumă, scade și înmulțește. Apoi, putem obține rezultatul funcției selecteaza_operatie în variabila operație:

operație = selecteaza_operatie(1)

Astfel, în acest caz, funcției selecteaza_operatie i se transmite numărul 1, ceea ce înseamnă că va returna funcția sumă. Prin urmare, variabila operație va indica de fapt funcția sumă, care efectuează adunarea a două numere:

print(operatie(10, 6))     # 16 - de fapt este echivalent cu suma(10, 6)

În mod similar, putem obține și executa și alte funcții.

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