Какие типы объектов существуют в Python?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Типы объектов в Python
Понимание типов объектов — фундамент для работы с данными и аналитике на Python. Вот полный обзор типов, которые использую в своей работе.
1. Простые типы (Primitive Types)
int — целые числа
# Обычные целые числа
age = 30
user_id = 12345
negative = -100
# Python поддерживает числа произвольной длины
big_number = 999999999999999999999999
print(type(big_number)) # <class 'int'>
print(big_number + 1) # работает без overflow
# Операции
print(15 // 2) # 7 (целочисленное деление)
print(15 % 2) # 1 (остаток от деления)
print(2 ** 10) # 1024 (возведение в степень)
float — вещественные числа
price = 99.99
average = 3.14159
scientific = 1.5e-3 # 0.0015
# Осторожно с precision!
print(0.1 + 0.2) # 0.30000000000000004 — не 0.3!
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2')) # Decimal('0.3') — точно
# Операции
print(10.5 / 3) # 3.5
print(abs(-5.5)) # 5.5 (модуль)
print(round(3.7)) # 4 (округление)
bool — логические значения
is_active = True
is_deleted = False
# Сравнения возвращают bool
result = 5 > 3 # True
result = 5 == 3 # False
# Логические операторы
print(True and False) # False
print(True or False) # True
print(not True) # False
# В Python, некоторые значения "falsy":
print(bool(0)) # False
print(bool('')) # False (пустая строка)
print(bool([])) # False (пустой список)
print(bool(None)) # False
str — строковые данные (для аналитика это часто встречается!)
name = "Aleksandr"
email = "aleksand@example.com"
# Строки immutable (неизменяемые)
s = "hello"
# s[0] = 'H' # ошибка: TypeError
# Методы для работы со строками
print(name.lower()) # "aleksandr"
print(name.upper()) # "ALEKSANDR"
print(email.split('@')) # ['aleksand', 'example.com']
print(' spaces '.strip()) # 'spaces' (удаляет пробелы)
print('hello'.replace('l', 'L')) # 'heLLo'
# Проверки
print('alex' in email) # True
print(email.startswith('aleksand')) # True
print(email.endswith('.com')) # True
# F-string для форматирования (рекомендуется)
user_id = 123
message = f"User {user_id} logged in at {datetime.now()}" # очень удобно!
None — отсутствие значения
optional_value = None
result = function_that_returns_nothing() # None
# Проверка
if result is None:
print("No value returned")
# В SQL это аналог NULL
# В numpy это преобразуется в NaN (для float) или остаётся None
2. Типы контейнеров (Collections)
list — изменяемый список
users = ['Alice', 'Bob', 'Charlie'] # список строк
prices = [9.99, 19.99, 29.99] # список чисел
mixed = [1, 'text', 3.14, True] # смешанные типы
# Доступ по индексу (начиная с 0)
first = users[0] # 'Alice'
last = users[-1] # 'Charlie' (отрицательный индекс = с конца)
# Срезы (slicing)
users[1:3] # ['Bob', 'Charlie']
users[:2] # ['Alice', 'Bob']
users[::2] # ['Alice', 'Charlie'] (каждый второй)
# Изменение
users.append('Diana') # добавить в конец
users.insert(1, 'Eve') # вставить в позицию
users.remove('Bob') # удалить элемент
users.pop(0) # удалить и вернуть элемент
users.sort() # сортировка на месте
# Полезные операции
print(len(users)) # 4 (количество элементов)
print('Alice' in users) # True (проверка наличия)
print(users.count('Alice')) # 1 (количество вхождений)
tuple — неизменяемый кортеж
coordinates = (10, 20) # координаты (x, y)
rgb_color = (255, 128, 0) # цвет RGB
immutable_list = (1, 2, 3) # неизменяемый список
# Распаковка (очень полезно!)
x, y = coordinates # x=10, y=20
r, g, b = rgb_color # r=255, g=128, b=0
# Нельзя изменять
# coordinates[0] = 15 # ошибка!
# Полезны как ключи в словарях
position_to_color = {
(0, 0): 'white',
(1, 1): 'black'
}
dict — словарь (key-value)
user = {
'id': 123,
'name': 'Alice',
'email': 'alice@example.com',
'is_active': True
}
# Доступ
user['name'] # 'Alice'
user.get('age', 25) # 25 (default если ключа нет)
# Модификация
user['age'] = 30 # добавить или изменить
del user['is_active'] # удалить ключ
user.update({'city': 'Moscow'}) # добавить несколько
# Итерация
for key, value in user.items():
print(f"{key}: {value}")
# Полезные методы
user.keys() # dict_keys(['id', 'name', ...])
user.values() # dict_values([123, 'Alice', ...])
user.items() # dict_items([('id', 123), ...])
set — множество (без дубликатов)
user_ids = {1, 2, 3, 3, 3} # дубликаты автоматически удаляются
print(user_ids) # {1, 2, 3}
# Операции множеств
group1 = {1, 2, 3}
group2 = {3, 4, 5}
print(group1 & group2) # {3} (пересечение)
print(group1 | group2) # {1,2,3,4,5} (объединение)
print(group1 - group2) # {1, 2} (разность)
print(group1 ^ group2) # {1,2,4,5} (симметричная разность)
# Проверки
print(1 in group1) # True
print(len(group1)) # 3
print(group1.issubset(group2)) # False
3. Типы для работы с данными (Data Types)
pandas.DataFrame — таблица данных
import pandas as pd
df = pd.DataFrame({
'user_id': [1, 2, 3],
'name': ['Alice', 'Bob', 'Charlie'],
'spent': [100.0, 250.0, 150.0]
})
# Это аналог таблицы в БД
print(df.shape) # (3, 3) — 3 строки, 3 колонки
print(df.dtypes) # типы каждой колонки
print(df['spent'].sum()) # 500.0 — сумма по колонке
# Фильтрация
high_spenders = df[df['spent'] > 150] # df.spent > 150
# Группировка
df.groupby('name')['spent'].sum() # сумма по группам
numpy.ndarray — многомерный массив
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
matrix = np.array([[1, 2], [3, 4]]) # 2D массив
print(arr.shape) # (5,)
print(matrix.shape) # (2, 2)
# Векторизованные операции (очень быстро!)
print(arr * 2) # [2, 4, 6, 8, 10]
print(arr + arr) # [2, 4, 6, 8, 10]
print(np.mean(arr)) # 3.0
4. Типы функций (Callables)
function — обычная функция
def calculate_ltv(revenue, customer_lifetime_days):
"""Расчёт lifetime value"""
return revenue / customer_lifetime_days * 365
ltv = calculate_ltv(1000, 100) # 3650
print(type(calculate_ltv)) # <class 'function'>
lambda — анонимная функция
# Вместо:
def add(a, b):
return a + b
# Пишем:
add = lambda a, b: a + b
# Часто используется в map/filter/sorted
numbers = [3, 1, 4, 1, 5]
print(sorted(numbers, key=lambda x: -x)) # [5, 4, 3, 1, 1] (по убыванию)
print(list(map(lambda x: x**2, numbers))) # [9, 1, 16, 1, 25]
5. Определённые типы (Custom Types)
class — пользовательский класс
class User:
def __init__(self, id, name, email):
self.id = id
self.name = name
self.email = email
def is_valid_email(self):
return '@' in self.email
user = User(1, 'Alice', 'alice@example.com')
print(type(user)) # <class '__main__.User'>
print(isinstance(user, User)) # True
print(user.is_valid_email()) # True
6. Специальные типы
datetime — дата и время
from datetime import datetime, date, timedelta
now = datetime.now() # текущее время
today = date.today() # текущая дата
specific = datetime(2024, 1, 15, 10, 30) # конкретная дата/время
# Операции
future = now + timedelta(days=7) # неделю спустя
diff = (future - now).days # количество дней
# Форматирование
print(now.strftime("%Y-%m-%d")) # '2024-01-15'
Decimal — точные вычисления (для финансов!)
from decimal import Decimal
price = Decimal('99.99')
quantity = Decimal('3')
total = price * quantity # Decimal('299.97') — точно!
# Важно для работы с деньгами!
tax_rate = Decimal('0.1')
tax = total * tax_rate # Decimal('29.997')
Таблица типов
Тип Изменяемый? Примеры Использование
─────────────────────────────────────────────────────────
int Нет 123, -45 Количество, ID
float Нет 3.14, 99.99 Цены, проценты
str Нет 'hello', "world" Текст, email
bool Нет True, False Условия
None Нет None Отсутствие значения
list Да [1, 2, 3] Коллекции элементов
tuple Нет (1, 2, 3) Неизменяемые пары
dict Да {'a': 1} Key-value данные
set Да {1, 2, 3} Уникальные значения
DataFrame Да pd.DataFrame() Табличные данные
ndarray Да np.array() Числовые вычисления
Проверка типов
# type() — точный тип
print(type(5)) # <class 'int'>
print(type(5.0)) # <class 'float'>
# isinstance() — проверка по иерархии (лучше!)
print(isinstance(5, int)) # True
print(isinstance(5, (int, float))) # True (один из типов)
# В Python, всё — объект!
print(type(type)) # <class 'type'>
Практический совет для аналитика
В аналитике обычно работаешь с:
- int — ID, счётчики
- float — цены, проценты, метрики
- str — имена, email, категории
- datetime — дата/время событий
- list/dict — структурирование данных
- pandas.DataFrame — основной инструмент для табличных данных
- Decimal — если работаешь с финансами
Не нужно знать все тонкости, но эти типы встречаются в 95% задач.