Какие типы данных в Python ты знаешь?

Ответ

В Python есть несколько встроенных типов данных:

  1. Числовые:
    • int (целые числа, например 42)
    • float (числа с плавающей точкой, например 3.14)
    • complex (комплексные числа, например 1+2j)
  2. Последовательности:
    • str (строки, например "hello")
    • list (изменяемые списки, например [1, 2, 3])
    • tuple (неизменяемые кортежи, например (1, 2, 3))
  3. Множества:
    • set (изменяемое множество, например {1, 2, 3})
    • frozenset (неизменяемое множество)
  4. Отображения:
    • dict (словари, например {"key": "value"})
  5. Булевы:
    • bool (True или False)
  6. Бинарные:
    • bytes (например b"hello")
    • bytearray
    • memoryview

Почему это важно для тестирования? Понимание типов данных критично для валидации ответов API, проверки граничных значений и написания корректных проверок (assert). Например, при тестировании API важно убедиться, что поле, описанное в документации как integer, действительно возвращается как int, а не как строка.

Пример проверки типа в тесте:

import requests

def test_api_response_data_types():
    response = requests.get("https://api.example.com/users/1")
    user_data = response.json()

    # Проверяем, что ID — целое число
    assert isinstance(user_data['id'], int), f"Expected 'id' to be int, got {type(user_data['id'])}"
    # Проверяем, что имя — строка
    assert isinstance(user_data['name'], str), f"Expected 'name' to be str, got {type(user_data['name'])}"

Ответ 18+ 🔞

А, ну это же классика, ёпта! Сидишь ты такой, пишешь свои тесты, и тут бац — а API тебе вместо числа строку подсовывает. И сидишь потом, чешешь репу: "Какого хуя? В документации же integer!" А оно, блядь, в кавычках прилетело. Вот чтобы такого пиздеца не было, надо эти типы данных в Python знать, как свои пять пальцев.

Смотри, какие там звери водятся, овердохуища просто:

  1. Циферки всякие:

    • int — это наши родные целые числа, типа 42. Без всяких там точек и запятых, чистая математика.
    • float — числа с плавающей точкой, 3.14 там всякое. Выглядит как число, но внутри может быть мелкая пакость в виде погрешности, имей в виду.
    • complex — комплексные числа, 1+2j. Честно? В обычном тестировании API встречаешь это чудо реже, чем честного человека в политике. Но знать надо.
  2. Последовательности, они же коллекции:

    • str — строки, "hello". Всё, что в кавычках — его царство. Главный источник проблем, когда его там, где не ждали.
    • list — список, [1, 2, 3]. Изменяемый, гибкий, можно что угодно внутрь пихать и обратно вынимать. Как твоя жизнь после пятницы.
    • tuple — кортеж, (1, 2, 3). Неизменяемый, строгий, как твой начальник в понедельник. Создал — и терпи до конца.
  3. Множества:

    • set{1, 2, 3}. Хранит только уникальные штуки, порядком похуй. Быстрый поиск, но, блядь, не упорядоченный.
    • frozenset — то же самое, но замороженное. Как set, который на морозе голой жопой сел.
  4. Отображения:

    • dict — словарь, {"key": "value"}. Основа основ JSON-ответов. Без него нихуя не сделаешь.
  5. Булевы значения:

    • bool — либо True, либо False. Казалось бы, проще некуда. Ан нет, получаешь иногда от бэкенда "true" строчкой и волосы дыбом встают. Пиздец.
  6. Бинарные типы (bytes, bytearray) — это уже для картинок, файлов и прочей бинарной жести. Когда начинаешь с этим работать, чувствуешь себя хакером из 90-х.

А нахуя это всё тестировщику? Да затем, чувак, чтобы не выглядеть идиотом! Представь: пишешь ты автотест, проверяешь ответ API. В спецификации чётко сказано: поле "age" — integer. А тебе прилетает "age": "25". Строка! Если ты не проверишь isinstance(age, int), то твой тест проглотит эту хуйню, а потом на продакшене всё накроется медным тазом, когда этот "возраст" попробуют отнять от чего-нибудь.

Вот смотри, как это по-пацански делается:

import requests

def test_api_response_data_types():
    response = requests.get("https://api.example.com/users/1")
    user_data = response.json()

    # Проверяем, что ID — целое число, а не какая-нибудь залупа конская в виде строки
    assert isinstance(user_data['id'], int), f"Expected 'id' to be int, got {type(user_data['id'])}"
    # Проверяем, что имя — строка
    assert isinstance(user_data['name'], str), f"Expected 'name' to be str, got {type(user_data['name'])}"

Вот и вся магия. Знаешь типы — предвидишь проблемы. Не знаешь — получаешь ночной вызов на работу, потому что "всё упало". Выбирай сам.

Видео-ответы