Nauka Podstaw Pythona, python

Nauka podstaw Pythona – typy danych

Nauka Podstaw Pythona: typy danych

Wielokrotnie dostaję wiadomości dotyczące podstaw języka Python. Postanowiłem wyjść na przeciw prośbom i stworzyć post przeznaczony dla początkujących programistów tego języka:)

W tym artykule opowiem Wam ogólnie o Pythonie oraz o narzędziach, których potrzebujecie zanim zaczniecie zabawę z tym językiem. Omówię również typy danych występujące w języku Python.

Czym jest Python?

czym jest python

Python jest przede wszystkim wysokopoziomowym językiem programowania wysokiego poziomu. Mówiąc o Pythonie bardzo często mamy na myśli coś więcej niż sam język. Python również biblioteki, cały ekosystem z nim związany oraz przede wszystkim: community.

To właśnie dzięki community Python jest tak popularnym językiem. „Czysty” Python nie jest niczym szczególnym – jest to niezbyt szybki język o bardzo prostej składni. Prawdziwą potęgą Pythona są dodatkowe pakiety i biblioteki tworzone za darmo, przez community. To właśnie dzięki nim Python stał się językiem świetnym do analizy danych, tworzenia aplikacji webowych czy też pisania botów.

Największa zaleta Pythona

Python ma bardzo wiele zalet, jednak gdybym miał wskazać jedną największą byłaby to szybkość z jaką można tworzyć działające aplikacje rozwiązujące realne problemy. Opisując przyspieszenie samochodów określamy w jakim czasie rozpędza się od 0 do 100 km/h. Do określania jak szybko przy pomocy danego języka możemy stworzyć działające rozwiązanie możemy użyć miary „od 0 do MVP„. Porównując języki tą miarą Python zdecydowanie byłby na szczycie zestawienia, gdyż z jego pomocą jesteśmy w stanie bardzo szybko zbudować działący prototyp aplikacji spełniający podstawowe funkcjonalności (tzw MVPMinimum Viable Product).

od 0 do MVP

Środowisko programistyczne

Zanim zaczniemy zabawę z programowaniem potrzebujemy zainstalować i wstępnie skonfigurować środowisko programistyczne, w którym będziemy tworzyć. Podstawowe środowisko składać się będzie z samego języka oraz edytora tekstu (bądź bardziej skomplikowanego narzędzia) ułatwiającego tworzenie kodu.

Instalacja języka

Instalacja Pythona w systemach z rodziny UNIX (Linux, MacOS) dostępna jest za pomocą narzędzi wbudowanych w system: apt dla Linuxa i brew dla Maca. W wymienionych systemach bardzo często Python jest już domyślnie zainstalowany.

Instalacja dla systemu Windows może być trochę bardziej problematyczna. Dystrybucję Pythona należy bowiem ściagnąć z oficjalnej strony języka.

IDE

Aby tworzyć kod potrzebujemy jeszcze jednego narzędzia. Może być to typowy edytor tekstu jak notatnik czy VIM (o którym pisałem już post).
Można jednak zaopatrzyć się w dużo bardziej skomplikowane i pomocne narzędzie nazywane IDE – zintegrowanym środowiskiem programistycznym. Środowisko takie pozwala tworzyć kod, od razu go uruchamiać, jest wyposażona w debugger, autouzupełnianie i wiele innych przydatnych narzędzi.

W przypadku zaawansowanych pythonowych IDE wybór jest właściwie jedyny – PyCharm. Oprogramowanie stworzone przez firmę JetBrains jest dostępne w wersji profesjonalnej (płatnej) i wersji community dostępnej za darmo. Warto dodać, że studenci korzystając z uczelnianego adresu email mogą dostać czasowy dostęp do wersji professional za darmo.

Według ankiety Python developers survey 2018 przeprowadzonej przez firmę JetBrains ich narzędzie jest najpopularniejszym wyborem programistów.

wyniki ankiety Python Developers Survey 2018
Najpopularniejsze edytory i IDE

Uruchamianie kodu napisanego Pythona z poziomu programisty jest znacznie mniej skomplikowane niż w przypadku na przykład Javy, dlatego też nie musicie wcale korzystać z zaawansowanego IDE. Bardzo popularnym rozwiązaniem są rozbudowane edytory tekstowe z wbudowanym interpreterem jak na przykład VS Code, Sublime Text, Atom czy IDLE, które instaluje się razem z Pythonem. Programy tego typu pozwaląją tworzyć kod i uruchamiać go jednym przyciskiem z poziomu edytora. Pomagają nam również podkreślając składnie.

Innym rozwiązaniem szczególnie popularnym do analizy danych jest Jupyter Notebook.

jupyter notebook

Jupyter Notebook pozwala tworzyć kod w blokach uruchamianych osobno. Każdy blok może składać się z wielu linii kodu. Po uruchomieniu bloku zaraz pod nim znajduje się wynik wykonanej operacji. W Notebooku można wyświetlać również obrazy i wykresy.

