Python Flashcards
Типы данных (какие бывают)
Изменяемые
список (list), множество (set), словарь (dict), [байтовый массив (byte arrays)]
Не изменяемы
string, int, bool, float, кортеж (tuple)
Итератор. Что это. Какие методы содержит
Итератор (iterator) - это объект, который возвращает свои элементы по одному за раз.
С точки зрения Python - это любой объект, у которого есть метод __next__. Этот метод возвращает следующий элемент, если он есть, или возвращает исключение StopIteration, когда элементы закончились.
В Python у каждого итератора присутствует метод __iter__ - то есть, любой итератор является итерируемым объектом. Этот метод просто возвращает сам итератор.
А так же __init__ .
Сложность алгоритмов
Какие бывают O ()
Расположить по порядку (возрастание)
О(1) О(log n) О(n) О(n * log n) О(n ^ 2) О(2 ^ n) О(n!)
Чем отличаются операторы == и is
== - сравнивает по значению
is - сравнивает по адресам в памяти
Как в python передаются аргументы в функции (изменяемые, неизменяемые)
Изменяемые по ссылкам, неизменяемые по значению
Что такое args и kwargs. Чем они представлены
args - это такой аргумент, который принимает в себя неограниченное количество позиционных аргументов (tuple)(кортеж)
kwargs - это такой аргумент, который принимает в себя неограниченное количество аргументов которые передаются с помощью ключевых слов (dict)(словарь)
args и kwargs - это необязательные названия, просто так принято
Что такое аннотации типов, зачем они нужны, когда они выполняются
Аннотация типов - это подсказки типов к аргументу функции, переменной итд
Когда используются - не исполняются в runtime. (python на них не смотрит)
Нужны, чтобы программисту было понятно какой тип данных ожидаем.
В IDE подсвечивается, если не тот тип данных
Что такое lambda функция и кейсы ее применения
lambda функция - это анонимная функция (без имени и объявления)
применяется например в map/reduce/filter. Где функция принимает другую как аргумент
Что такое тернарный оператор
Это if, который записывается в одну строку
result = ‘Чётное’ if x % 2 == 0 else ‘Нечётное’
Что такое глубокая и поверхностная копия? Зачем нужны? Как их сделать?
deepcopy - копирует полностью весь объект (from copy import deepcopy). Рекурсивно перебивает все ссылки на новые
copy - не копирует внутренние объекты
Что такое self?
self - это ссылка на текущий\созданный объект
Как в pyhon реализуются методы объекта, класса и статические методы? Чем отличаются
class A: def a(self): это метод объекта. Он доступен только в объекте
@classmethod def b(cls): это метод класса. он описывает класс и доступен в нём.
@staticmethod def c(): статический метод не принадлежит ни классу ни объекту. Но он связан по смыслу
Что такое декоратор? И как реализуется?
Декоратор - это паттерн проектирования. По канону он реализуется через класс. С помощью этого класса меняется поведение какого-либо кода, не изменяя сам код
Что такое абстрактный класс? Зачем они? Как реализуются?
Абстрактный класс - это класс у которого нельзя создать объект.
Нужны, так как в python нет интерфейсов для контрактов между классами (в виде абстр. методав)
from abc import ABS, abstractmethod
class A(ABS): @abstractmethod def bstrmeth(): pass
Что такое метаклассы? Зачем используются? Как реализуются? Какие методы имеют?
Метаклассы - это шаблоны для классов. На их основе строятся классы. Используются для перехвата создания класса и изменения его.
__new__, __init__, __prepare__, __call__
Чаще всего переопределяется __new__
from abs import ABCMeta
class OneMeta(ABCMeta) - для абстрактного метакласа class Meta(type) - просто метакласс
Что такое ООП?
ООП - это такая парадигма объектно-ориентированного программирования, когда мы код выстраиваем в виде объектов, которые являются объектами классов, а классы выстраивают иерархию наследования.
Наследование - один класс строится на основе другого класса. Дочерний класс получает весь функционал родительского.
Инкапсуляция - понимается двояко: фундаментально, мы в класс должны поместить(инкапсулировать) все методы, которые связаны общей идеей.
Второй тип: сокрытие данных. В классе преимущественно должны быть приватные атрибуты, ничего не выходит наружу.
Полиморфизм - 1. В функциях нам не важны типы данных приходящие из вне, главное чтобы внутри функции этот аргумент имел все действия, которые мы с ним производим.
2. Используем одни и те же имена(переопределяем) модифицируя их функционал.
+ Абстракция - в коде используются только те характеристики объекта, которые нам важны в данном коде.
Что такое миксины?
Реализуют небольшой функционал, повторяющийся в многих классах.
Реализует принцип DRY
Что такое dimonf problem? Что такое MRO?
Python поддерживает множественное наследование
MRO - Method Resolution Ordering -жесткий порядок зависимостей наследования. Это список, который содержится внутри класса Class.mro()
Что такое генератор? Как написать на Python генератор?
Генератор - это функция у которой вместо return yield. Она может принимать и отдавать контроль управления.
Что такое итератор? Что такое итерируемый объект?
Итератор - это такая структура данных, которая отдаёт что-либо по одному.
Итерируемый объект - это такой объект по которому можно пройтись по одному.
__init__
__iter__ - ссылка на итератор
__next__ - следующий объект
Что такое генератор? Как написать на Python генератор?
Генератор - это функция у которой вместо return - yield. Она может принимать и отдавать контроль управления.
Работает от yield к yield.
В конце исключение StopItterator
Любой генератор -> итератором
Что такое корутина?
Корутина - это генератор, с возможностью посылать в него данные с помощью метода send
Что такое async await?
Что такое async await?
Библиотека для Асинхронного кода: asyncio, threading, multiprocessing
threading - делим потоки в рамках одного процесса
multiprocessing - запускаем программу в разных процессах не зависимых
asyncio - принесла event loop - содержит событийный цикл, который проходится по таскам (корутинам)
Что такое Event Loop?
В asyncio event loop (цикл обработки событий) управляет планированием и передачей ожидаемых объектов. event loop требуется для использования awaitables. Каждая программа asyncio имеет как минимум один event loop. Можно иметь несколько event loop, но в Python 3.7 настоятельно рекомендуется использовать только один event loop.
Какие бывают виды тестов?
Unittest - модульные - пишут сами программисты. Тестируют классы функции - мелкий кусок.
Функциональные - писать могут так же программисты. Тестируют пакеты, связки компонентов,
Интеграционные - проверяет может ли проект работать в данном окружении. Доступы к API итд
Какие есть инструменты для тестирования?
Встроен unittest. Не pep8 frienly
pytest - широкий функционал, фикстуры, тестовые кейсы - это функции
Что такое mock? Зачем нужен?
Используется, для избежания вызовов, запросов. Mock подменяет объект на тестовый, который возвращает ожидаемый результат
pytest-mock
Что такое ORM?
Объектно-реляционное отображение. Есть БД, есть код, а ORM связывает это всё.