Ce vei învăța astăzi?
După această lecție vei înțelege cum transmitem date unei funcții prin parametri (datele de intrare ale funcției, scrise între paranteze), cum ne dă funcția un rezultat prin return (instrucțiunea care trimite valoarea înapoi locului de apel) și deosebești variabilele locale (definite în interiorul funcției) de cele globale (definite în afara funcțiilor).
Parametrii unei funcții
Parametrii sunt datele de intrare ale unei funcții. Îi scriem între paranteze, la definire: def arie(L, l):. Când apelăm funcția, transmitem argumente concrete (valorile reale date funcției la apel): arie(5, 3).
Analogie:
O funcție este ca o mașină de spălat. Parametrii sunt hainele pe care le pui înăuntru. Fiecare spălare primește haine diferite, dar mașina face același lucru.
def maxim(a, b):
if a > b:
return a
else:
return b
rezultat = maxim(7, 3)
print(rezultat)
Observă: parametrii a și b primesc valorile 7 și 3 la apel. Funcția compară cele două valori și returnează pe cea mai mare.
Valoarea returnată cu return
Instrucțiunea return face ca funcția să dea o valoare înapoi locului din care a fost apelată. După return, funcția se oprește.
def arie(L, l):
return L * l
rezultat = arie(5, 3)
print("Aria este:", rezultat)
Reține: print doar afișează pe ecran, dar return trimite valoarea înapoi ca rezultat, pe care îl putem salva într-o variabilă.
Variabile locale și variabile globale
O variabilă definită în interiorul unei funcții este locală: există doar acolo și nu poate fi folosită în afara ei. O variabilă definită în afara oricărei funcții este globală.
| Tip de variabilă | Unde se definește | Unde poate fi folosită |
|---|---|---|
| Locală | În interiorul funcției | Doar în interiorul funcției |
| Globală | În afara funcțiilor | În tot programul, inclusiv în funcții |
x = 10 # variabila globala
def aduna(n):
total = x + n # total este locala
return total
print(aduna(5))
Exercițiu de completare
Completează enunțul cu cuvintele potrivite:
Valorile pe care le primește o funcție la intrare se numesc ______. Instrucțiunea ______ trimite o valoare înapoi locului din care a fost făcut ______-ul. O variabilă definită în interiorul funcției este o variabilă ______.
Bancă de cuvinte:
Test de înțelegere
Test rapid - parametri și valori returnate:
1. Instrucțiunea return face ca funcția să:
2. O variabilă definită în interiorul unei funcții este:
3. Care este rezultatul expresiei max(3, 7)?
Test suplimentar
Test suplimentar - parametri și return:
1. Ce afișează programul def adunare(a, b): return a + b; print(adunare(2, 3))?
2. După instrucțiunea return, funcția:
3. Parametrii unei funcții sunt:
Aprofundare
Prin valoare sau prin referință? În Python, numerele și șirurile de caractere (tipuri imuabile) se transmit prin valoare: modificarea lor în interiorul funcției nu se vede în afara ei. Listele (tipuri mutabile) se transmit prin referință: o modificare făcută în funcție rămâne vizibilă și în afara ei.
- Valori implicite: un parametru poate avea valoare implicită:
def f(a, b=2). Dacă apelul nu transmite al doilea argument, se folosește 2. Parametrii cu valoare implicită se scriu mereu la sfârșitul listei de parametri. - Apel cu nume: putem apela
f(b=5, a=3), numind fiecare argument, indiferent de ordine. - Return multiplu: o funcție poate returna mai multe valori separate prin virgulă:
return a, b- Python le împachetează într-un tuplu. - Variabile globale: pentru a modifica o variabilă globală din interiorul unei funcții, o declarăm cu
global x; fără această declarație, Python creează o variabilă locală cu același nume. - Caz particular: o funcție fără
returnîntoarce implicitNone; de exemplu,print()întoarce None.
PbInfo - Maximul a două numere
Enunț:
Cerință: Se definesc două numere a și b. Să se afișeze maximul lor, folosind o funcție max2(a, b) care întoarce valoarea cu ajutorul lui return.
Date de intrare:
Programul citește de la tastatură două numere întregi a și b, pe aceeași linie.
Date de ieșire:
Programul va afișa pe ecran maximul dintre a și b.
Restricții și precizări:
Valorile citite sunt numere întregi, iar n este un număr natural, cu 1 <= n <= 1000.
Exemplu:
Intrare:
7 3
Ieșire:
7
Cum gândim soluția:
- Definim funcția
max2(a, b)cu doi parametri - Comparăm cele două valori și folosim return pentru cea mai mare
- Citim a și b cu
map(int, input().split())și apelăm funcția
Scrie soluția în Python:
Soluție corectă:
def max2(a, b):
if a > b:
return a
return b
a, b = map(int, input().split())
print(max2(a, b))
Ce învățăm: funcția primește parametri și returnează o valoare prin return, iar apelul se face în print.
PbInfo - Aria dreptunghiului
Enunț:
Cerință: Să se calculeze aria unui dreptunghi, folosind o funcție arie(L, l) care primește lungimea și lățimea și întoarce produsul lor.
Date de intrare:
Programul citește de la tastatură lungimea L și lățimea l, pe aceeași linie.
Date de ieșire:
Programul va afișa pe ecran aria dreptunghiului (L * l).
Restricții și precizări:
Valorile citite sunt numere întregi, iar n este un număr natural, cu 1 <= n <= 1000.
Exemplu:
Intrare:
5 3
Ieșire:
15
Cum gândim soluția:
- Definim funcția
arie(L, l)cu doi parametri - În corp returnăm produsul:
return L * l - Citim L și l și afișăm rezultatul apelului funcției
Scrie soluția în Python:
Soluție corectă:
def arie(L, l):
return L * l
L, l = map(int, input().split())
print(arie(L, l))
Ce învățăm: o funcție cu parametri poate calcula și returna un rezultat, iar apelul se poate pune direct în print.
Exercițiul Practic: Funcții cu parametri și return
Sarcini de lucru
Rezolvă cele două sarcini folosind funcții cu parametri și instrucțiunea return
Sarcina 1: Perimetrul dreptunghiului
Cerință: Scrie o funcție perimetru(L, l) care întoarce perimetrul dreptunghiului folosind formula 2 * (L + l). Citește L și l și afișează rezultatul.
Soluție:
def perimetru(L, l):
return 2 * (L + l)
L, l = map(int, input().split())
print(perimetru(L, l))
Verifică: funcția primește cei doi parametri, calculează 2 * (L + l) și returnează rezultatul cu return.
Sarcina 2: Dublul a trei numere
Cerință: Scrie o funcție dublu(x) care întoarce dublul unui număr. Citește 3 valori de la tastatură (una pe linie) și afișează dublul fiecăreia, apelând funcția.
Soluție:
def dublu(x):
return 2 * x
for i in range(3):
n = int(input())
print(dublu(n))
Verifică: funcția este apelată de 3 ori, o dată pentru fiecare valoare citită, fiecare apel întorcând un rezultat diferit.