Blog JSystems - z miłości do programowania

*args



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ś

Przyjdź do nas na szkolenie z języka Python! Mamy szereg szkoleń w ofercie, od podstawowych po aplikacje webowe z użyciem Django, analizę danych, tesowanie, machine learning i wiele innych.
Sprawdź dostępne szkolenia Python
Zapisz się do newslettera aby otrzymywać najnowsze świeżynki pojawiające się na blogu!