Narzędzie to idealnie sprawdza się do analizy danych, gdyż pozwala pisać kod i wyświetlać wszelkie grafiki od razu w dokumencie, co jest nie tylko atrakcyjnie wizualnie, lecz także pozwala szybko i bezproblemowo wrócić do poprzednich wykresów, tabel czy wyników operacji.

Składnia języka

Składnia Pythona jest jedną z prostszych składni. Nie używa się tutaj średników, a klamry służą jedynie do deklaracji dwóch struktur danych.

W Pythonie nie deklarujemy również zmiennych. Co więcej, zmienna będąca początkowo napisem może następnie reprezentować liczbę zmiennoprzecinkową, jednak takie podejście nie jest zalecane i często prowadzi do błędów po stronie programisty.

deklarowanie zmiennych w Python

Słowa kluczowe

Rozpoczynając naukę języka powinniśmy zapoznać się z jego słowami kluczowymi (z ang. keywords). W Pythonie znajduje się aktualnie 35 słów kluczowych:

Słowa kluczowe w Pythonie

Znajomość słów kluczowych jest niezbędna z dwóch powodów: daje nam podstawowe pojęcie o możliwościach języka oraz pozwala uniknąć błędów kompilacji – gdyż słów kluczowych nie można używać jako zmiennych.

Przypisanie zmiennych

Przypisanie zmiennych następuje poprzez znak równości (=). Typ danych utworzonej zmiennej jest zależny od wartości przypisanej do zmiennej. (Do sprawdzenia typu zmiennej służy metoda type)

Typy danych Python

Typy danych

W „czystym” Pythonie znajdziemy następujące typy danych:

Typy podstawowe

  • liczby całkowite – int
  • liczby zmiennoprzecinkowe – float
  • napisy – str
  • liczba złożona (część rzeczywista + urojona) – complex
  • typ logiczny – bool

Typy złożone

Typami złożonymi nazywami typy danych będące kontenerami przechowującymi inne typy danych.

Listy (list)

Lista to kontener danych przypominających tablicę, kolejność elementów jest zachowana, do elementów odwołujemy się za pomocą indeksów, można dodawać, usuwać i zmieniać elementy.

>>> l = [1, 2, 3, 4] 
>>> print(l) 
[1, 2, 3, 4]
>>> zagniezdzona = [1, [2, 3, [4, [5]]]]

Struktury danych w Pythonie (w tym listy) mogą zawierać obiekty różnych klas. 

typy = [str, 3.14, 5, "text", tuple]

Listy są indeksowane, czyli do jej elementów dostajemy się za pomocą indeksów będącymi kolejnymi liczbami całkowitymi (licząc od 0). 

>>> liczby = [1, 2, 3, 4]
>>> liczby[0] 
1
>>> liczby[3] 
4 
>>> # indeksować możemy również od tyłu używając liczb ujemnych 
>>> liczby[-1] 
4 
>>> liczby[-2] 
3

Genialną funkcją Pythona jest tzw list slicing czyli wycinanie z listy jej części. Pozwala nam to wybrać z listy elementy pomiędzy konkrentymi indeksami. Składnia:

lista[indeks_poczatkowy:indeks_koncowy]
# lub
lista[indeks_poczatkowy:indeks_koncowy:krok]

Przy czym przedział jest lewostronnie domknięty, to znaczy element znajdujący się pod indeksem końcowym nie zostanie włączony.

Przykłady użycia:

>>> liczby = [1, 2, 3, 4, 5, 6, 7]
>>> liczby[1:3] 
[2, 3] 
>>> liczby[1:6:2] 
[2, 4, 6] 
>>> # odwracanie listy: 
>>> liczby[::-1] 
[7, 6, 5, 4, 3, 2, 1] 
>>> # listę można również odwrócić następująco: 
>>> liczby.reverse() 
>>> liczby 
[7, 6, 5, 4, 3, 2, 1]

Przejdźmy teraz do operacji wykonywanych na listach:

>>> liczby = [1, 2, 3, 4] 

>>> # dodawanie na koniec listy: 
>>> liczby.append(5) 
>>> liczby 
[1, 2, 3, 4, 5] 

>>> # dodawanie przed dowolnym indeksem 
>>> # skladnia: insert(index, element) 
>>> index = 0 
>>> liczby.insert(index, 0) 
>>> liczby 
[0, 1, 2, 3, 4, 5] 

>>> # usuwanie z listy: 
>>> liczby.remove(3) 
>>> liczby 
[0, 1, 2, 4, 5] 

>>> # usuwanie liczby ze zwróceniem: 
>>> x = liczby.pop(0) # 0 jest indeksem, a nie wartością 
>>> x 
0 

>>> # zwracanie indeksu 
>>> liczby.index(1)  # zwraca indeks cyfry 1 
1

Elementy w liście mogą być również zmieniane

>>> l = ["jeden", "dwa", "trzy"]
>>> l[0] = '1'
>>> l
['1', 'dwa', 'trzy']
>>> l[1:3] = [2, 3]
>>> l
['1', 2, 3]

Krotki (tuple)

Krotka jest typem danych podobnym do listy, jednak są niemodyfikowalne. Raz stworzona krotka nie może zmieniać swojej zawartości, nie da się do niej dodawać elementów, usuwać ich czy zmieniać. Chcąc dokonać zmiany musimy stworzyć nową krotkę. Krotki są również znacznie szybsze od list.

