Sunteți pe pagina 1din 7

3.12.

2014

E-learn.ro

Introducere in Python - Partea a II-a. Functii.

01.08.2009

In acest tutorial vei putea citi despre functii predefinite in Python si functii definite de utilizator, cat si despre preluarea inputului de
la tastatura.
8209 afisari

Rating

(2 voturi)

30 min

Functii
Introducere
Ce sunt functiile? In esenta, functiile sunt sectiuni de cod ce executa o anumita sarcina si pe care le poti
incorpora in propriile programe mai mari. Dupa ce ai creat o functie, o poti utiliza oricand, oriunde. Aceasta te
scuteste de timpul si de efortul de a-i spune iar si iar computerului ce sa faca de fiecare data cand executa o
sarcina obisnuita, de exemplu preluarea inputului de la tastatura.

Utilizarea unei functii


Python are o multime de functii predefinite pe care le poti utiliza imediat, prin simpla apelare a acestora.
Apelarea inseamna transmiterea unor parametri, pe care functia ii va folosi pentru a returna un rezultat. Iata
forma generala pe care o are apelarea unei functii:
nume_functie(parametri)
Vezi? Usor.
nume_functie identifica functia pe care vrei sa o utilizezi (de exemplu, functia raw_input, care va fi
prima functie Python pe care o vom analiza).
Parametrii sunt valorile pe care le trimiti functiei pentru a-i spune ce ar trebui sa faca si cum ... de
exemplu, daca o functie inmulteste un numar cu 5 si valoarea parametrului este 70, functia va executa
70x5.

Parametri si valori returnate - comunicarea cu functiile


Sa presupunem ca avem un program ce realizeaza inmultirea cu 5, dar cum arata asta in limbaj Python?
Programul trebuie sa vada rezultatul, sa vada ce reprezinta 70x5 sau daca exista vreo problema undeva (de
exemplu daca parametrul furnizat este o litera in loc de un numar). Deci, cum lucreaza o functie?
In esenta, cand un computer ruleaza o functie, nu vede numele acesteia, ci rezultatul a ceea ce a executat
functia. Variabilele functioneaza la fel - computerul nu vede numele variabilei, ci valoarea acesteia. Sa denumim
aceasta functie care inmulteste un numar cu 5 - multiply(). Deci, daca ai tastat:
a = multiply(70)
Computerul vede de fapt:
a = 350
Observatie: Nu te obosi sa testezi acest cod - pentru a functiona, trebuie mai intai sa definesti functia
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-ii-a-functii-/149/1/374.htm

1/7

3.12.2014

E-learn.ro

Observatie: Nu te obosi sa testezi acest cod - pentru a functiona, trebuie mai intai sa definesti functia
multiply().
Functia va fi executata, apoi va returna un numar in programul principal, bazat pe parametrii oferiti.
Acum sa incercam apelul unei functii predefinite si sa vedem cum lucreaza. Functia respectiva este denumita
raw_input si ii solicita utilizatorului sa tasteze ceva, apoi transforma datele introduse intr-un sir de caractere
(string). Incearca te rog codul de mai jos:
# aceasta linie retine datele introduse in variabila a
a = raw_input("Scrie un text, ce va fi afisat din nou pe ecran:")
# afiseaza continutul variabilei a
print a
Sa spunem ca in programul de mai sus ai tastat "hello". Pentru computer, acest program ar arata astfel:
a = "hello"
print "hello"
Aminteste-ti, o variabila este doar o valoare stocata. Pentru computer, variabila "a" nu arata ca un "a" - vede
valoarea stocata in interiorul sau. Functiile sunt similare - programul principal (acesta este cel care ruleaza
functia) va vedea doar valorile primite ca urmare a apelarii.

