Typy danych w Pythonie – kompletny przewodnik

18 czerwca 2024

Typy danych python to fundamentalna koncepcja, którą musi opanować każdy początkujący programista oraz aspirujący cyberbezpiecznik. Określają one rodzaj wartości, jakie możemy przechowywać w zmiennych i na jakich operacjach możemy wykonywać. W tym artykule przedstawimy Ci najważniejsze typy danych dostępne w Pythonie i pokażemy, jak efektywnie wykorzystywać je w swojej pracy.

Typy liczbowe

Python oferuje kilka typów liczbowych do przechowywania wartości numerycznych:

  • int – liczby całkowite, np. `42`, `-5`
  • float – liczby zmiennoprzecinkowe, np. `3.14`, `-2.5`
  • complex – liczby zespolone, np. `2+3j`, `-1-5j`

Typy liczbowe pozwalają wykonywać różne operacje arytmetyczne, takie jak dodawanie, odejmowanie, mnożenie czy dzielenie. Przykładowo:

python
a = 10
b = 3

print(a + b)  # 13
print(a - b)  # 7
print(a * b)  # 30
print(a / b)  # 3.3333333333333335

Typ tekstowy

Do przechowywania danych tekstowych w Pythonie służy typ **string** (w skrócie **str**). Stringi definiujemy w cudzysłowach, np. `”Hello, World!”`, `’Python jest super!’`. Możemy na nich wykonywać różne operacje, takie jak konkatenacja (łączenie), wycinanie fragmentów, sprawdzanie długości itp.

python
greeting = "Hello"
name = "Alice"

print(greeting + " " + name)  # Hello Alice
print(len(greeting))  # 5
print(name[0])  # A
print(name[1:3])  # li

Typ logiczny

Typ bool reprezentuje wartości logiczne i może przyjmować tylko dwie wartości: `True` albo `False`. Wartości logiczne są wynikiem operacji porównania lub wyrażeń logicznych.

python
is_python_cool = True
is_java_better = False

print(is_python_cool and is_java_better)  # False
print(is_python_cool or is_java_better)   # True
print(not is_java_better)  # True

Typy sekwencyjne

Python oferuje kilka typów sekwencyjnych do przechowywania kolekcji elementów:

  • list – lista, modyfikowalna sekwencja elementów, np. `[1, 2, ‘a’, True]`
  • tuple – krotka, niemodyfikowalna sekwencja elementów, np. `(1, 2, ‘a’, True)`
  • range – reprezentuje sekwencję liczb, np. `range(1, 10)`

Najczęściej używanym typem jest lista. Pozwala ona przechowywać wiele elementów różnych typów i zapewnia metody do modyfikacji, takie jak dodawanie, usuwanie czy zmiana elementów.

python
numbers = [1, 2, 3, 4, 5]
numbers[2] = 10
print(numbers)  # [1, 2, 10, 4, 5]

numbers.append(6)
print(numbers)  # [1, 2, 10, 4, 5, 6]

numbers.remove(4)
print(numbers)  # [1, 2, 10, 5, 6]
python typy danych

Typ słownikowy

Typ dict reprezentuje słownik, czyli zbiór par klucz-wartość. Klucze muszą być unikalne i niemodyfikowalne (np. stringi, liczby, tuple), a wartości mogą być dowolnego typu. Słowniki pozwalają na efektywne przechowywanie i dostęp do danych po kluczu.

python
person = {
    "name": "Alice", 
    "age": 25,
    "city": "New York"
}

print(person["name"])  # Alice
print(person.get("age"))  # 25

person["email"] = "alice@example.com"
print(person)  # {'name': 'Alice', 'age': 25, 'city': 'New York', 'email': 'alice@example.com'}

Typ zbioru

Python oferuje dwa typy zbiorów:

  • set – zbiór, modyfikowalny zbiór unikalnych elementów, np. `{1, 2, 3}`
  • frozenset – niemodyfikowalny zbiór unikalnych elementów, np. `frozenset({1, 2, 3})`

Zbiory pozwalają na efektywne sprawdzanie przynależności elementów oraz wykonywanie operacji matematycznych takich jak suma, przecięcie czy różnica.

python
fruits = {"apple", "banana", "orange"}

print("apple" in fruits)  # True
print("grape" in fruits)  # False

tropical = {"banana", "mango", "pineapple"}
print(fruits | tropical)  # {'orange', 'banana', 'mango', 'apple', 'pineapple'}
print(fruits & tropical)  # {'banana'}
print(fruits - tropical)  # {'orange', 'apple'}

Typ specjalny None

Python posiada również specjalny typ None, który reprezentuje brak wartości. Jest on używany, gdy chcemy zaznaczyć, że dana zmienna nie posiada jeszcze przypisanej sensownej wartości.

python
result = None
print(result)  # None

if result is None:
    print("Wynik nie został jeszcze obliczony")

Typy danych w Pythonie w testach penetracyjnych