k = (1, 2, 3)

Wśród metod wbudowanych w krotki znajdziemy jedynie metody count index.

>>> k.count(1) 
1 
>>> k.index(3) 
2

Krotki są indeksowalne czyli do jej elementów odwołujemy się indeksami, tak samo jak w przypadku list.

>>> k[2] 
3

Jak już wcześniej pisałem krotki są szybsze niż listy. Aby wykorzystać tę właściwość wykorzystuje się je jako iteratory. Iteratorem nazywamy obiekt, po którym możemy przechodzić w pętli. W Pythonie domyślną pętlą jest pętla foreach:

for element in iterator: 
    # zrób coś

Jeżeli potrzebujemy iterować po kontenerze danych róbmy to po krotce. Będzie to znacznie szybsze niż w przypadku listy.

Słowniki (dict)

Elementami słownika są pary klucz-wartość. Kolejność elementów nie jest zachowana, a wartości są modyfikowalne. Pythonowy słownik jest odpowiednikiem mapy czy też tablicy asocjacyjnej.

Zarówno klucze jak i wartości mogą być dowolnymi obiektami.

>>> slownik = {'jeden': 12213,
    'dwa': 3.14,
    'trzy': "text"}
>>> slownik
{'jeden': 12213, 'dwa': 3.14, 'trzy': 'text'}

Do wartości znajdujących się w słowniku odwołujemy się za pomocą klucza.

>>> slownik['jeden'] 
12213 
>>> slownik['trzy'] 
'text'

Elementy słownika można zmieniać:

>>> slownik['jeden'] = 956
>>> slownik
{'jeden': 956, 'dwa': 3.14, 'trzy': 'text'}

Zmiana nazwy klucza nie jest tak intuicyjna, jednak można zrobić to jednym prostym trikiem.

>>> slownik['pi'] = slownik.pop('dwa')
>>> slownik
{'jeden': 956, 'trzy': 'text', 'pi': 3.14}

Ze słownika możemy pobrać listę elementów składających się z krotek oraz listy wartości i kluczy.

>>> slownik.items()
dict_items([('jeden', 12213), ('dwa', 3.14), ('trzy', 'text')])

>>> slownik.keys()
dict_keys(['jeden', 'dwa', 'trzy'])

>>> slownik.values()
dict_values([12213, 3.14, 'text'])

Iteracja po elementach słownika może odpywać się w następujący sposób:

>>> for klucz in slownik:
	print(f"{klucz}: {slownik[klucz]}")

jeden: 956
trzy: text
pi: 3.14

Zbiory (set)

Cechą wyróżniającą zbiory jest unikalność elementów, to znaczy, że elementy w zbiorze nie mogą się powtarzać.
Sety deklarujemy za pomocą klamer:

>>> s = {1, 2, 2, 3}
>>> s2 = {3, 3, 5, 12}

Pythonowe sety reprezentują zbiory matematyczne, dlatego też ta struktura danych została wyposażone w metody związane z algebrą zbiorów.
Najczęściej wykorzystywane jest sumowanie zbiorów.

>>> s.union(s2)
{1, 2, 3, 5, 12}

Operacje matematyczne wykonywane za pomocą metod mają również odpowiedniki symboliczne

>>> s.union(s2)
{1, 2, 3, 5, 12}
>>> s | s2
{1, 2, 3, 5, 12}

Iloczyn zbiorów:

>>> s.intersection(s2)
{3}
>>> s & s2
{3}

>>> s & s2

Różnica zbiorów:

>>> s.difference(s2)
{1, 2}
>>> s - s2
{1, 2}

Na zbiorach możemy również wykonywać podstawowe operacje

>>> s
{1, 2, 3}

>>> s.add(4)
>>> s
{1, 2, 3, 4}

>>> s.remove(1)
>>> s
{2, 3, 4}

Istnieje również wbudowana modyfikacja zbioru – frozenset. Jej główną różnicą jest niezmienialność.

>>> x = frozenset([5, 231, 17])
>>> x
frozenset({17, 5, 231})

Podsumowanie

W tym artykule przeznaczonym dla początkujących skupiłem się na wiedzy dotyczącej podstawowych struktur danych. Chciałem wyjaśnić Wam podstawy działania wbudowanych w język typów danych oraz pokazać jak ich używać. Jest to wiedza niezbędna do rozpoczęcia zabawy z kodowaniem.

Chcecie nowe posty z cyklu „podstawy Pythona”? A może jakieś zagadnienie z tego języka sprawia Wam problem i chcecie abym je omówił na blogu? Dajcie znać 😉

Jeśli chcesz być na bieżąco z najnowszymi materiałami, polub nasz fanpage na Facebooku:

https://www.facebook.com/kamil.kwapisz.python

Dodatkowe źródła wiedzy

Tagged , , , , , ,

2 thoughts on “Nauka podstaw Pythona – typy danych

    1. Dzięki, cieszę się, że wpisy pomagają! 🙂

      Powodzenia!

Comments are closed.