Un calculator
Sa scriem un alt program care va actiona ca un calculator. De data aceasta vom face ceva mai aventuros. Va
exista un meniu care te va intreba daca doresti sa inmultesti doua numere, sa le aduni, sa le imparti sau sa le
scazi. Exista o singura problema - functia raw_input returneaza un string, iar noi avem nevoie de numarul 1,
nu de litera 1 (si da, in python este o diferenta).
Din fericire, avem la dispozitie functia input care returneaza ce ai tastat, dar de data aceasta ca numar. Daca
ai tastat un numar intreg, ceea ce rezulta este un numar intreg. Si daca scrii acel numar intr-o variabila,
variabila va fi de tip integer, ceea ce inseamna ca o poti utiliza in operatii aritmetice.
Acum, sa cream acest calculator. Ne dorim un meniu care este afisat de fiecare data cand terminam de adunat,
scazut, etc. Cu alte cuvinte, sa execute o bucla continua.
Sa scriem asta intr-un limbaj pe intelesul tuturor:
INCEPE PROGRAMUL
afiseaza mesaj de inceput
in timp ce programul ruleaza, executa:
#Afiseaza operatiile aritmetice permise
afiseaza Optiunea 1 - adunare
afiseaza Optiunea 2 - scadere
afiseaza Optiunea 3 - inmultire
afiseaza Optiunea 4 - impartire
afiseaza Optiunea 5 - iesire din program
citeste optiunea aleasa
daca este optiunea 1:
citeste primul numar
citeste cel de-al doilea numar
aduna numerele
afiseaza rezultatul
daca este optiunea 2:
citeste primul numar
citeste cel de-al doilea numar
efectueaza scaderea
afiseaza rezultatul
daca este optiunea 3:
citeste primul numar
citeste cel de-al doilea numar
inmulteste-le
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-ii-a-functii-/149/1/374.htm

2/7

3.12.2014

E-learn.ro

inmulteste-le
afiseaza rezultatul
daca este optiunea 4:
citeste primul numar
citeste cel de-al doilea numar
efectueaza impartirea
afiseaza rezultatul
daca este optiunea 5:
iesire din bucla
afiseaza un mesaj de iesire
TERMINA PROGRAMUL
Acum sa ii dam o forma pe care o poate intelege python:
#program calculator
# variabila loop indica programului daca sa execute bucla sau nu
# 1 inseamna executa bucla, orice alta valoare inseamna iesire din bucla
loop = 1
# aceasta variabila retine optiunea aleasa de utilizator
choice = 0
while loop == 1:
#afiseaza optiunile
print "Bine ai venit la calculator.py"
print "Optiunile tale sunt:"
print " "
print "1) Adunare"
print "2) Scadere"
print "3) Inmultire"
print "4) Impartire"
print "5) Iesire din calculator.py"
print " "
choice = input("Alege optiunea dorita: ")
if choice == 1:
add1 = input("Aduna asta: ")
add2 = input("cu asta: ")
print add1, "+", add2, "=", add1 + add2
elif choice == 2:
sub2 = input("Scade asta: ")
sub1 = input("din asta: ")
print sub1, "-", sub2, "=", sub1 - sub2
elif choice == 3:
mul1 = input("Inmulteste asta: ")
mul2 = input("cu asta: ")
print mul1, "*", mul2, "=", mul1 * mul2
elif choice == 4:
div1 = input("Imparte asta: ")
div2 = input("la asta: ")
print div1, "/", div2, "=", div1 / div2
elif choice == 5:
loop = 0
print "Iti multumim ca ai utilizat calculator.py!"
Este un program impresionant! Copiaza asta in python IDLE, salveaza codul cu numele de 'calculator.py' si
ruleaza-l (F5). Joaca-te putin - incearca-i toate optiunile, introducand numere intregi sau rationale (in python,
zecimalele sunt delimitate prin punct(.), cunoscut in programare ca floating point). Incearca sa introduci text si
vei vedea cum programul nu va mai rula (aceasta problema se poate rezolva prin validarea datelor si erori, la
care ne vom referi mai tarziu.)

Definirea propriilor functii


http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-ii-a-functii-/149/1/374.htm

3/7

3.12.2014

E-learn.ro

Definirea propriilor functii


