Перейти к содержимому

4. Типы данных

Иллюстрация к уроку

Python имеет богатый набор встроенных типов. Основные:

ТипПримерОписание
int42, -7Целые числа
float3.14, -0.5Числа с плавающей точкой
str"hello"Строки
boolTrue, FalseБулевы
NoneNoneОтсутствие значения
list[1, 2, 3]Изменяемый список
tuple(1, 2, 3)Неизменяемый список
dict{"key": "val"}Словарь (объект)
set{1, 2, 3}Множество (уникальные значения)
# int — целые числа любой размерности
x = 42
big = 1_000_000 # подчёркивание для читаемости
negative = -17
binary = 0b1010 # двоичное = 10
hex_num = 0xFF # шестнадцатеричное = 255
# float — числа с плавающей точкой
pi = 3.14159
scientific = 1.5e10 # 15000000000.0
small = 1.5e-3 # 0.0015
# Преобразование
int(3.9) # 3 (не округляет, обрезает!)
float(5) # 5.0
round(3.567, 2) # 3.57
# Арифметика
from math import sqrt, ceil, floor
sqrt(16) # 4.0
ceil(3.2) # 4
floor(3.9) # 3
abs(-5) # 5
# Создание
s1 = "Hello"
s2 = 'World'
s3 = """Многострочная
строка"""
# Индексирование (как в JS)
name = "Python"
print(name[0]) # "P"
print(name[-1]) # "n" (последний)
print(name[1:4]) # "yth" (срез)
print(name[::-1]) # "nohtyP" (реверс!)
# Методы
text = "hello world"
text.capitalize() # "Hello world"
text.title() # "Hello World"
text.upper() # "HELLO WORLD"
text.count("l") # 3
text.find("world") # 6 (индекс или -1)
text.startswith("hello") # True
text.endswith("world") # True
text.zfill(15) # " hello world" (дополнить нулями)
# Строки неизменяемы!
# text[0] = "H" — ОШИБКА!
new_text = "H" + text[1:] # так правильно
# join — эффективное объединение
words = ["Python", "is", "awesome"]
" ".join(words) # "Python is awesome"
", ".join(words) # "Python, is, awesome"

Аналог массива в JS, но мощнее:

# Создание
fruits = ["apple", "banana", "cherry"]
mixed = [1, "hello", True, None, [1, 2]]
empty = []
# Доступ
print(fruits[0]) # "apple"
print(fruits[-1]) # "cherry"
print(fruits[1:]) # ["banana", "cherry"]
# Изменение
fruits.append("mango") # добавить в конец
fruits.insert(1, "peach") # вставить на позицию
fruits.extend(["kiwi", "pear"]) # добавить список
fruits.remove("banana") # удалить по значению
popped = fruits.pop() # удалить и вернуть последний
popped2 = fruits.pop(0) # удалить и вернуть первый
fruits.sort() # сортировка на месте
fruits.reverse() # реверс на месте
# Проверка
"apple" in fruits # True
len(fruits) # длина
# List Comprehension — суперсила Python!
numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers] # [1, 4, 9, 16, 25]
evens = [x for x in numbers if x % 2 == 0] # [2, 4]
doubled_evens = [x*2 for x in numbers if x % 2 == 0] # [4, 8]

Как список, но неизменяемый:

point = (10, 20)
rgb = (255, 128, 0)
single = (42,) # одноэлементный кортеж (запятая обязательна!)
# Распаковка
x, y = point
r, g, b = rgb
# Использование как ключей словаря (списки нельзя!)
locations = {
(55.75, 37.61): "Москва",
(59.93, 30.31): "Санкт-Петербург"
}

Аналог объекта в JS:

# Создание
user = {
"name": "Яша",
"age": 2,
"role": "admin",
"is_active": True
}
# Доступ
print(user["name"]) # "Яша"
print(user.get("email")) # None (безопасно)
print(user.get("email", "")) # "" (дефолтное значение)
# Изменение
user["email"] = "[email protected]" # добавить/изменить
del user["age"] # удалить
# Методы
user.keys() # dict_keys(['name', 'role', ...])
user.values() # dict_values(['Яша', 'admin', ...])
user.items() # dict_items([('name', 'Яша'), ...])
# Проверка
"name" in user # True
"email" in user # False
# Слияние (Python 3.9+)
defaults = {"role": "user", "is_active": True}
overrides = {"role": "admin"}
merged = defaults | overrides # {'role': 'admin', 'is_active': True}
# Dict Comprehension
squares = {x: x**2 for x in range(1, 6)}
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

Коллекция уникальных значений:

nums = {1, 2, 3, 3, 3} # {1, 2, 3} — дубликаты удаляются
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
# Операции с множествами
a | b # объединение: {1, 2, 3, 4, 5, 6}
a & b # пересечение: {3, 4}
a - b # разность: {1, 2}
a ^ b # симметричная разность: {1, 2, 5, 6}
# Практический пример
users_a = {"alice", "bob", "charlie"}
users_b = {"bob", "dave", "charlie"}
common = users_a & users_b # {"bob", "charlie"}
only_a = users_a - users_b # {"alice"}
# Проверка типа
isinstance(42, int) # True
isinstance(42, (int, float)) # True (один из)
type(42) == int # True (точная проверка)
# Конвертация
int("42") # 42
int(3.9) # 3
float("3.14") # 3.14
str(42) # "42"
bool(0) # False (0, "", None, [], {} — все False!)
bool(1) # True
list({1, 2, 3}) # [1, 2, 3]
set([1, 1, 2]) # {1, 2}
tuple([1, 2]) # (1, 2)
# Что является "falsy" (ложным)?
# False, None, 0, 0.0, "", [], {}, set()
# Задание 1: работа со списком
tasks = ["купить молоко", "сделать PR", "написать тесты"]
# Добавь задачу, удали первую, выведи все в нумерованном списке
# Задание 2: работа со словарём
product = {"name": "Python Book", "price": 29.99, "in_stock": True}
# Добавь поле "category", вычисли цену с налогом 20%
# Задание 3: list comprehension
numbers = range(1, 21)
# Создай список квадратов нечётных чисел от 1 до 20
# Задание 4: множества
# Найди новые подписчики и отписавшихся

В следующем уроке — условия и ветвления!