Blog JSystems - uwalniamy wiedzę!

Szukaj
Animacja *args - wiele argumentów w krotce
*args pakuje dowolnie wiele argumentów pozycyjnych w jedną krotkę

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ś
Szkolenie Python od podstaw, przez analizę danych, do machine learning w JSystems

Ten kurs daje Ci solidne podstawy Pythona. Jeśli chcesz pójść dalej i pod okiem trenera dojść od pierwszej linijki kodu do własnego modelu uczenia maszynowego, sprawdź nasze pięciodniowe szkolenie Python od podstaw, przez analizę danych, do machine learning. Pierwsze trzy dni to Python w praktyce: typy i kolekcje, instrukcje warunkowe i pętle, funkcje, moduły i pakiety, pliki tekstowe, usługi sieciowe oraz praca z bazą PostgreSQL. Czwarty dzień to analiza danych w pandas (wczytywanie CSV, TSV i XLS, filtrowanie, agregacje, statystyki) i wizualizacja w Matplotlib, Seaborn oraz Plotly. Piąty dzień to uczenie maszynowe w scikit-learn: regresja liniowa i logistyczna, drzewa decyzyjne, las losowy, XGBoost, walidacja predykcji, dobór hiperparametrów i przeciwdziałanie przeuczeniu. Szkolenie ma terminy gwarantowane, czyli odbywa się niezależnie od wielkości grupy.

Szkolenie Python od podstaw, przez analizę danych, do machine learning

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Do czego służy *args w Pythonie?
Zapis z jedną gwiazdką pakuje dowolnie wiele argumentów pozycyjnych w jedną krotkę. Używamy go, gdy chcemy przekazać do funkcji zmienną liczbę argumentów, po których potem można iterować wewnątrz funkcji.
Czy nazwa args jest wymagana?
Nie. Nazwa args to tylko przyjęta konwencja. Argument może nazywać się dowolnie, na przykład *slowa, i będzie działać tak samo. Kluczowa jest gwiazdka przed nazwą, a nie sama nazwa.
Czy iterując po args też stawiamy gwiazdkę?
Nie. Gwiazdkę piszemy tylko przy deklaracji parametru w definicji funkcji. Podczas iterowania po zawartości odwołujemy się do nazwy bez gwiazdki, bo w środku funkcji args jest już zwykłą krotką.
Czy mogę łączyć zwykłe parametry z *args?
Tak, ale zwykłe parametry muszą być wymienione jako pierwsze, przed *args. Wtedy wartości pozycyjne trafiają najpierw do nazwanych parametrów, a nadmiar zostaje spakowany do krotki args.
Co się stanie, gdy przekażę listę do funkcji z *args?
Cała lista zostanie potraktowana jako jeden element krotki args. Jeśli chcesz, żeby każdy element listy był osobnym argumentem, rozpakuj ją operatorem gwiazdki przy wywołaniu, na przykład argi(*[1,2,3,4]).

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...