Este bine sa utilizezi functiile altora, dar ce-ar fi sa-ti scrii propriile functii, pentru a economisi timp si poate
pentru a le utiliza in alte programe? Aici intra in scena operatorul def (Un operator este ceva ce ii spune
programului python ce sa faca, de ex. operatorul + ii spune sa adune, operatorul if ii spune sa execute ceva
daca sunt indeplinite anumite conditii.)
Iata cum functioneaza operatorul def:
def nume_functie(parametru_1,parametru_2):
{acesta este codul functiei}
{si mai mult cod}
{si mai mult cod}
return {valoare ce trebuie returnata in programul principal}
{cod ce nu face parte din functie}
{pentru ca nu este indentat}
# nu uita sa pui ":" la sfarsitul liniei ce incepe cu 'def'
nume_functie reprezinta denumirea functiei, fiind urmat de codul functiei, care este indentat incepand cu
urmatoarea linie (ne vom ocupa mai tarziu de parametru_1 si parametru_2, acum imagineaza-ti ca nu se afla
nimic intre paranteze).
Functiile ruleaza complet independent de programul principal. Iti amintesti ca am spus ca atunci cand
computerul apeleaza o functie, nu vede functia, ci valoarea returnata de aceasta? O functie este asemeni unui
program in miniatura caruia ii sunt transmisi niste parametri - ii ruleaza singur si apoi returneaza o valoare.
Programul principal vede doar valoarea returnata. Daca acea functie ar fi zburat pana la luna si inapoi si la
sfarsit ar avea:
return "Hello"
atunci tot ceea ce ar vedea programul ar fi string-ul "hello".
Deoarece este un program distinct, o functie nu vede niciuna dintre variabilele aflate in programul principal si
programul principal nu vede vreuna din variabilele definite in cadrul functiei. De exemplu, iata o functie care
afiseaza cuvantul "hello" pe ecran si apoi returneaza valoarea "1234":
# Mai jos este definita functia
def hello():
print "hello"
return 1234
# Iata apelul functiei
print hello()

Gandeste-te la ultima linie de cod de mai sus. Ce am facut? Introdu codul in IDLE (poti sari peste comentarii) si
vezi ce face. Rezultatul arata astfel:
hello
1234
Deci, ce s-a intamplat?
1. Cand a fost rulat 'def hello()', a fost creata o functie denumita "hello".
2. Cand a fost rulata linia 'print hello()', a fost executata functia "hello" (a fost rulat codul acesteia).
3. Functia "hello" a afisat "hello" pe ecran, apoi a returnat numarul "1234" in programul principal.
4. Programul principal vede acum linia ca fiind "print 1234" si ca rezultat a afisat "1234".

Argumentele functiilor
Ne vom mai referi la un singur subiect legat de functii - transmiterea parametrilor. Aminteste-ti cum am definit
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-ii-a-functii-/149/1/374.htm

4/7

3.12.2014

E-learn.ro

prototipul unei functii:


def nume_functie(parametru_1,parametru_2):
{acesta este codul functiei}
{si mai mult cod}
{si mai mult cod}
return {valoare ce trebuie returnata in programul principal}
In codul de mai sus, parametru_1 si parametru_2 (intre paranteze) reprezinta argumentele functiei. O functie
poate avea oricate argumente, separate prin virgule. La apelul acesteia, prima valoare aflata in interiorul
parantezelor va fi transmisa variabilei parametru_1. Cea de-a doua (dupa prima virgula) va merge la variabila
parametru_2. Aceasta se intampla indiferent de cat de multi parametri exista in functie (de la 0 la infinit). De
exemplu:
def functie_amuzanta(cuvant1,cuvant2,cuvant3):
print "Propozitia creata este: " + cuvant1 + cuvant2 + cuvant3
return cuvant1 + cuvant2 + cuvant3
Ca exemplu, poti apela functia de mai sus astfel: functie_amuzanta("La ","multi ","ani!"). Prima valoare (care
este "La ") va fi trimisa in variabila denumita cuvant1. Cea de-a doua valoare din paranteze ("multi ") va fi in
variabila denumita cuvant2 si asa mai departe. Astfel sunt trimise valorile din programul principal in functii - in
paranteze, dupa numele functiei.

