Python typy danych
W artykule Python typy danych znajdziesz informacje na temat typów danych dostępnych w języku Python. Dowiesz się również, w jaki sposób dokonać konwersji typu danych.
Python – operatory
Na początek przypomnienie dotyczące operatorów, których możemy używać w Pythonie.
Operator | Opis | Przykład |
---|---|---|
+ | dodawanie | 2 + 2 = 4 |
– | odejmowanie | 6 – 1 = 5 |
* | mnożenie | 7 * 2 = 14 |
/ | dzielenie zmiennoprzecinkowe | 14 / 5 = 2.8 |
// | dzielenie całkowite | 14 // 5 = 2 |
% | dzielenie modulo (reszta z dzielenia) | 14 % 5 = 4 (bo 2 * 5 + 4 = 14) |
** | potęgowanie | 2 ** 8 = 256 |
+= | zwiększ o | a = 1; a += 1 (wynik: a = 2) |
-= | zmniejsz o | a = 1; a -= 1 (wynik: a = 0) |
*= | pomnóż przez | a = 2; a *= 3 (wynik: a = 6) |
/= | podziel przez (dzielenie zmiennoprzecinkowe) | a = 5; a /= 2 (wynik: a = 2.5) |
//= | podziel przez (dzielenie całkowite) | a = 5.0; a //= 2 (wynik: a = 2.0) |
Pojedyncze wyrażenie może zawierać wiele operatorów. Jeśli nie ma nawiasów, są one wykonywane w następującej kolejności:
- mnożenie i dzielenie wykonują się przed dodawaniem i odejmowaniem
- jeśli jest tylko dodawanie i odejmowanie, to działania wykonuje się od lewej do prawej
- jeśli jest tylko mnożenie i dzielenie, to działania wykonuje się od lewej do prawej
a = 3+3/2 print(a) #wynik 4.5 b = 20+2*4-12/5 print(b) #wynik 25.6
Kolejność wykonywania operatorów zmieniamy za pomocą nawiasów okrągłych.
a = (3+3)/2 print(a) #wynik 3.0 b = (((20+2)*4)-12)/5 print(b) #wynik 15.2
W poniższym przykładzie do zmiennej o nazwie „wynik” przypisujemy dwójkę. Dwójka to wynik wyrażenia 16/4/2.
wynik = 16/4/2 #wynik 2
Jeśli występują nawiasy, obliczenie wartości wyrażenia arytmetycznego, zaczyna się od działań w nawiasach najbardziej wewnętrznych, tj. tych, w których nie ma już innych nawiasów.
wynik = 16/(4/2) # wynik = 8
Python typy danych wbudowane
Python obsługuje następujące typy danych:
- numeryczne (liczbowe): int, float, complex
- tekstowe: str
- sekwencji: list, tuple
- odwzorowania (mapping type): dict
- zestawów (set types): set, frozenset
- logiczne: bool
- binarne: bytes, bytearray
Są one wbudowane tzn. można z nich korzystać bez konieczności importowania zewnętrznej biblioteki.
Typ int (ang. integer) reprezentuje liczby całkowite dodatnie lub ujemne bez kropki dziesiętnej. Nie mają one limitu dopuszczalnych wartości tzn. mogą być tak długie, jak tylko chcesz. Ograniczeniem jest ilość pamięci Twojego komputera. Przykłady przypisania danych typu integer do zmiennych a, m, p.
a = 2017 m = -8 + 2 p = 314159265358979323846264338327950288419716939937510582
Typ float (zmiennoprzecinkowy) reprezentuje liczby rzeczywiste. Składają się one z części całkowitej i ułamkowej. Separatorem dzielącym część całkowitą od ułamkowej jest w Pythonie kropka.
e = 2.718281828459045 volume_of_the_sun = 1.4e27
Liczby zespolone (complex) – zapisywane są jako suma części rzeczywistej i części urojonej. Część urojona oznaczana jest przez dostawioną na jej końcu literę „j”. Wartości rzeczywista i urojona przechowywane są jako typ float.
c1 = 0 + 2j r = c1.real i = c1.imag c2 = complex(0,1)
Typ tekstowy (str) – reprezentuje sekwencje (ciągi) danych znakowych. Określa się też go jako napisy, łańcuchy znaków.
Napisy ograniczamy cudzysłowami lub apostrofami. Jeżeli początek napisu oznaczony został cudzysłowem, powinien on zostać zakończony cudzysłowem. Jeśli oznaczony został apostrofem powinien zostać zakończony apostrofem.
wiadomość = "Spotkajmy się" print(wiadomość) w2 = 'Godzina piąta' print(w2) #wynik Spotkajmy się Godzina piąta
W napisach ograniczonych cudzysłowami można używać apostrofów. W napisach ograniczonych apostrofami można używać cudzysłowów:
message1 = 'I\'m so glad' message2 = "I'm so glad"
Napisy ograniczone pojedynczymi cudzysłowami lub apostrofami muszą kończyć się przed końcem linii. Napisy mogą ciągnąć się przez wiele linii, jeżeli ograniczymy je potrójnymi cudzysłowami lub apostrofami:
cytat = '''Cytat z Ojca Chrzestnego: "It's not personal. It's strictly business."''' print(cytat)
lub
cytat = """Cytat z Ojca Chrzestnego: 'It's not personal. It's strictly business.'""" print(cytat)
Napisy można łączyć (sklejać) operatorem + oraz multiplikować operatorem *:
'Szkolenie ' + 'z Pythona' # 'Szkolenie z Pythona' 'Witaj' + '!' * 3 # 'Witaj!!!'
Typ danych lista – lista to uporządkowana kolekcja elementów. Elementy listy mogą być zmieniane oraz mogą występować w nich duplikaty. Więcej informacji o listach znajdziesz w artykule Python lista
Typ danych krotka (ang. tuple) – krotka to uporządkowana kolekcja elementów. Elementy krotki nie mogą być zmieniane. Krotka może zawierać duplikaty. Więcej informacji na temat krotki znajdziesz w artykule Python krotka
Typ danych dict – słownik (ang. dictionary) składa się ze zbioru par klucz-wartość. Każda para klucz-wartość odwzorowuje klucz na powiązaną wartość. Klucze muszą być unikalne. Przykład:
kontakty = { "Jan" : 938477566, "Jacek" : 938377264, "Janusz" : 947662781 }
Typ danych zbiór (ang. set) – to nieuporządkowany typ danych kolekcji. Jest on iterowalny, zmienny i nie zawiera zduplikowanych elementów. Zbiór, w przeciwieństwie do listy, posiada zoptymalizowaną, opartą o tablicę haszującą, metodę sprawdzania, czy określony element jest w nim zawarty. Set tworzymy w następujący sposób:
owoce = {"jabłko", "gruszka", "śliwka"} print(owoce)
Typ danych zbiór frozen (ang. frozenset) – to niezmienna wersja obiektu zbiór (set). Elementów w obiekcie frozenset nie można zmieniać.
owoce = {"jabłko", "gruszka", "śliwka"} print(owoce)
Typ danych logiczny (ang. bool) – umożliwia ocenę dowolnego wyrażenia i uzyskanie odpowiedzi Prawda lub Fałsz.
print(2<3) #wynik True print(2>3) #wynik False
Typ bytes – jest kontenerem do przechowywania bajtów. W przykładzie litera b przed słowem „ala” sygnalizuje, że to jest typ byte a nie string. Typ byte nie jest mutowalny.
imię = b"ala"
Typ bytearray to zmienna (mutowalna) wersja typu bytes.
Sprawdzanie typu danych obiektu
Aby sprawdzić typ danych dowolnego obiektu w Pythonie, należy użyć funkcji type():
x = 2; y = '2' print(type(x), type(y)) #wynik <class 'int'> <class 'str'>
W przykładzie do zmiennej x przypisujemy dwójkę jako liczbę, a do zmiennej y przypisujemy dwójkę jako tekst. W wyniku wyświetlamy typ zmiennej.
Ustawianie typu danych
Typ danych ustawiamy przypisując daną wartość do zmiennej. Nie deklarujemy jakiego typu ma być zmienna. Przyjmuje ona taki typ, jaki jest w przypisanej do niej wartości.
Przykłady – typ danych, który ustawiony zostanie dla zmiennej z:
- string (tekst)
z = "Ala"
- int (liczba całkowita)
z = 5
- string (tekst)
'5'
- float (liczba zmiennoprzecinkowa)
z = 1.3
- lista
z = ['Ala', 'Ola']
- krotka (ang. tuple)
z = ('Ala', 'Ola')
- słownik (ang. dictionary)
z = {'imię': "Jan", 'punkty': 21}
- set
z = {'Ala', 'Ola'}
- frozenset
z = frozenset({'Ala', 'Ola'})
- bool
z = True
- complex
z = 2+4j
- bytes
z = b"Ala"
- bytearray
z = bytearray(3)
Jeśli spróbujemy użyć zmiennej, której wcześniej nie nadaliśmy żadnej wartości otrzymamy komunikat o błędzie:
print(a) Traceback (most recent call last): File "C:\Users\Basia\Desktop\bb.py", line 1, in <module> print(a) NameError: name 'a' is not defined
Konstruktory typu danych
Za pomocą konstruktorów możesz przypisać do zmiennej typ danych niezależny od typu wartości, którą przypisujemy. W poniższym przykładzie do zmiennej a przypisujemy wartość 5, która jest tekstem (piątka jest ujęta w apostrofy). Po sprawdzeniu typu zmiennej z otrzymujemy wynik 'int’, gdyż za pomocą konstruktora int zmieniliśmy typ przypisywanej wartości z tekstu na int.
a = int('5') print(type(a)) <class 'int'> #wynik
Konstruktory typu danych np. int, float, string nie są funkcjami. Są to konstruktory obiektów. Przykładowo int tworzy obiekt liczba całkowita.
Ciekawostka! Funkcja type() zwraca typ obiektu lub zwraca obiekt nowego typu na podstawie przekazanych argumentów. W poniższym przykładzie:
- do zmiennej z przypisujemy wartość 5.2 – jest to wartość typu float i na jej podstawie zmienna z przyjmuje typ float
- do zmiennej y przypisujemy wartość tekstową '123′. W wyniku otrzymujemy wartość 123.00, gdyż za pomocą funkcji type() przypisujemy zmiennej y typ float. W przykładzie: y = type(z) określa jakiego typu jest wartość z czyli zwraca klasę. Następna para nawiasów z 123 uruchamia konstruktor tej klasy.
z = 5.2 y = type(z)('123') print(y)
Konwersja int na float (typ float jest szerszy)
x = 12 # int y = 12.0 # float z = float(12) # float p = int(3.14) # p = 3 typu int
Konwersja float na complex (typ complex jest szerszy). Jeśli sumujemy dwie wartości liczbowe, które są różnego typu, Python uzgadnia typy przed wykonaniem obliczeń np. jeśli mamy int i float, int zostanie przekonwertowany na float. Konwersja dokonywana jest na typ szerszy.
Wyjątek stanowi dzielenie int przez int. W wyniku dzielenia int przez int otrzymujemy float. Jeśli dzielimy float przez complex w wyniku otrzymujemy complex.
f = 1.765 # float c = f + 0j # complex c = 1.765 + 0j # complex
Reguła: jeśli wykonujemy operacje na liczbach różnych typów, Python najpierw przekształci argumenty do szerszego typu, potem wykona operację.
a = 2 b = 6.0 c = 12+0j
#dodawanie a + b # int + float 8.0 # float #odejmowanie b - a # float – int 4.0 # float #mnożenie a * 7 # int * int 14 # int #dzielenie c / b # complex / float (2+0j) # complex
Dzielenie zwraca tylko typy float lub complex.
16/5 # = 3.2 ; int / int wynik typu float 20/5 # = 4.0 14//5 # = 2 (dzielenie całkowitoliczbowe) 14%5 # = 4 (reszta z dzielenia)
Uwaga. Jeśli jest ryzyko wykonania dzielenia przez 0, należy obsłużyć taką sytuację w sposób specjalny.
Zapraszamy na nasz kurs Python poziom podstawowy, na którym perfekcyjnie opanujesz typy danych oraz inne zagadnienia związane z programowaniem w języku Python.