W Pythonie można zdefiniować funkcję, która przyjmuje zmienną liczbę argumentów. W tym artykule nauczysz się definiować takie funkcje za pomocą domyślnych, słów kluczowych i dowolnych argumentów.
Wideo: argumenty funkcji Pythona: pozycyjne, słowa kluczowe i domyślne
Argumenty
W temacie o funkcjach zdefiniowanych przez użytkownika nauczyliśmy się definiować funkcję i ją wywoływać. W przeciwnym razie wywołanie funkcji spowoduje błąd. Oto przykład.
def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")
Wynik
Cześć Monica, dzień dobry!
Tutaj funkcja greet()
ma dwa parametry.
Ponieważ wywołaliśmy tę funkcję z dwoma argumentami, działa ona płynnie i nie otrzymujemy żadnego błędu.
Jeśli wywołasz to z inną liczbą argumentów, interpreter pokaże komunikat o błędzie. Poniżej znajduje się wywołanie tej funkcji z jednym argumentem i bez argumentów wraz z odpowiednimi komunikatami o błędach.
>>> greet ("Monica") # tylko jeden argument TypeError: greet () brakuje 1 wymaganego argumentu pozycyjnego: „msg”
>>> greet () # brak argumentów TypeError: greet () brakuje 2 wymaganych argumentów pozycyjnych: 'name' i 'msg'
Argumenty funkcji zmiennych
Do tej pory funkcje miały stałą liczbę argumentów. W Pythonie istnieją inne sposoby definiowania funkcji, która może przyjmować zmienną liczbę argumentów.
Poniżej opisano trzy różne formy tego typu.
Domyślne argumenty Pythona
Argumenty funkcji mogą mieć wartości domyślne w Pythonie.
Możemy podać wartość domyślną argumentowi za pomocą operatora przypisania (=). Oto przykład.
def greet(name, msg="Good morning!"): """ This function greets to the person with the provided message. If the message is not provided, it defaults to "Good morning!" """ print("Hello", name + ', ' + msg) greet("Kate") greet("Bruce", "How do you do?")
Wynik
Cześć Kate, dzień dobry! Cześć Bruce, jak się masz?
W tej funkcji parametr name
nie ma wartości domyślnej i jest wymagany (obowiązkowy) podczas połączenia.
Z drugiej strony parametr msg
ma domyślną wartość "Good morning!"
. Tak więc jest to opcjonalne podczas rozmowy. Jeśli podana zostanie wartość, nadpisze ona wartość domyślną.
Dowolna liczba argumentów w funkcji może mieć wartość domyślną. Ale kiedy już mamy argument domyślny, wszystkie argumenty po jego prawej stronie również muszą mieć wartości domyślne.
Oznacza to, że argumenty inne niż domyślne nie mogą występować po argumentach domyślnych. Na przykład, gdybyśmy zdefiniowali powyżej nagłówek funkcji jako:
def greet (msg = "Dzień dobry!", imię):
Otrzymalibyśmy błąd jako:
SyntaxError: argument inny niż domyślny następuje po argumencie domyślnym
Argumenty słów kluczowych w Pythonie
Kiedy wywołujemy funkcję z pewnymi wartościami, wartości te są przypisywane do argumentów zgodnie z ich pozycją.
Na przykład w powyższej funkcji greet()
, gdy nazwiemy ją as greet("Bruce", "How do you do?")
, wartość "Bruce"
zostanie przypisana do argumentu nazwa i podobnie "How do you do?"
do msg.
Python umożliwia wywoływanie funkcji za pomocą argumentów słów kluczowych. Kiedy nazywamy funkcje w ten sposób, można zmienić kolejność (pozycję) argumentów. Wszystkie następujące wywołania powyższej funkcji są prawidłowe i dają ten sam wynik.
# 2 keyword arguments greet(name = "Bruce",msg = "How do you do?") # 2 keyword arguments (out of order) greet(msg = "How do you do?",name = "Bruce") 1 positional, 1 keyword argument greet("Bruce", msg = "How do you do?")
Jak widać, możemy mieszać argumenty pozycyjne z argumentami słów kluczowych podczas wywołania funkcji. Musimy jednak pamiętać, że argumenty słów kluczowych muszą następować po argumentach pozycyjnych.
Posiadanie argumentu pozycyjnego po argumentach słów kluczowych spowoduje błędy. Na przykład wywołanie funkcji w następujący sposób:
greet(name="Bruce","How do you do?")
Spowoduje błąd:
SyntaxError: non-keyword arg po słowie kluczowym arg
Arbitralne argumenty w Pythonie
Czasami nie znamy z góry liczby argumentów, które zostaną przekazane do funkcji. Python pozwala nam poradzić sobie z tego rodzaju sytuacjami poprzez wywołania funkcji z dowolną liczbą argumentów.
W definicji funkcji używamy gwiazdki (*) przed nazwą parametru, aby oznaczyć ten rodzaj argumentu. Oto przykład.
def greet(*names): """This function greets all the person in the names tuple.""" # names is a tuple with arguments for name in names: print("Hello", name) greet("Monica", "Luke", "Steve", "John")
Wynik
Hello Monica Hello Luke Hello Steve Hello John
Tutaj nazwaliśmy funkcję z wieloma argumentami. Te argumenty są pakowane w krotkę przed przekazaniem ich do funkcji. Wewnątrz funkcji używamy for
pętli, aby odzyskać wszystkie argumenty.