28.01.2015 Views

Tutorial Python - Starship

Tutorial Python - Starship

Tutorial Python - Starship

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

instrucţiunea global.<br />

Parametrii actuali ai unei funcţii apelate sunt introduşi în tabela de simboluri locală a acelei funcţii în momentul<br />

apelării ei. Astfel transferul argumentelor se face utilizând apelul prin valoare (unde valoare este totdeauna un<br />

obiect referinţă, nu valoarea obiectului). 1<br />

Când o funcţie apelează o alta funcţie, este creată o nouă tabelă de simboluri pentru funcţia apelată.<br />

Definirea unei funcţii trece numele funcţiei în tabela de simboluri curentă.<br />

Funcţia nou creată este recunoscută de interpretor ca o funcţie definită de utilizator. În <strong>Python</strong> există un mecanism<br />

de redenumire a funcţiilor:<br />

>>> fib<br />

<br />

>>> f = fib<br />

>>> f(100)<br />

1 1 2 3 5 8 13 21 34 55 89<br />

Aţi putea obiecta că funcţia fib este o procedură nu o funcţie. În <strong>Python</strong>, la fel ca în C, procedurile sunt<br />

funcţii, numai că nu returnează nici o valoare. Tehnic vorbind, procedurile returnează totuşi o valoare, aceasta<br />

este None(niciuna). None este un cuvânt cheie (predefinit). În mod normal valoarea None nu este afişată de<br />

interpretor. Totuşi dacă doriţi să vă convingeţi că aşa funcţionează procedurile încercaţi următorul exemplu:<br />

>>> print fib(0)<br />

None<br />

Este foarte simplu să construim o funcţie care întoarce ca rezultat şirul lui Fibonacci:<br />

>>> def fib2(n): # Intoarce sirul lui Fibonacci pana la n<br />

... "Intoarce o lista continand sirul lui Fibonacci pana la n"<br />

... result = []<br />

... a, b = 0, 1<br />

... while b< n:<br />

... result.append(b) # vezi mai jos<br />

... a, b = b, a+b<br />

... return result<br />

...<br />

>>> f100 = fib2(100) # apelarea functiei<br />

>>> f100 # afisarea rezultatului<br />

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]<br />

Acest exemplu demonstrează mai multe facilităţi ale limbajului <strong>Python</strong>:<br />

• Instrucţiunea return întoarce rezultatul funcţiei. return fără nici un parametru întoarce ca rezultat al<br />

funcţiei valoarea None. Puteţi folosi return fără parametrii pentru a încheia execuţia unei funcţii înainte<br />

de a se ajunge la finalul instrucţiunilor din cadrul funcţiei. Valoarea None este de asemenea întoarsă ca<br />

rezultat al unei funcţii atunci când au fost executate toate instrucţiunile procedurii.<br />

• Instrucţiunea result.append(b) apelează o metodă a obiectului result. O metodă este o funcţie<br />

care ‘aparţine’ unui obiect. Metodele sunt apelate folosind sintaxa obj.metodă(unde obj este un obiect,<br />

poate fi şi o expresie, iar metodă este numele metodei ce este apelată). În funcţie de tipul lor, obiectele<br />

pot avea diferite metode. Este posibil să existe metode de tipuri diferite fără a se crea confuzii. Este de<br />

asemenea posibil să creaţi obiecte şi metode folosind clasele, dar despre clase vom discuta mai târziu.<br />

Metoda append este definită pentru obiecte de tip listă, şi adaugă un element la sfârşitul listei. În acest<br />

exemplu ar fi echivalentă cu ‘result = result + [b]’ dar mult mai eficientă.<br />

1 De fapt apelul prin referinţă poate fi mai bine înţeles daca este transmis un obiect modificabil şi apelantul va vedea dacă în urma apelarii<br />

obiectul s-a modificat ( ex.: un element inserat într-o listă).<br />

22 Capitolul 4. Structuri de control

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!