ZMIENNE W PYTHON
ZMIENNE W PYTHON
Wyobraź sobie pudełko(pudełko jako obiekt). Możesz do niego włożyć różne rzeczy: zabawkę, książkę, czy słodycze. W programowaniu, takie pudełko to zmienna. Zamiast przedmiotów, do zmiennej wkładamy różne wartości, np. liczby, słowa czy nawet bardziej skomplikowane informacje.
Co to jest zmienna?
Nazwa: Każda zmienna ma swoją unikalną nazwę, np. wiek, imie, cena.
Wartość: W zmiennej przechowujemy konkretną wartość, np. wiek = 17, imie = "Jan", cena = 4.99.
Typ: Wartość w zmiennej ma określony typ, np. liczbowy (całkowity, rzeczywisty), tekstowy (łańcuch znaków) czy logiczny (prawda/fałsz).
Dlaczego używamy zmiennych?
Przechowywanie danych: Dzięki zmiennym możemy zapamiętać różne informacje, które będą nam potrzebne później w programie.
Ułatwienie obliczeń: Możemy wykonywać działania na wartościach przechowywanych w zmiennych.
Zwiększenie czytelności kodu: Dobrze nazwane zmienne sprawiają, że kod jest łatwiejszy do zrozumienia.
Najważniejsze typy danych w Pythonie:
int: Liczby całkowite (np. -5, 0, 100). Służą do reprezentowania liczb bez części ułamkowej.
float: Liczby zmiennoprzecinkowe (np. 3.14, -0.5). Służą do reprezentowania liczb z częścią ułamkową.
str: Łańcuchy znakowe (np. "Hello", "Python"). Służą do przechowywania tekstu.
bool: Wartości logiczne (True, False). Służą do reprezentowania wartości prawda/fałsz.
list: Listy (np. [1, 2, 3, "a"]). Służą do przechowywania uporządkowanych zbiorów elementów różnego typu.
tuple: Krotki (np. (1, 2, 3)). Podobne do list, ale są niemutowalne, czyli nie można zmieniać ich elementów po utworzeniu.
set: Zbiory (np. {1, 2, 3}). Służą do przechowywania nieuporządkowanych zbiorów unikalnych elementów.
dict: Słowniki (np. {"name": "John", "age": 30}). Służą do przechowywania par klucz-wartość.
Przykład 1: Python dynamicznie sam przydziela typ zmiennej
imie = "Adam"
wiek = 25
wzrost = 1.75
czy_lubi_programowanie = True
print("Nazywam się", imie, "mam", wiek, "lat i jestem wzrostu", wzrost, "m.")
print("Czy lubię programowanie?", czy_lubi_programowanie)
Przykład 2: Samodzielne ustawienie typu zmiennej
liczba = 10
tekst = str(liczba) # Konwersja liczby na tekst
Odwoływanie się do metody za pomocą zmiennej w Pythonie
W Pythonie, podobnie jak w wielu innych językach programowania, możemy przypisać metodę do zmiennej. To pozwala na bardziej elastyczne i dynamiczne korzystanie z funkcjonalności obiektów.
Przykład:
class Osoba:
def __init__(self, imie):
self.imie = imie
def powiedz_cześć(self):
print(f"Cześć, mam na imię {self.imie}!")
# Utworzenie obiektu klasy Osoba
osoba1 = Osoba("Jan")
# Przypisanie metody do zmiennej
powitanie = osoba1.powiedz_cześć
# Wywołanie metody za pomocą zmiennej
powitanie()
Wyjaśnienie powyższego kodu:
Definicja klasy: Zdefiniowaliśmy klasę Osoba z metodą powiedz_cześć(), która wypisuje powitanie.
Utworzenie obiektu: Stworzyliśmy obiekt osoba1 klasy Osoba.
Przypisanie metody do zmiennej: Przypisaliśmy metodę powiedz_cześć() obiektu osoba1 do zmiennej powitanie. Zauważ, że nie wywołujemy jeszcze metody, tylko przypisujemy ją do zmiennej.
Wywołanie metody: Wywołując zmienną powitanie jak funkcję, uruchamiamy metodę powiedz_cześć().
Dlaczego to działa?
Metody są obiektami: W Pythonie metody są tak naprawdę obiektami typu function. Możemy je przypisywać do zmiennych, przekazywać jako argumenty do innych funkcji, a nawet je zwracać z funkcji.
Binding: Kiedy przypisujemy metodę do zmiennej, tworzymy tzw. "binding" między zmienną a metodą. Oznacza to, że wywołanie zmiennej jest równoważne wywołaniu oryginalnej metody.
Ważne uwagi:
Self: Pamiętaj, że metody w Pythonie mają domyślny argument self, który odnosi się do samego obiektu.
Kontekst: Kiedy przypisujesz metodę do zmiennej, ważne jest, aby zrozumieć, w jakim kontekście ta metoda będzie wywoływana. Zmienna przechowuje jedynie "przepis" na wykonanie metody, a nie jej wynik.
Funkcje vs. metody: Chociaż metody są podobne do funkcji, różnią się tym, że są związane z konkretnym obiektem.
Inne przydatne metody wbudowane i ich zastosowanie:
len(): Oblicza długość sekwencji (np. list, string).
moja_lista = [1, 2, 3]
dlugosc_listy = len(moja_lista)
sum(): Sumuje elementy sekwencji liczbowej.
liczby = [1, 2, 3, 4, 5]
suma = sum(liczby)
max(): Zwraca największą wartość w sekwencji.
liczby = [10, 5, 15, 8]
najwieksza_liczba = max(liczby)
min(): Zwraca najmniejszą wartość w sekwencji.
liczby = [10, 5, 15, 8]
najmniejsza_liczba = min(liczby)
sorted(): Sortuje elementy sekwencji.
liczby = [3, 1, 4, 1, 5, 9]
posortowane_liczby = sorted(liczby)
reversed(): Zwraca odwróconą iterację sekwencji.
tekst = "Python"
odwrocony_tekst = "".join(reversed(tekst))
Dlaczego warto przypisywać metody do zmiennych?
Czytelność: Może poprawić czytelność kodu, zwłaszcza gdy nazwa metody jest długa lub skomplikowana.
Elastyczność: Umożliwia dynamiczne wybieranie metod w zależności od warunków.
Funkcje wyższego rzędu: Możesz przekazywać metody jako argumenty do innych funkcji.
Pamiętaj:
Kontekst: Zawsze pamiętaj o kontekście, w którym wywołujesz metodę.
Argumenty: Podawaj odpowiednie argumenty dla danej metody.
Typy danych: Upewnij się, że przekazywane dane są zgodne z oczekiwaniami metody.
__abs__() to specjalna metoda w Pythonie, zwana metodą magiczną lub dunder method.
Służy ona do obliczania wartości bezwzględnej liczby.
Notacja x.__abs__() jest bardziej szczegółowym sposobem wywołania tej metody w porównaniu do abs(x).
Dlaczego używamy notacji atrybutowej?
Wyjaśnienie: Np. kiedy używamy notacji x.__abs__(), wprost mówimy Pythonowi: "Weź obiekt x i wywołaj jego metodę o nazwie __abs__()".
Dostęp do wewnętrznych mechanizmów: Pozwala to na głębsze zrozumienie, jak działają obiekty i metody w Pythonie.
Polimorfizm: Możemy nadpisywać metody magiczne w naszych własnych klasach, aby dostosować ich zachowanie do naszych potrzeb.
moja_lista = [3, 1, 4, 1, 5, 9]
moja_lista.sort()
print(moja_lista) # Wynik: [1, 1, 3, 4, 5, 9]
W tym przykładzie:
moja_lista jest obiektem typu lista.
sort() jest metodą wbudowaną w obiekty listy, która służy do sortowania elementów.
Wywołanie moja_lista.sort() jest równoważne z moja_lista.__sort__(), ale notacja sort() jest bardziej czytelna i powszechnie używana.
__str__(): Zwraca reprezentację obiektu w postaci łańcucha znaków, używaną np. przy drukowaniu.
__len__(): Zwraca długość obiektu (np. długość listy, długość łańcucha znaków).
__add__(): Definiuje działanie dodawania dla obiektów.
__eq__(): Definiuje operator porównania równości.
Przykład z metodą __str__():
class Osoba:
def __init__(self, imie, nazwisko):
self.imie = imie
self.nazwisko = nazwisko
def __str__(self):
return f"Osoba: {self.imie} {self.nazwisko}"
osoba1 = Osoba("Jan", "Kowalski")
print(osoba1) # Wyświetli: Osoba: Jan Kowalski
Kiedy chcesz podkreślić, że wywołujesz metodę obiektu.
Kiedy chcesz nadpisywać metody magiczne w swoich własnych klasach.
Kiedy pracujesz z metaprogramowaniem.