Python – #2 – Funkcja o zmiennej liczbie argumentów

Wprowadzenie.

W poniższym wpisie przedstawiam w jaki sposób jedna funkcja możemy pobierać zmienną liczbę argumentów.

Zakres artykułu.

  • Funkcja o zmiennej liczbie argumentów
  • Testy

Funkcja o zmiennej liczbie argumentów

W pierwszej kolejności napiszmy funkcję, która będzie przyjmowała jeden argument pozycyjny oraz jeden argument kluczowy. Taka funkcja na przykład może wyglądać następująco. 

def fun1(par1, par2=0):
    print(par1)
    print(par2)

W tym jednak przypadku nasza funkcja może przyjąć maksymalnie 2 argumenty. Co jeśli będziemy chcieli napisać taką funkcję, która będzie przyjmowała nieokreśloną liczbę argumentów?

Pierwszym sposobem stworzenia takiej funkcji, jest zadeklarowanie parametru z gwiazdką. W ten oto sposób będziemy w stanie podać wiele argumentów do funkcji. Poniżej przedstawiam zmodyfikowany przykład pierwszej funkcji, gdzie trzeci parametr jest z gwiazdką. 

def fun2(par1, par2=0, *par3):
    print(par1)
    print(par2)
    print(par3)

W ten oto sposób od trzeciej pozycji, wszystkie argumenty zostaną przypisane do parametru par3 w postaci krotki (Tuple), przez co dalsze reguły odwoływania się do przesłanych wartości są takie same jak w typie danych krotka

Drugim sposobem stworzenia funkcji, która przyjmuje nieokreśloną liczbę parametrów jest zadeklarowanie parametru z dwiema gwiazdkami. Różnica między pierwszym a drugim podejściem jest taka, że teraz podajemy wartości w postaci klucz – wartość.

def fun3(par1, par2=0, **par3):
    print(par1)
    print(par2)
    print(par3)

W ten oto sposób od trzeciej pozycji, wszystkie argumenty zostaną przypisane do parametru par3 w postaci słownika (dictionary). Podając kolejne argumenty od pozycji 3, musimy pamiętać, aby podać najpierw klucz a następnie przypisać mu wartość. Ważną różnicą jest sposób odwoływania się do konkretnych argumentów, ponieważ w tym przypadku musimy skorzystać z konstrukcji par3.get(“nazwa_klucza”)

Tworząc funkcję możemy obydwie metody mieszać, tak jak przedstawiłem to na poniższym przykładzie. Do samodzielnego przećwiczenia i przetestowania proponuję pozmieniać pozycje parametrów i sprawdzić, kiedy jaka konstrukcja jest prawidłowa a kiedy nie.

def fun4(par1, par2=0, *par3, **par4):
    print(par1)
    print(par2)
    print(par3)
    print(par4)

Przykładowy program, który pozwoli nam przetestować powyższe funkcje może wyglądać następująco.

print("START")

print("Funcja 1:")
fun1("tekst1", 4)

print("Funcja 2:")
fun2("tekst1", 4, 4, 3, "tekst2")

print("Funcja 3:")
fun3("tekst1", 4, arg1=2.3, arg2="tekst3")

print("Funcja 4:")
fun4("tekst1", 4, 4, 3, "tekst2", arg1=2.3, arg2="tekst3")

print("END")

Na koniec zamieszczę, jeszcze kompletny program

def fun1(par1, par2=0):
    print(par1)
    print(par2)

def fun2(par1, par2=0, *par3):
    print(par1)
    print(par2)
    print(par3)

def fun3(par1, par2=0, **par3):
    print(par1)
    print(par2)
    print(par3)

def fun4(par1, par2=0, *par3, **par4):
    print(par1)
    print(par2)
    print(par3)
    print(par4)

print("START")

print("Funcja 1:")
fun1("tekst1", 4)

print("Funcja 2:")
fun2("tekst1", 4, 4, 3, "tekst2")

print("Funcja 3:")
fun3("tekst1", 4, arg1=2.3, arg2="tekst3")

print("Funcja 4:")
fun4("tekst1", 4, 4, 3, "tekst2", arg1=2.3, arg2="tekst3")

print("END")

Testy

Po uruchomieniu programu w konsoli powinniśmy otrzymać następujący efekt.

START
Funcja 1:
tekst1
4
Funcja 2:
tekst1
4
(4, 3, 'tekst2')
Funcja 3:
tekst1
4
{'arg1': 2.3, 'arg2': 'tekst3'}
Funcja 4:
tekst1
4
(4, 3, 'tekst2')
{'arg1': 2.3, 'arg2': 'tekst3'}
END

Autor artykułu
Dominik Bednarski

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.