9.1 Parametry vs argumenty
Początkującym często mylą się terminy „parametry” i „argumenty”, ale ich różnica jest istotna dla zrozumienia programowania funkcyjnego.
Parametry to zmienne, które są wymienione w definicji funkcji. Reprezentują one nazwy, które funkcja używa do odniesienia się do przekazywanych jej wartości. Parametry funkcji działają jako „wypełniacze” dla wartości, które będą używane w ciele funkcji. Kiedy definiujesz funkcję, opisujesz jej parametry.
def print_info(name, age): # name i age — to parametry
print(f"Name: {name}, Age: {age}")
Argumenty to konkretne wartości lub dane przekazywane funkcji podczas jej wywołania. Argumenty są podstawiane w miejsca parametrów podczas wykonywania funkcji. Argumenty mogą być stałymi, zmiennymi, wyrażeniami, a nawet wynikami innych funkcji.
print_info("Alice", 30) # "Alice" i 30 — to argumenty
Rodzaje argumentów
- Argumenty pozycyjne: wartości są przekazywane w kolejności, w jakiej parametry są zdefiniowane.
- Argumenty nazwane: argumenty przekazywane funkcji z użyciem nazwy parametru, co pozwala na ich wymienienie w dowolnej kolejności po argumentach pozycyjnych.
- Argumenty domyślne: przy definiowaniu funkcji parametrom można przypisać wartości domyślne.
Argumenty pozycyjne już używasz, a argumenty nazwane i domyślne omówimy w następnych wykładach.
Różnica między parametrami a argumentami w Python pomaga zrozumieć, jak funkcje otrzymują i przetwarzają dane. To rozróżnienie jest ważne dla tworzenia elastycznych funkcji, które można łatwo dostosować do różnych warunków wywołania, czyniąc twój kod bardziej modułowym i ponownie używalnym.
9.2 Wartości domyślne
Argumenty domyślne w Python to mechanizm pozwalający funkcjom na wcześniejsze określenie predefiniowanych wartości dla jednego lub kilku parametrów. Ta możliwość sprawia, że wywołanie funkcji jest bardziej wygodne i elastyczne, ponieważ nie wymaga jawnego podawania wszystkich argumentów za każdym razem przy wywołaniu funkcji.
Definiowanie argumentów domyślnych
Argumenty domyślne są określane w definicji funkcji, gdzie przy deklarowaniu parametru wskazywana jest wartość, która będzie używana, jeśli przy wywołaniu funkcji argument nie zostanie przekazany
:
def print_info(name, company='Unknown'):
print(f"Name: {name}, Company: {company}")
W tym przykładzie company
ma wartość domyślną 'Unknown'.
- Uproszczenie wywołania funkcji: Funkcje z wieloma parametrami mogą być wywoływane z podaniem tylko najważniejszych argumentów.
- Elastyczność: Funkcje można dostosować do różnych scenariuszy użycia bez zmieniania ich kodu.
- Czytelność kodu: Jawne podawanie wartości domyślnych czyni kod samodokumentującym się.
Ważne niuanse
Niezmienność: Wartości domyślne dla argumentów powinny być niezmiennymi typami danych, takimi jak liczby, napisy czy krotki. Użycie zmiennych typów (np. list czy słowników) może prowadzić do niepożądanych efektów ubocznych, ponieważ zmiany w tych obiektach są zachowywane między wywołaniami funkcji.
Kolejność argumentów: Parametry z argumentami domyślnymi muszą następować po parametrach bez argumentów domyślnych w definicji funkcji.
Inny przykład:
def create_user(username, is_admin=False):
if is_admin:
print(f"User {username} is an admin.")
else:
print(f"User {username} is a regular user.")
create_user("Alice") # is_admin == False
create_user("Bob", is_admin=True) # is_admin == True
create_user("Karl", True) # is_admin == True
Powyżej przedstawiono 3 sposoby wywołania funkcji z argumentem domyślnym: każdy z nich działa.
9.3 Przekazywanie parametrów po nazwie
Przekazywanie parametrów do funkcji po nazwie pozwala bardziej jasno określić, jakie wartości są przekazywane do których argumentów, poprawiając czytelność kodu i zmniejszając prawdopodobieństwo błędów związanych z nieprawidłową kolejnością argumentów.
Aby przekazać wartość parametru po nazwie, trzeba przy wywołaniu funkcji przypisać wartość do określonego parametru:
funkcja(parametr1 = wartosc, parametr2 = wartosc)
Ten sposób jest szczególnie przydatny przy pracy z funkcjami, które mają wiele parametrów lub parametry z wartościami domyślnymi.
Zalety przekazywania parametrów po nazwie
- Jasność i czytelność: Podanie nazwy parametru przy jego wywołaniu czyni kod bardziej zrozumiałym dla innych programistów lub gdy wracamy do własnego starego kodu.
- Elastyczność: Parametry mogą być przekazywane w dowolnej kolejności, co jest wygodne, gdy funkcja ma wiele parametrów.
- Unikanie błędów: Nie ma potrzeby pamiętać kolejności parametrów funkcji, co zmniejsza prawdopodobieństwo błędów związanych z nieprawidłowym przekazywaniem wartości.
Przykłady użycia
def create_profile(name, age, job):
print(f"Name: {name}")
print(f"Age: {age}")
print(f"Job: {job}")
create_profile(name = "John", age = 28, job = "Developer")
W tym przykładzie parametry są przekazywane nie po kolei, ale każdemu z nich jest jednoznacznie przypisana wartość, co czyni wywołanie funkcji bardziej elastycznym i zrozumiałym.
Przykład 2:
Nawiasem mówiąc, już wcześniej spotkałeś się z przekazywaniem parametrów po nazwie. W funkcji print()
, pamiętasz?
Funkcje i ograniczenia
Parametry przekazywane po nazwie muszą następować po parametrach bez nazwy, jeśli takie istnieją w definicji funkcji.
Nie można używać tej samej nazwy parametru więcej niż raz przy wywołaniu funkcji.
Przekazywanie parametrów po nazwie to potężna możliwość Python, która czyni kod bardziej bezpiecznym i zrozumiałym, szczególnie w przypadkach użycia funkcji z wieloma argumentami lub opcjonalnymi wartościami.
GO TO FULL VERSION