Как бы охарактеризовал Python?
Python — это высокоуровневый, интерпретируемый (точнее, компилируемый в байт-код с последующим выполнением на PVM), объектно-ориентированный (ООП) и мультипарадигменный язык с динамической типизацией. Его главные особенности — простой, читаемый синтаксис и обширная стандартная библиотека.
Python компилируемый или интерпретируемый?
Python часто называют интерпретируемым, но это упрощение. Фактически, исходный код Python сначала компилируется в байт-код (файлы .pyc), а затем этот байт-код выполняется Виртуальной Машиной Python (PVM). Этот процесс похож на Java, что делает его скорее интерпретируемым языком, основанным на байт-коде.
Расскажи о парадигмах в языке Python?
Python — мультипарадигменный язык, поддерживающий:
Объектно-ориентированное программирование (ООП): Использование классов, наследования, полиморфизма.
Императивное программирование: Последовательность команд и изменение состояния.
Функциональное программирование: Использование чистых функций, лямбда-функций, избегание побочных эффектов.
Что такое динамическая типизация?
Тип переменной определяется во время выполнения программы и может меняться. Вам не нужно объявлять тип переменной при её создании.
Python
x = 10 # x имеет тип int
x = “текст” # теперь x имеет тип str
Какие есть типы данных в Python?
Основные типы включают: Числа (int, float, complex), Строки (str), Булевы (bool), Списки (list), Кортежи (tuple), Словари (dict), Множества (set).
Что может быть ключем в словаре?
Ключом в словаре может быть любой неизменяемый (хешируемый) объект.
Можно: int, float, str, tuple (если все его элементы неизменяемы), frozenset.
Нельзя: list, dict, set, так как они изменяемы.
Что относится к изменяемым типам данных и к неизменяемым?
Категория,Изменяемые (Mutable),Неизменяемые (Immutable)
Определение,Можно изменить после создания.,Нельзя изменить после создания.
Примеры,”list, dict, set, пользовательские классы.”,”int, float, str, tuple, frozenset, bytes.”
Как в Python устроен словарь?
Словарь реализован как хеш-таблица. Это позволяет хранить пары ключ-значение и обеспечивать поиск по ключу в среднем за константное время ($O(1)$). Порядок ключей сохраняется, начиная с Python 3.7 (формально с 3.6).
Что такое list comprehension?
Это краткий синтаксис для создания списков, основанный на итерируемых объектах. Он обеспечивает более читаемый и эффективный (быстрый) способ создания списков по сравнению с обычным циклом for.
Python
Обычный цикл:
squares = []
for i in range(10):
squares.append(i * i)
List comprehension:
squares = [i * i for i in range(10)]
В чем отличие списка от кортежа?
Список (list): Изменяемый тип данных. Используется для хранения однородных коллекций, которые могут меняться.
Кортеж (tuple): Неизменяемый тип данных. Используется для хранения разнородных, постоянных коллекций (например, координат точки). Кортежи немного быстрее и занимают меньше памяти.
Что знаешь про строки в Python?
Строки (str) — это неизменяемые последовательности символов Unicode. Поскольку они неизменяемы, любая операция, которая, казалось бы, “меняет” строку (например, s.upper()), на самом деле создает новую строку в памяти.
В чем разница между decimal и float?
float: Число с плавающей запятой, представленное в двоичной системе (IEEE 754). Оно приближенное и не подходит для точных финансовых расчетов.
decimal: Тип из модуля decimal, который хранит числа с десятичной точностью. Используется для точной арифметики (финансы, налоги).
Какие последовательности есть в Python?
Основные последовательности: list, tuple, str, range, bytes.
Как устроены переменные в Python?
Переменные — это не “ячейки” памяти, а имена (метки), которые ссылаются на объекты в памяти. Когда вы пишете a = 10, имя a просто привязывается к объекту 10.
Как в функцию передаются аргументы, по ссылке или по значению?
Python использует механизм, который часто называют “передача по ссылке на объект” (Call by Object Reference).
В функцию передается копия ссылки на объект.
Если объект изменяемый (list, dict), функция может изменить его содержимое.
Если объект неизменяемый (int, str), функция не может его изменить, а при попытке изменить просто создаст новую локальную ссылку.
В чем разница сравнение через is и “==” ?
is: Проверяет идентичность — указывают ли обе переменные на один и тот же объект в памяти (id(a) == id(b)).
==: Проверяет равенство — имеют ли два объекта одинаковое значение (вызывает магический метод __eq__).
Что такое поверхностная копия?
Поверхностная копия (.copy()) создает новый контейнер (список/словарь), но копирует в него только ссылки на исходные вложенные объекты. Если вложенный объект изменяемый, его изменение в копии отразится и на оригинале.
Что такое глубокая копия?
Глубокая копия (copy.deepcopy()) создает новый контейнер и рекурсивно копирует все вложенные объекты. Копия полностью независима от оригинала, даже если в ней есть изменяемые вложенные структуры.
За счет чего достигается константная величина ячейки памяти?
Это связано с неизменяемостью объектов. Неизменяемый объект (например, число или кортеж) не может быть изменен после создания; при “изменении” (например, a = a + 1) всегда создается новый объект. Это позволяет Python безопасно кэшировать и оптимизировать хранение этих объектов.
Что такое итерируемый объект?
Объект, который способен вернуть итератор (у него есть метод __iter__()). Это может быть список, кортеж, строка, словарь, а также range и генератор.
Что такое итератор?
Объект, который реализует протокол итератора:
Метод __iter__(): Возвращает сам себя.
Метод __next__(): Возвращает следующий элемент или вызывает StopIteration. Итератор позволяет получать элементы по одному.
Что такое генератор?
Специальный, упрощенный вид итератора. Генераторы реализуют стратегию ленивых вычислений (Lazy Evaluation): они генерируют значения по требованию и не хранят всю последовательность в памяти.
Что происходит в момент итерации по списку?
Цикл for вызывает iter(список), который возвращает объект-итератор.
На каждой итерации цикл вызывает next(итератор) (т.е. итератор.__next__()).
Итератор возвращает следующий элемент списка и помнит, где остановился.
Когда элементы заканчиваются, итератор вызывает исключение StopIteration, и цикл завершается.
В чем разница между итератором и генератором?
Итератор (Iterator) –> Генератор (Generator)
“Общая концепция, механизм обхода.” –> Специальный тип Итератора.
Обычно реализуется как класс с __iter__ и __next__. –> Реализуется как функция с yield или генераторное выражение.
Может хранить данные в памяти. –> “Экономит память, генерирует значения по требованию.”