Funkcje o zmiennej liczbie argumentow
Każda funkcja w Pythonie otrzymuje określoną liczbę argumentów, jeśli została zdefiniowana w znany nam z poprzednich lekcji sposób:
def funkcja(pierwszy, drugi, trzeci):
# robi cos z trzema argumentami
...
Możliwe jest również zdefiniowanie funkcji, która otrzymuje zmienną liczbę argumentów:
def foo(pierwszy, drugi, trzeci, *reszta):
print "Pierwszy: %s" % pierwszy
print "Drugi: %s" % drugi
print "Trzeci: %s" % trzeci
print "I cala reszta... %s" % list(reszta)
Zmienna "reszta" jest tablicą zmiennych, która przechowuje wszystkie argumenty przekazane funkcji foo poza pierwszymi trzema argumentami. Tak więc wywołanie foo(1,2,3,4,5)
wypisze:
Pierwszy: 1
Drugi: 2
Trzeci: 3
I cala reszta... [4, 5]
Argumenty do funkcji można przesyłać także za pomocą słów-kluczy, dzięki czemu kolejność w jakiej zostały podane argumenty nie ma znaczenia:
def funkcja(pierwszy, drugi, trzeci, **opcje):
if opcje.get("akcja") == "dodaj":
print "Suma to: %d" % (pierwszy + drugi + trzeci)
if opcje.get("zwroc") == "pierwszy":
return pierwszy
wynik = funkcja(1, 2, 3, akcja = "dodaj", zwroc = "pierwszy")
print "Wynik: %d" % wynik
Po wykonaniu tego skryptu na wyjściu ujrzymy:
Suma to: 6
Wynik: 1
Funkcja otrzymuje 3 argumenty. Jeśli dodatkowy argument "akcja" jest dany i każe dodać liczby, to suma zostanie wypisana. Funkjca wie, że ma zwrócić wartość pierwszego argumentu, jeśli do argumentu "zwroc" podasz odpowiednią wartość.
Ćwiczenie
Napisz funkcje "foo" i "bar" tak, aby mogły otrzymywać zmienną liczbę argumentów (3 lub więcej).
Funkcja foo
musi zwracać liczbę dodatkowych argumentów jakie otrzymała.
Funkcja bar
musi zwracać True
, jeśli argument przypisany słowu kluczowemu magiczna_liczba
jest równy 7, oraz False
w przeciwnym razie.