Типы переменных и операций языка Python
Основные типы данных и операторы языка Python
Типы данных в Python делятся на изменяемые и неизменяемые. Основные встроенные типы: int (целые числа), float (вещественные), str (строки), bool (логические), list (списки), tuple (кортежи), dict (словари), set (множества), NoneType (тип None). Каждый тип определяет набор допустимых операций и методов.
# Примеры создания разных типов
a = 42 # int
b = 3.14 # float
c = "Привет" # str
d = True # bool
e = [1, 2, 3] # list
f = (4, 5, 6) # tuple
g = {"ключ": "значение"} # dict
h = {7, 8, 9} # set
i = None # NoneTypeоператоры и типы данных python (операторы и типы данных в python)
Операторы выполняют действия над данными. Основные группы:
- Арифметические:
+,-,*,/,//,%,**. - Сравнения:
==,!=,<,>,<=,>=. - Логические:
and,or,not. - Присваивания:
=,+=,-=,*=и др. - Побитовые:
&,|,^,~,<<,>>. - Членства:
in,not in. - Тождественности:
is,is not.
# Примеры операторов
print(10 // 3) # 3
print(10 % 3) # 1
print(2 ** 3) # 8
print(7 > 5 and 3 < 4) # True
print("a" in "abc") # True
print([1, 2] is [1, 2]) # False (разные объекты)Как выполнить целочисленное деление и получить остаток?
Для целочисленного деления (с округлением вниз) используется оператор //, для остатка от деления - %. Они работают и с отрицательными числами, при этом результат // всегда округляется в меньшую сторону (по математическому правилу).
print(7 // 2) # 3
print(7 % 2) # 1
print(-7 // 2) # -4 (округление вниз)
print(-7 % 2) # 1 (остаток положительный)Типичные ошибки: путаница между / (вещественное деление) и //. Для вещественных чисел % тоже работает, но из-за погрешностей лучше применять math.fmod.
Как проверить вхождение элемента в строку, список или словарь?
Оператор in проверяет, содержится ли элемент в последовательности. Для словаря in проверяет наличие ключа, а не значения.
print("ло" in "молоко") # True
print(3 in [1, 2, 3]) # True
print("age" in {"name": "Аня", "age": 25}) # True
print(25 in {"name": "Аня", "age": 25}) # False (проверка ключа)Типичные ошибки: попытка проверить наличие значения в словаре через in - следует использовать in dict.values().
Как преобразовать тип данных?
Для явного преобразования применяются встроенные функции: int(), float(), str(), list(), tuple(), set(), dict(). При преобразовании строки в число важно, чтобы строка содержала корректное числовое представление.
print(int("42")) # 42
print(float("3.14")) # 3.14
print(str(100)) # "100"
print(list("abc")) # ['a', 'b', 'c']
print(tuple([1,2,3])) # (1,2,3)Типичные ошибки: ValueError при попытке преобразовать нечисловую строку (напр., "12a"). Для безопасного преобразования можно использовать try/except.
Как объединить строки эффективно?
Самый простой способ - оператор +, однако при большом количестве строк каждая операция создаёт новую строку, что затратно. Метод str.join() работает быстрее, так как выделяет память один раз.
# Медленный способ
parts = ["a", "b", "c"]
s = ""
for p in parts:
s += p # каждое + копирует строку
# Быстрый способ
s_fast = "".join(parts)Типичные ошибки: забыть, что join() вызывается от разделителя, а аргументом передаётся список.
Как работает оператор is для сравнения объектов?
is сравнивает идентичность объектов (их адреса в памяти), а == сравнивает значения. Для неизменяемых типов (например, маленькие целые числа) Python иногда кэширует объекты, поэтому is может вернуть True, но полагаться на это не стоит.
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True
print(a is b) # False
x = 256
y = 256
print(x is y) # True (из-за интернирования)Типичные ошибки: использование is для сравнения строк или чисел, когда ожидается сравнение значений. Правильно использовать is только для проверки на None (напр., if var is None).
Дополнительные примеры работы с операторами и типами данных
Побитовые операции и флаги
Побитовые операторы (&, |, ^, ~, <<, >>) обычно применяются для работы с флагами или в низкоуровневом коде. Пример упаковки прав доступа:
# Флаги: READ = 0b001; WRITE = 0b010; EXECUTE = 0b100
READ = 1
WRITE = 2
EXECUTE = 4
permissions = READ | WRITE # 0b011 = 3
print(permissions) # 3
# Проверка наличия флага
if permissions & READ:
print("Разрешено чтение")
# Установка дополнительного флага
permissions |= EXECUTE
print(permissions) # 73 Разрешено чтение 7
Оператор моржа := (walrus operator)
Позволяет присвоить значение переменной внутри выражения. Удобно в циклах и условных конструкциях.
# Пример: чтение строк до пустой строки
lines = []
while (line := input("Введите строку: ")) != "":
lines.append(line)
print(lines)(пример ввода: 'a', 'b', '') ['a', 'b']
Распаковка кортежей и оператор *
Python поддерживает распаковку последовательностей. Оператор * позволяет собрать оставшиеся элементы.
first, *middle, last = [1, 2, 3, 4, 5]
print(first) # 1
print(middle) # [2, 3, 4]
print(last) # 5
# Распаковка вложенных структур
a, (b, c) = (10, (20, 30))
print(a, b, c) # 10 20 301 [2, 3, 4] 5 10 20 30
Словарные включения (dict comprehension)
Краткий способ создания словарей. Например, переворачивание словаря (меняем ключи и значения).
original = {"a": 1, "b": 2, "c": 3}
reversed_dict = {value: key for key, value in original.items()}
print(reversed_dict) # {1: 'a', 2: 'b', 3: 'c'}{1: 'a', 2: 'b', 3: 'c'}Типизированные контейнеры и isinstance()
Функция isinstance() проверяет принадлежность объекта указанному классу или кортежу классов.
data = [1, "text", 3.14, []]
for item in data:
if isinstance(item, int):
print(f"{item} - целое")
elif isinstance(item, str):
print(f"{item} - строка")
else:
print(f"{item} - другой тип")1 - целое text - строка 3.14 - другой тип [] - другой тип
Оператор not in и совместное использование с or
Проверка отсутствия элемента и комбинирование условий.
if "x" not in "example" or "y" in "yes":
print("Условие выполнено")Условие выполнено