Un program complet
Aminteste-ti de programul calculator. Ti s-a parut cam confuz? Cred ca da, deci sa-l rescriem cu ajutorul
functiilor.
Mai intai vom defini toate functiile pe care le vom utiliza cu ajutorul operatorului def. Apoi vom avea programul
principal, cu acel cod confuz inlocuit de functii dragute si clare, ceea ce il va face mai usor de citit si de inteles.
# program calculator
# NU AVEM NEVOIE DE COD AICI
# In continuare definim functiile
# Functia menu afiseaza meniul
def menu():
#afiseaza optiunile
print "Bine ai venit la calculator.py"
print "Optiunile tale sunt:"
print " "
print "1) Adunare"
print "2) Scadere"
print "3) Inmultire"
print "4) Impartire"
print "5) Iesire din calculator.py"
print " "
return input ("Alege optiunea: ")
# Functia add aduna doua numere
def add(a,b):
print a, "+", b, "=", a + b
# Functia sub scade doua numere
def sub(a,b):
print b, "-", a, "=", b - a
# Functia mul inmulteste doua numere
def mul(a,b):
print a, "*", b, "=", a * b
# Functia div imparte doua numere
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-ii-a-functii-/149/1/374.htm

5/7

3.12.2014

# Functia div imparte doua numere


def div(a,b):
print a, "/", b, "=", a / b

E-learn.ro

# ACUM INCEPE PROGRAMUL PRINCIPAL


loop = 1
choice = 0
while loop == 1:
choice = menu()
if choice == 1:
add(input("Aduna asta: "),input("cu asta: "))
elif choice == 2:
sub(input("Scade asta: "),input("din asta: "))
elif choice == 3:
mul(input("Inmulteste asta: "),input("cu asta: "))
elif choice == 4:
div(input("Imparte asta: "),input("la asta: "))
elif choice == 5:
loop = 0
print "Iti multumim ca ai utilizat calculator.py!"
# AICI SE TERMINA PROGRAMUL
Programul initial avea 34 linii de cod. Noul program are 35! Este putin mai lung, dar daca il privesti cum trebuie,
este de fapt mai simplu.
Toate functiile necesare au fost definite la inceput. Aceasta nu este de fapt o parte a programului principal formeaza o multime de programele pe care le vei apela mai tarziu. Le-ai putea reutiliza in alt program daca ai
avea nevoie, fara a-i spune din nou computerului cum sa adune si sa scada.
Daca privesti partea principala a programului (intre linia "loop=1" si 'print "Iti multumim..."'), sunt doar 15 linii
de cod. Aceasta inseamna ca daca ai fi vrut sa scrii acest program in mod diferit, ar fi trebuit sa scrii
aproximativ 15 linii fata de 34 de linii cate ai fi avut in mod normal fara functii.

Trucuri pentru transmiterea parametrilor


Functia add ar putea fi apelata astfel:
add(input("Aduna asta: "),input("cu asta: "))
Am vrut sa am totul intr-o singura linie, cu cat mai putine variabile posibil. Iti amintesti cum aratau functiile in
programul principal? Daca numerele transmise functiei add() ar fi fost 2 si 30, programul principal ar fi vazut
urmatoarele:
add(2,30)
Aceasta va rula apoi functia add, adunand 2 si 30, apoi afisand rezultatul. Functia de adunare nu include
instructiunea return, ceea ce inseamna ca nu returneaza nimic in programul principal. Pur si simplu aduna 2
numere si afiseaza rezultatul pe ecran, dar programul principal nu vede nimic din toate acestea.
In loc de (input("Aduna asta: ") si input("cu asta: ")) ai putea utiliza ca parametri doua variabile. De
exemplu:
num1 = 45
num2 = 7
add(num1,num2)
Pentru ce avem mai sus, aminteste-ti ca functia careia ii trimiti variabilele nu le poate modifica - sunt utilizate
pur si simplu ca valori. O alta modalitate ar fi sa apelezi functia direct cu valorile numerice:
add(45,7)
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-ii-a-functii-/149/1/374.htm

6/7

3.12.2014

add(45,7)

E-learn.ro

Exemplul de mai sus este corect deoarece singurul lucru vazut de functie sunt valorile transmise ca parametri.
Aceste valori sunt asezate in argumentele corespunzatoare din definitia functiei "add", respectiv in variabilele
a si b.
Pe scurt:
Singurul lucru vazut de functii sunt parametrii trimisi din programul principal.
Singurul lucru vazut de programul principal sunt valorile returnate de functii.
In urmatoarea parte a acestei serii vei putea analiza si alte exemple de utilizare a functiilor.

Copyright 2008-2010 E-LEARN.ro. Toate drepturile rezervate. Conceput si realizat de Neokinetics Software.

http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-ii-a-functii-/149/1/374.htm

7/7

S-ar putea să vă placă și