Встроенные типы данных в Python 3: руководство программиста

Раздел: Типы данных -> Встроенные типы данных

Встроенные типы данных в Python 3

Python 3 предлагает богатый набор встроенных типов данных, которые можно разделить на несколько категорий: числовые, последовательности, отображения, множества, двоичные типы и специальный тип None. Каждый тип обладает своими свойствами, методами и правилами изменяемости. Понимание этих типов является основой для эффективного программирования.

Как создать целое число произвольной точности?

Основной тип для целых чисел - int. Python автоматически поддерживает целые числа любой длины, ограниченной только памятью.

a = 10
b = -5
c = 0xFF  # 255 в шестнадцатеричной системе
d = 0b1010  # 10 в двоичной

Type class python (класс type в python)

Для создания чисел используются литералы или функция int():

x = int('42')   # из строки
y = int(3.14)   # отбрасывание дробной части

Python string types (строковые типы в python)

Типичные проблемы и ошибки:

  • Приведение строки с нечисловыми символами вызовет ValueError.
  • Деление / возвращает float, даже если числа целые. Для целочисленного деления используется //.

Как работать с числами с плавающей точкой?

Тип float представляет вещественные числа двойной точности (64 бита).

pi = 3.14159
inf = float('inf')
nan = float('nan')

Python type str (тип str в python)

Осторожно: float не подходит для точных денежных расчётов из‑за ошибок округления.

Типичные проблемы и ошибки:

  • Сравнение 0.1 + 0.2 == 0.3 даёт False из‑за двоичного представления.
  • Бесконечность и NaN ведут себя неочевидно при арифметике.

Решение:

  • Использовать round() или модуль decimal для финансовых вычислений.
  • Проверять близость чисел через math.isclose().

Как использовать комплексные числа?

Тип complex представлен в виде real + imag*j.

c1 = 3 + 4j
c2 = complex(1, -2)
print(c1.real, c1.imag)  # 3.0 4.0

Python object type (тип объекта в python)

Поддерживаются все арифметические операции, модуль cmath для тригонометрии.

Как работать с логическими значениями?

Тип bool имеет два значения: True и False. Он является подклассом int, True == 1, False == 0.

flag = True
if flag:
    print('Включено')
# Логические операции: and, or, not

Python 3 types (типы данных в python 3)

Любое значение может быть преобразовано в bool через bool(value). Пустые последовательности, нули, None - False.

Как создавать и изменять строки?

Тип str - неизменяемая последовательность символов Unicode. Строки можно создавать в одинарных, двойных или тройных кавычках.

s1 = 'Привет'
s2 = "Мир"
s3 = '''Многострочный
текст'''

Python float types (типы с плавающей запятой в python)

Основные методы: upper(), lower(), split(), join(), replace(), срезы.

text = 'Python 3'
print(text[:6])  # 'Python'
print(' - '.join(['a', 'b', 'c']))  # 'a - b - c'

Python int types (целочисленные типы в python)

Типичные ошибки:

  • Попытка изменить символ по индексу приведёт к TypeError.
  • Неверное экранирование обратной косой черты.

Как использовать списки?

Тип list - изменяемая последовательность, элементы могут быть разных типов.

nums = [1, 2, 3]
nums.append(4)
nums.extend([5, 6])
print(nums[1:3])  # [2, 3]

Списки поддерживают вложенность, сортировку, генераторы списков.

squares = [x**2 for x in range(5)]  # [0, 1, 4, 9, 16]

Типичные ошибки:

  • Использование изменяемого объекта как значение по умолчанию в функции.
  • Путаница между copy() и поверхностным копированием.

Когда стоит применять кортежи?

Тип tuple - неизменяемая последовательность. Часто используется для возврата нескольких значений из функции или как ключ словаря.

t = (1, 2, 3)
single = (42,)  # обязательная запятая
# Распаковка
a, b, c = t

Кортежи занимают меньше памяти и быстрее списков.

Как сгенерировать последовательность чисел без списка?

Тип range представляет арифметическую прогрессию. Экономит память.

r = range(0, 10, 2)  # 0,2,4,6,8
for i in r:
    print(i)
print(list(r))  # [0, 2, 4, 6, 8]

Поддерживает индексацию, длину, проверку вхождения.

Как организовать данные в формате ключ-значение?

Тип dict - отображение, ключи должны быть неизменяемыми (числа, строки, кортежи).

d = {'name': 'Alice', 'age': 25}
d['city'] = 'Moscow'
print(d.get('name'))
# Итерация по ключам/значениям

Словари сохраняют порядок вставки с Python 3.7+.

Типичные ошибки:

  • Попытка использовать список как ключ приведёт к TypeError.
  • Изменение словаря во время итерации.

Как работать с уникальными элементами?

Тип set - неупорядоченная коллекция уникальных элементов. frozenset - неизменяемая версия.

