Wprowadzenie do mechanizmu przekazywania parametrów w Pythonie to kluczowe zagadnienie dla programistów na każdym poziomie zaawansowania. Python, jako język o dynamicznym typowaniu, posiada specyficzne podejście do przekazywania argumentów do funkcji. W tym artykule wyjaśnimy, jak działa ten mechanizm, posługując się przykładami kodu i komentarzami.
Przekazywanie przez referencję czy wartość?
W Pythonie argumenty są przekazywane do funkcji przez przypisanie. Można to rozumieć jako przekazywanie przez referencję, ale z ważną uwagą: Python używa modelu przekazywania „przez przypisanie obiektów”. Oznacza to, że typ przekazywania (przez wartość czy przez referencję) zależy od tego, czy przekazywany obiekt jest mutowalny, czy też nie.
Przykład z mutowalnymi i niemutowalnymi typami
Aby lepiej zrozumieć mechanizm, przyjrzyjmy się przykładowemu kodowi w Pythonie, który pokazuje różnicę między przekazywaniem mutowalnych i niemutowalnych typów danych.
def modify_list(lst):
# Dodajemy element do listy - mutowalny typ danych
lst.append(4)
def modify_number(n):
# Próbujemy zmodyfikować wartość liczby - niemutowalny typ danych
n += 1
# Mutowalny typ danych - lista
my_list = [1, 2, 3]
modify_list(my_list)
print("Zmodyfikowana lista:", my_list) # Lista została zmodyfikowana
# Niemutowalny typ danych - liczba całkowita
my_number = 10
modify_number(my_number)
print("Zmodyfikowana liczba:", my_number) # Liczba pozostała niezmieniona
Wyjaśnienie
- W funkcji
modify_list
, argumentem jest lista, która jest typem mutowalnym. Modyfikacja takiego obiektu w funkcji (np. dodanie elementu) wpłynie na obiekt poza funkcją. Jest to spowodowane tym, że lista jest przekazywana przez referencję do tego samego obiektu w pamięci. - W funkcji
modify_number
, mimo że argumentem jest niemutowalny typ danych (liczba całkowita), każda próba modyfikacji jego wartości wewnątrz funkcji nie wpłynie na wartość zmiennej poza funkcją. Jest to spowodowane tworzeniem nowego obiektu w momencie modyfikacji wartości niemutowalnego typu danych.
Mutowalne vs Niemutowalne typy danych
W Pythonie niemutowalne typy danych to te, których stanu nie można zmienić po utworzeniu. Do niemutowalnych typów należą między innymi:
- liczby całkowite (
int
), - liczby zmiennoprzecinkowe (
float
), - napisy (
str
), - krotki (
tuple
).
Mutowalne typy danych, takie jak listy (list
), słowniki (dict
) czy zbiory (set
), pozwalają na zmianę ich zawartości bez tworzenia nowego obiektu.
Podsumowanie
Mechanizm przekazywania parametrów w Pythonie jest intuicyjny, kiedy zrozumie się różnicę między typami mutowalnymi a niemutowalnymi. Kluczowe jest zrozumienie, że zmiany dokonane na mutowalnych obiektach przekazanych jako argumenty do funkcji będą widoczne poza funkcją, podczas gdy niemutowalne typy danych zachowają swoją oryginalną wartość, niezależnie od operacji wykonanych w funkcji.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Python w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.