We wpisie "Funkcje o nieograniczonej liczbie parametrów" pisałem o tym jak napisać funkcję, której można przekazać nieograniczoną liczbę parametrów. Ostatnio zacząłem się zastanawiać jak je przekazać. Weźmy funkcję, która będzie tylko wypisywała przekazane jej parametry
krotka = (1,2,3)
slownik = {'a': 'b', 'c': 'd', 'e': 'f'}
def fun(*args, **kwargs):
print args
print kwargs
Pytanie brzmi. Jak używajć krotki zrobić wywołanie funkcjie w stylu fun(1,2,3). Ktoś powie.. "No jak to jak ? fun(krotka)." A właśnie, że nie bo fun krotka to przekazanie jednego parametru do funkcji - będącego krotką i wywłanie będzie wyglądło tak:
fun((1,2,3))
Czyli przekazujemy krotkę parametrów a nie trzy parametry. No a słownik ? Jak przekazać do funkcji słownik tak aby wywołanie wyglądało następująco.
fun(a='b', c='d', e='f')
Zobaczmy :) ja to wygląda
fun(krotka)
((1, 2, 3),)
{}
fun(slownik)
({'a': 'b', 'c': 'd', 'e': 'f'},)
{}
A teraz rozwiązanie :)
fun(*krotka)
(1,2,3)
{}
fun(**slownik)
()
{'a': 'b', 'c': 'd', 'e': 'f'}
fun(*krotka, **slownik)
(1,2,3)
{'a': 'b', 'c': 'd', 'e': 'f'}
Widać składnia "gwiazdek" działa nie tylko przy tworzeniu funkcji ale również gdy chcemy aby krotka lub słownik "rozłożyły się" na parametry funkcji nie zaś zostały przekazane jako jeden parametr :) Do zapamiętania !
No comments:
Post a Comment