Typy danych w Pythonie mogą być z powodzeniem używane w testach penetracyjnych i to na wiele sposobów, co pozwala na efektywne przetwarzanie informacji, manipulację danymi oraz automatyzację zadań. Wykorzystanie typów danych w Pythonie w testach penetracyjnych pozwala na tworzenie bardziej złożonych i efektywnych narzędzi, które mogą automatyzować wiele zadań związanych z bezpieczeństwem aplikacji i systemów. Poniżej prezentujemy kilka przykładów z podziałem na typy podstawowe i złożone.

Typy podstawowe

  • Liczby całkowite (int) i zmiennoprzecinkowe (float) – używane do przechowywania wartości numerycznych, które mogą być wykorzystywane w obliczeniach, takich jak analiza czasów odpowiedzi serwera czy obliczenia związane z wydajnością ataków (np. czas potrzebny na przeprowadzenie ataku siłowego (brute-force) lub słownikowego.
  • Stringi (str) – kluczowe do przechowywania i manipulacji danymi tekstowymi, takimi jak adresy URL, nagłówki HTTP, dane formularzy czy komunikaty błędów. Stringi mogą być również używane do generowania payloadów w atakach, takich jak SQL injection czy XSS (Cross-Site Scripting).
  • Typ logiczny (bool) – przydatny w kontrolowaniu przepływu danych i wyników działania programu, na przykład do określenia, czy dany test został zakończony pomyślnie, czy też wystąpił błąd. Może być używany w warunkach do podejmowania decyzji o dalszych krokach w skrypcie testowym.

Typy złożone

  • Listy – umożliwiają przechowywanie i zarządzanie kolekcjami danych, takich jak adresy IP, porty do skanowania czy wyniki testów. Listy są elastyczne i mogą być łatwo modyfikowane w trakcie działania samego programu.
  • Słowniki (dict) – idealne do przechowywania par klucz-wartość, co pozwala na efektywne zarządzanie danymi, takimi jak konfiguracje ataków, wyniki testów czy metadane o podatnościach. Słowniki umożliwiają szybki dostęp do danych na podstawie klucza.
  • Krotki (tuple) – używane do przechowywania niezmiennych zbiorów danych, co może być przydatne w przypadkach, gdy nie chcemy, aby dane były modyfikowane, na przykład w przypadku konfiguracji.

Proste przykłady zastosowania

  • Automatyzacja skanowania – można wykorzystać listy do przechowywania adresów IP do skanowania oraz słowników do przechowywania wyników skanowania, co ułatwia potem analizę i raportowanie wyników.
  • Generowanie ładunków (payloadów) – stringi mogą być używane do tworzenia dynamicznych payloadów, które są następnie wysyłane do aplikacji w celu testowania ich odporności na różne typy ataków.
  • Zarządzanie danymi – typy złożone, takie jak słowniki, mogą być używane do przechowywania informacji o podatnościach w systemie, co ułatwia ich późniejsze przetwarzanie, analizowanie i raportowanie.

Podsumowanie

  • Python oferuje bogatą gamę typów danych do przechowywania różnego rodzaju wartości – liczb, tekstów, wartości logicznych, kolekcji czy par klucz-wartość.
  • Każdy typ posiada charakterystyczny zestaw operacji, które możemy na nim wykonywać.
  • Dobór odpowiedniego typu danych zależy od charakteru przechowywanych wartości i wymaganych operacji. 
  • Warto eksperymentować z różnymi typami, aby poznać ich możliwości i nauczyć się efektywnie z nich korzystać.
  • Typy danych w Pythonie mogą być z powodzeniem używane w pracy Specjalisty Cybersecurity np. przy testach penetracyjnych.

TypPrzykładowe wartościOpis
int-5, 0, 10, 1000Liczby całkowite
float2.5, -3.14, 0.0Liczby zmiennoprzecinkowe
complex1+2j, -3-4jLiczby zespolone
str“Hello”, ‘Python’, “””Multiline”””Napisy (ciągi znaków)
boolTrue, FalseWartości logiczne
list[1, 2, ‘a’], []Lista – modyfikowalna sekwencja elementów
tuple(1, 2, ‘a’), ()Krotka – niemodyfikowalna sekwencja elementów
rangerange(1, 10), range(5)Reprezentuje sekwencję liczb
dict{‘key’: ‘value’}, {}Słownik – zbiór par klucz-wartość
set{1, 2, 3}, set()Zbiór – modyfikowalny zbiór unikalnych elementów
frozensetfrozenset({1, 2, 3})Niemodyfikowalny zbiór unikalnych elementów
NoneNoneSpecjalna wartość reprezentująca brak wartości

W HackerU doskonale zdajemy sobie sprawę, jak ważna jest praktyczna znajomość typów danych w Pythonie. Dlatego na naszych kursach cyberbezpieczeństwa Red Team, duży nacisk kładziemy na zrozumienie i efektywne wykorzystanie różnych typów. Pod okiem doświadczonych trenerów nauczysz się, kiedy stosować konkretne typy, jak wykonywać na nich operacje i jak wykorzystywać ich możliwości do pracy z zakresu cybersecurity. Dzięki kursom w HackerU zdobędziesz solidne fundamenty z Pythona i przygotujesz się do zawodu Specjalisty ds. Cyberbezpieczeństwa!


Źródła:

  • https://docs.python.org/3/library/datatypes.html
  • https://www.w3schools.com/python/python_examples.asp