Menu

Typy danych w Pythonie: int, float, str, bool, list, dict i inne

Przegląd wbudowanych typów danych w Pythonie: liczby, napisy, wartości logiczne, None, listy, krotki, zbiory i słowniki, z przykładami i wskazówkami, kiedy którego użyć.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Dlaczego typy w ogóle mają znaczenie

Typ to po prostu kategoria, która mówi Pythonowi, jak ma się zachowywać wartość. Dodanie dwóch liczb całkowitych to arytmetyka, dodanie dwóch napisów to ich połączenie, a dodanie napisu do liczby całkowitej to błąd. Typ wartości decyduje, jakie operacje mają na niej sens.

Python ma mały, przyjazny zestaw wbudowanych typów. Czterech z nich (int, float, str, bool) użyjesz niemal w każdym programie. Reszta pojawia się, gdy zaczynasz układać dane w kolekcje.

Liczby: int i float

Są dwa rodzaje liczb, a Python wybiera, który dostajesz, na podstawie tego, jak je zapiszesz:

Bez kropki dziesiętnej? Dostajesz int. Z kropką? Dostajesz float. Arytmetyka swobodnie je miesza, a każda operacja z udziałem float daje float:

Liczby całkowite w Pythonie mogą być tak duże, jak pozwala pamięć: bez przepełnienia i bez sztywnego limitu 32 czy 64 bitów. Możesz obliczyć 2 ** 1000, a Python zwróci każdą cyfrę.

Liczby float działają według zwykłych reguł IEEE 754, co oznacza kilka klasycznych niespodzianek:

To wypisuje 0.30000000000000004, a nie 0.3. To nie błąd Pythona, tylko sposób działania binarnej arytmetyki zmiennoprzecinkowej w każdym języku. Gdy potrzebujesz dokładnych ułamków dziesiętnych (na przykład przy pieniądzach), użyj modułu decimal. W pozostałych przypadkach zwykle wystarczy zaokrąglenie przy wyświetlaniu.

Napisy: str

Napisy to ciągi znaków. Otocz je pojedynczymi albo podwójnymi cudzysłowami. Pythonowi jest wszystko jedno, byle cudzysłów otwierający i zamykający były takie same:

Napisy w potrójnych cudzysłowach (""" ... """) mogą zajmować wiele linii:

Napisy mają ogromne API, które poznasz z czasem: wycinanie, metody takie jak .upper(), .split(), .replace() i formatowanie f-stringami, które daje f"Hello, {name}". Zaraz dalej jest osobna strona o napisach.

Wartości logiczne: bool

Dwie wartości, zapisywane dokładnie tak: True i False, z wielką literą na początku. Porównania dają wartości logiczne:

Pod spodem True i False to dosłownie 1 i 0, więc możesz sumować wartości logiczne, gdy trzeba policzyć, ile warunków było prawdziwych:

None: brak wartości

None to sposób, w jaki Python mówi "brak wartości". Funkcje, które niczego jawnie nie zwracają, zwracają None. Użyjesz go też jako wartości zastępczej:

Konwencja to sprawdzanie przez is None i is not None, a nie == None. is sprawdza tożsamość, a właśnie o to tu chodzi.

Listy, krotki, zbiory, słowniki

To cztery wbudowane typy kolekcji. Każdy ma własną, szczegółową stronę, ale oto krótki szkic, żeby je rozpoznawać:

Praktyczne zasady:

  • List: sekwencja, która ma się zmieniać. Dodawanie, usuwanie, sortowanie: wszystko w porządku.
  • Tuple: sekwencja, którą chcesz chronić przed zmianami. Często używana do rekordów o stałym kształcie, jak współrzędne (x, y).
  • Set: worek unikalnych elementów, gdy duplikaty byłyby błędem.
  • Dict: wyszukiwanie po kluczu. Struktura w kształcie JSON.

Konwersja między typami

Python nie konwertuje typów automatycznie, gdy byłoby to ryzykowne. Zamianę liczby całkowitej na napis albo napisu na liczbę trzeba zlecić jawnie:

Jeśli konwersja nie ma sensu, na przykład int("hello"), Python zgłasza ValueError i pokazuje, co mu podano. Błąd jest wyjaśniony, więc poprawiasz i idziesz dalej.

Sprawdzanie typu

Dwa narzędzia, które warto znać:

type() świetnie nadaje się do szybkiego podglądu w REPL. isinstance() stosuje się w prawdziwym kodzie, bo dobrze współpracuje z dziedziczeniem i potrafi sprawdzić kilka typów naraz.

Krótkie ćwiczenie przeglądowe

Uruchom poniższy blok bez zmian, a potem zmień kilka wartości i zobacz, jakie wychodzą typy:

Nie musisz jeszcze rozumieć for (dojdziemy do tego), ale to pokazuje wbudowane typy w jednym rzucie oka.

Wybierz typ pasujący do danych

Nie musisz teraz zapamiętywać każdego typu. Musisz umieć rozpoznać typ, gdy go widzisz, i wybrać właściwy, gdy tworzysz dane. "Czy to jest stałe, czy się zmienia? Unikalne czy nie? Szukam po kluczu czy po pozycji?" Te cztery pytania w dziewięćdziesięciu procentach przypadków wybierają typ kolekcji.

Dalej: napisy w szczegółach, bo to typ danych, z którym zetkniesz się niemal w każdym programie.

Najczęściej zadawane pytania

Jakie są główne typy danych w Pythonie?

Liczby (int i float), napisy (str), wartości logiczne (bool), None oraz cztery typy kolekcji: list, tuple, set i dict. Wszystko inne, co widzisz w kodzie Pythona, jest zbudowane z nich i garstki pozostałych (bytes, complex, frozenset).

Jak sprawdzić typ wartości w Pythonie?

Przekaż ją do type(): type(42) zwraca <class 'int'>, a type('hi') zwraca <class 'str'>. Do sprawdzenia typu prawda/fałsz użyj isinstance(value, int), które jest bardziej elastyczne, bo obsługuje też podklasy.

Czy Python ma typowanie statyczne czy dynamiczne?

Dynamiczne. Zmienna może wskazywać wartość dowolnego typu, a ta sama zmienna może zmieniać typ w trakcie swojego życia. To inaczej niż w językach takich jak Java czy C++, gdzie typ zmiennej deklaruje się raz i nie może się on zmienić.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