Wyrażenia z jedną gwiazdką (*) używamy gdy do funkcji chcemy przekazać dowolną liczbę argumentów pozycyjnych. Przyjrzyjmy się prostemu przykładowi
def args(*args):
for a in args:
print(f'{a}')
Dla każdego elementu w "args" wypisujemy jego zawartość. Args jest więc iterowalne. Zauważ że deklarując argument piszę "*" przed args, ale już iterując po nim tego nie robię. Wywołanie funkcji:
args(1,2,3,4,5)
Powoduje wyświetlenie każdej z wartości w osobnej linii.
1
2
3
4
5
Zwróć uwagę, że elementy nie zostały przekazane jako lista, ale jako kolejne argumenty!
Przyjrzyjmy się jeszcze jednemu prostemu przykładowi:
def powiekszacz(*slowa):
for s in slowa:
print(s.upper())
powiekszacz('siema','tu','mapet')
Po wywołaniu dostajemy na konsoli:
SIEMA
TU
MAPET
Nazwa *args nie jest wymagana, jest to tylko taka przyjęta konwencja. Może się nazywać choćby *slowa jak w powyższym przykładzie.
Do funkcji poza parametrami *args możemy przekazać jeszcze jakieś dodatkowe parametry, ale wtedy bedą musiały być one wymienione jako pierwsze.
def dlakazdego(param1,*args):
print(f'param1={param1}')
for a in args:
print(a)
dlakazdego('pierwsza wartość','pierwszy arg','drugi arg', 3)
Należy być ostrożnym przy przekazywaniu list do takiej funkcji. Weźmy pod uwagę taki przypadek:
def argi(*args):
for e in args:
print(e)
argi([1,2,3,4],'coś')
Przekazana lista zostaje potraktowana jako jeden element. Zobaczmy co zostało wyświetlone:
[1, 2, 3, 4]
coś
Jeśli chcemy by każdy z elementów tej listy został potraktowany jako osobny argument, musimy tę listę rozpakować za pomocą operatora "*":
argi(*[1,2,3,4],'coś')
co skutkuje wyrzuceniem na konsolę:
1
2
3
4
coś
Komentarze (0)
Brak komentarzy...