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.

def f(a, L=None):<br />

if L is None:<br />

L = []<br />

L.append(a)<br />

return L<br />

4.7.2 Argumente de tip cuvinte cheie<br />

Funcţiile pot fi apelate folosind în loc de argumente cuvinte cheie de forma: cuvant_cheie = valoare.<br />

Pentru exemplificare observaţi funcţia:<br />

def parrot(voltage, state=’mort’, action=’zboara’, type=’Norvegian Blue’):<br />

print "-- Acest papagal nu", action<br />

print "daca pui", voltage, "volti prin el."<br />

print "-- Doamne !", type<br />

print "-- E ", state, "!"<br />

care poate fi apelată în mai multe moduri:<br />

parrot(1000)<br />

parrot(action=’BOOM’, voltage=10000)<br />

parrot(’o mie’, state=’apasa iarba’)<br />

parrot(’un milion’, ’fara viata’, ’sare’)<br />

Dar următoarele apeluri ar genera erori:<br />

parrot() # Lipseste argumentul obligatoriu voltage<br />

parrot(voltage=5.0, ’mort’) # Dupa cuvantul cheie trebuie sa urmeze<br />

un argument tip cheie<br />

parrot(110, voltage=220) # Doua valori atribuite aceleiasi varibile<br />

parrot(actor=’John Cleese’) # Cuvant cheie necunoscut<br />

În general o listă de argumente trebuie să aibe oricâte argumente poziţionale, urmate de oricâte argumente de<br />

tip cuvinte cheie, unde cuvintele cheie trebuie alese din lista parametrilor formali. Nu este important dacă un<br />

parametru formal are o valoare implicită sau nu. Nici un argument nu poate primi o valoare de mai multe ori -<br />

numele de parametrii formali corespunzătoare argumentelor poziţionale nu pot fi folosite drept cuvinte cheie în<br />

cadrul aceluiaşi apel. Iată un exemplu cu erori datorate acestei reguli:<br />

>>> def function(a):<br />

... pass<br />

...<br />

>>> function(0, a=0)<br />

Traceback (most recent call last):<br />

File "", line 1, in <br />

TypeError: keyword parameter redefined<br />

Atunci când unul dintre parametrii este de forma **nume, funcţia va primi o listă care va conţine parametrii de<br />

tip cuvânt cheie. Dacă se foloseşte un parametru de tipul *nume, funcţia va primi o listă conţinând argumentele<br />

suplimentare în afara celor formale. Dacă sunt folosiţi împreună parametrul *nume trebuie să se afle înaintea celui<br />

de tip **nume. Totul poate părea ambiguu dar veţi fi lămuriţi imediat:<br />

24 Capitolul 4. Structuri de control

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

Saved successfully!

Ooh no, something went wrong!