s = {1, 2, 3}
s.add(4)
s.remove(2)
# Операции: объединение, пересечение, разность

frozenset можно использовать как ключ словаря.

Типичные ошибки:

  • Создание пустого множества через {} даёт словарь, нужно set().

Как работать с двоичными данными?

Типы bytes (неизменяемый) и bytearray (изменяемый) представляют последовательности байтов.

b = b'hello'
ba = bytearray(b'world')
ba[0] = 87  # 'W'

Используются при работе с сетевыми протоколами, файлами в двоичном режиме.

Тип memoryview позволяет получить доступ к буферу памяти без копирования.

mv = memoryview(b'abc')
print(mv[0])  # 97

Что такое None и когда его применять?

Тип NoneType имеет единственное значение None, обозначающее отсутствие значения.

result = None
if result is None:
    print('Нет результата')

Часто используется как возвращаемое значение функций без return или как значение по умолчанию.

Как проверить тип данных и выполнить приведение?

Функция type() возвращает тип объекта, isinstance(obj, type) проверяет принадлежность классу или кортежу классов.

x = 5
print(type(x))  # <class 'int'>
print(isinstance(x, (int, float)))  # True

Явное приведение: int(), str(), list(), set() и т.д.

Проблемы:

  • Некорректное преобразование строки в число может вызвать исключение.
  • Приведение float к int теряет дробную часть.

Расширенные примеры работы с типами данных

Здесь представлены нестандартные ситуации и углублённые приёмы.

Как обрабатывать большие целые числа и точные дроби?

Пример
import decimal, fractions
# Десятичные числа с заданной точностью
decimal.getcontext().prec = 50
pi = decimal.Decimal('3.14159265358979323846264338327950288419716939937510')
print(pi * 2)
# Дроби
frac = fractions.Fraction(1, 3)
print(float(frac))  # 0.3333333333333333
6.2831853071795864769252867665590057683943387987502
0.3333333333333333

Как использовать memoryview для эффективного копирования?

Пример
import array
arr = array.array('H', [1, 2, 3, 4])  # unsigned short
mv = memoryview(arr)
mv2 = mv.cast('B')  # переинтерпретация как байты
print(mv2.tolist())  # [1,0,2,0,3,0,4,0] (little-endian)
[1, 0, 2, 0, 3, 0, 4, 0]

Как создать словарь с объединением и обновлением?

Пример
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}
# Оператор | для объединения (Python 3.9+)
merged = d1 | d2
print(merged)  # {'a': 1, 'b': 3, 'c': 4}
# Обновление на месте
d1.update(d2)
print(d1)      # {'a': 1, 'b': 3, 'c': 4}
{'a': 1, 'b': 3, 'c': 4}
{'a': 1, 'b': 3, 'c': 4}

Как использовать frozenset как ключ словаря?

Пример
key = frozenset([1, 2, 3])
d = {key: 'value'}
print(d[frozenset([3, 2, 1])])  # Порядок не важен, содержимое совпадает
value

Как безопасно преобразовать строку в число с обработкой ошибок?

Пример
def safe_int(s):
    try:
        return int(s)
    except ValueError:
        return None

print(safe_int('123'))   # 123
print(safe_int('abc'))   # None
print(safe_int('0x10'))  # ValueError для int(), если base не указан
# Для разных систем счисления используйте int(s, base)
print(int('0x10', 16))   # 16
123
None
16

Как работать с неизменяемыми множествами и проверкой подмножеств?

Пример
a = frozenset(range(5))
b = frozenset([2, 3])
print(b.issubset(a))  # True
print(a.issuperset(b))# True
# Разность множеств
print(a - b)          # frozenset({0, 1, 4})
True
True
frozenset({0, 1, 4})

Как преобразовать строку байтов в строку Unicode и обратно?

Пример
data = 'Привет'.encode('utf-8')  # bytes
print(data)                     # b'\xd0\x9f...'
text = data.decode('utf-8')
print(text)                     # Привет
# Ошибка при неверной кодировке
# data.decode('ascii') -> UnicodeDecodeError
b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'
Привет

Как использовать slice объекты для расширенных срезов?

Пример
s = 'PythonProgramming'
sl = slice(0, 6, 2)  # start, stop, step
print(s[sl])          # Pto
# Создание среза динамически
def custom_slice(seq, start, stop, step):
    return seq[slice(start, stop, step)]
print(custom_slice(s, 6, None, 3))  # Pgm
Pto
Pgm

Как получить тип объекта и его имя?

Пример
obj = [1, 2, 3]
print(type(obj).__name__)  # 'list'
print(isinstance(obj, (list, tuple)))  # True
# Проверка на точное совпадение типа без учёта наследования
if type(obj) is list:
    print('Точно list')
list
True
Точно list

Типы данных в Python 3 - comments

En
Python 3 types (python)