Вопросы для собеседования Python Junior
- 1. Виды типизации
- 2. Типизация python
- 3. Что такое переменная
- 4. Числа в python
- 5. Строки в python
- 6. Списки и кортежи в python
- 7. Словарь в python
- 8. Какие типы данных относятся к структурам данных
- 9. Что такое Git
- 10. Как создать Git репозиторий локально
- 11. Что такое git push
- 12. Что делает git commit
- 13. Git merge и rebase
- 14. Что такое виртуальное окружение
- 15. Как установить виртуальное окружение
- 16. Виды форматирования строк
- 17. Cрезы или слайсы в python
- 18. Что такое итерация
- 19. Какие циклы есть в python
- 20. Чем отличается while от for
- 21. Каким образом реализовано ветвление в python
- 22. Как запросить у пользовптеля ввод
- 23. Преобразование типов
- 24. Что такое аннотация типов
- 25. Строка это последовательность или нет
- 26. Что такое PEP8
- 27. Что такое фунция range
- 28. Что делает enumerate
- 29. Какие методы списков
- 30. Что в python не является объектом
- 31. Название переменных
- 32. Что такое литералы
- 33. Можно ли число сделать строкой
- 34. Что делает метод split()
- 35. Что делает метод join()
- 36. Как импортировать модуль
- 37. Как импортировать все содержимое модуля
- 38. Сколько пар ключ значение может быть в словаре
- 39. Какой тип данных может быть значением в словаре
- 40. Как узнать id элемента
- 41. Как узнать версию python
- 42. Отличия второго python от 3
- 43. Как прервать выполнение цикла
- 44. Что означает continue
- 45. Что будет если сравнить 5 и 5.0
- 46. Что быстрее python или c++
- 47. Что такое байт код
- 48. Как избежать конфликтов при импорте файлов
- 49. Что означает %s %d
- 50. Что такое класс
- 51. Что такое наследование
- 52. Что такое инкапсуляция
- 53. Что такое полиморфизм
- 54. Сколько может быть родителей и наследников у класса
- 55. Что такое перегрузка операторов
- 56. Магические методы
- 57. Модификаторы доступа
- 58. Генераторы
- 59. Как пишутся комментарии в python
- 60. Как можно обратить (reverse) порядок элементов в списке
- 61. Если мы не поставим двоеточие в конце строки для цикла "do-while", он все равно сработает?
- 62. Как убрать из списка дубликат элемента
- 63. Расскажите про арифметические операторы //, %, и **
- 64. Как посчитать длину строки (string)
- 65. Расскажите про генераторы списков (list comprehension)
- 66. Что такое HTTP
- 67. Что такое json, xml
- 68. Чем отличается HTML и XML
- 69. Что такое CRUD
- 70. Какой паттерн программирования реализует Django
- 71. На каком этапе в приложении Django происходит запрос к базе данных
- 72. Какой результат будет Post.objects.all() и какого типа вернет
- 73. Что такое SQL
- 74. Каким запросом я могу достать все данные из таблицы
- 75, Что такое многие-ко-многим
- 76. Как реализуется М2М в SQL
- 77. Что такое JOIN и какой он может быть
- 78. Что такое View
- 79. Что такое миксины
- 80. Звёздный синтаксис
- 81. Два способа создания класса
- 82. Чем файл .pyc отличается от .py
- 83. Что делает python объектно-ориентированым
- 84. Как производится отладка программы на Python
- 85. Что такое GIL
- 86. Статусы ответов HTTP
- 87. Что такое Django Middleware
- 88.Как вставить объект чтобы он оказался под определенным индексом?
- 89.Что нужно сделать, чтобы функция возвращала значение? Использовать оператор return или yield
- 90. Что если в функции не будет return, будет ли она что-то возвращать?
- 91. Напишите в одну строку как можно получить самую позднюю по коду букву в строке
- 92. Как конвертировать список в строку?
- 93. Принципы SOLID
- 94. SQL JOIN
- 95. SQL оператор HAVING
- 96. Метаклассы в Python
- 97. Множественное наследование
- 98. Компоненты django
Еще 300+ вопросов для подготовки к собеседованию
150 вопросов для собеседования на вакансию Python. Часть 1 (без опыта работы)
150 вопросов для собеседования на вакансию Python. Часть 2 (с опытом работы)
50+ ответов на вопросовы с собеседований по Python
80 практических вопросов по Python для собеседования
Разные задачи на Python и решение к ним
1. Виды типизации
- Статическая - типизация, при которой переменная связывается с типом в момент объявления, и тип не может быть изменён позже, динамическая - типизация, при которой тип переменной задается в момент присваивания значения, а не в момент объявления, и т.о. может быть изменен позже.
пример статической типизации (С++):
int x = 5;
x = "abc"; // здесь C++ компилятор будет ругаться
или, что то же самое:
int x;
x = 5;
x = "abc"; // здесь C++ компилятор будет ругаться
пример динамической типизации (Python):
x = 5
x = "a" # здесь интерпретатор не ругается, так как типизация динамическая
- Строгая - отсутствие автоматических кастов в другой тип (неявных преборазований). Нестрогая - наличие таковых.
пример строгой типизации (Python):
a = [5, 6]
print(",".join(a)) # здесь интерпретатор ругается, так как join() ожидает список строк на входе
пример нестрогой типизации (Javascript):
let a = "hello";
let b = 100;
let c = a + b;
console.log(c); // "hello100"
- Явная - указываем типы везде руками. Неявная - компилятор/интерпретатор занимается этим сам.
пример явной типизации (C++):
int x = 5;
y = 6; // здесь компилятор будет ругаться
пример неявной типизации (Python):
a = 1
Важно: наиболее рационально и оптимально память используется в случае строгой статической типизации.
2. Типизация python
Динамическая, строгая, неявная.
3. Что такое переменная
Переменная Python — это идентификатор для ссылки на объект в памяти программы. На один и тот же объект в памяти могут указывать (ссылаться) несколько переменных. Как только на область памяти перестают ссылаться переменные - данная область очищается сборщиком мусора, и т.о. память освобождается за счет подсчитывания ссылок на объекты в памяти.
4. Числа в python
- int - целые числа.
- float - вещественные или действительные числа(числа с плавающей точкой).
- complex - комплексные числа.
- decimal - десятичные дроби.
5. Строки в python
Cтрока – это упорядоченная последовательность символов, которая предназначена для хранения информации в виде простого текста. В Python3 строка по умолчнанию имеет кодировку Unicode, что избавляет от проблем работы и отображения символов кирилицы и прочих экзотических кодировок. Строка это неизменяемый тип данных, т.е. если нужно добавить символов в существующую строку, придется создать новую строку, с новым адресом в памяти:
a = "hello"
id(a) # 2044344987401
a = "hello world"
id(a) # 2044334957804
6. Списки (lists) и кортежи (tuples) в python
Списки Python схожи с массивами в других языках. Кортеж похож на список, но вы создаете его с круглыми скобками, вместо квадратных. Вы также можете использовать встроенный инструмент для создания кортежей. Разница между списками и кортежами в том, что кортеж неизменяем, в то время как список изменяем. Т.е. в список можно добавить элемент и его адрес в памяти не изменится, а если нужно добавить элемент в кортеж, то нужно создать новый кортеж, и у него уже будет новый адрес в памяти:
# список
a = [1,2]
id(a) # 2044364987904
a.append(3)
id(a) # 2044364987904
# кортеж
a = (1,2)
id(a) # 2044370285184
a = (1,2,3)
id(a) # 2044369999872
Важно: кортеж занимает меньше места в памяти чем список, и поэтому всегда, когда массив объектов заведомо неизменяем, рекомендуется использовать кортежи, вместо списков.
7. Cловарь в python
Словари в Python - коллекции произвольных объектов с доступом по ключу. Начиная с Python3.6 словарь dict() упорядочен, т.е. при переборе имеющегося словаря, элементы возвращаются в том порядке, в котором они были добавлены в словарь при его наполнении. До Python3.6 приходилось использовать объект OrderedDict(), чтобы иметь упорядоченную коллекцию, с доступам к элементам по ключам. Словарь это изменяемый тип данных.
8. Какие типы данных относятся к структурам данных
- Массивы
- Стеки
- Кучи
- Очереди
- Связанные списки
- Графы
- Деревья
- Хэш таблицы
- Map
9. Что такое Git
Распределённая система управления версиями. Разработан Линусом Торвальдсом, для удобной разработки ядра Linux.
10. Как создать гит репозиторий локально
git init
11. Что такое git push
Отправка всех неотправленных локальных коммитов на удалённый сервер репозитория.
12. Что делает git commit
Фиксирует изменения локальных файлов в таймлайне репозитория. Другими словами делает "моментальный снимок" репозитория в данный момент времени, который и является версией.
13. Git merge и rebase
git merge
- принимает содержимое ветки источника и объединяет их с целевой веткой. В этом процессе изменяется только целевая ветка. История исходных веток остается неизменной.
git rebase
— еще один способ перенести изменения из одной ветки в другую. Rebase сжимает все изменения в один «патч». Затем он интегрирует патч в целевую ветку.
В отличие от слияния, перемещение перезаписывает историю, потому что она передает завершенную работу из одной ветки в другую. В процессе устраняется нежелательная история.
14. Что такое виртуальное окружение
Виртуальное окружение (virtualenv) — это инструмент для создания отдельного пространства для проекта с его зависимостями и библиотеками в директории проекта.
15. Как установить виртуальное окружение
pip install virtualenv
python -m venv namevenv
16. Виды форматирования строк
- Форматирование f-строками.
- Форматирование методом str.format().
- Форматирование оператором '%'.
17. Cрезы или слайсы в python
item[START:STOP:STEP]
Функция Python slice() возвращает нарезанный объект из набора индексов ввода, указанного пользователем в соответствии с переданными ему аргументами. Объект должен быть iterable.
18. Что такое итерация
Переход к следующему объекту в коллекции, например список, кортеж и т.д. Сам по себе объект коллекции должен быть iterable.
19. Какие циклы есть в python
while
и for
.
20. Чем отличается while от for
For используется только тогда, когда необходимо совершить перебор элементов заранее известное число раз. Цикл while также используется для повторения частей кода, но вместо зацикливания на n количество раз, он выполняет работу до тех пор, пока не достигнет определенного условия. Выйти из цикла в любой момент можно используя ключевое слово break
, а перейти на следующую итерацию цикла можно используя слово continue
.
21. Каким образом реализовано ветвление в python
if-elif-else
22. Как запросить у пользователя ввод
Для получения информации с клавиатуры в Python есть функция input()
.
23. Преобразование типов
- Преобразование типов - это преобразование объекта из одного типа данных в другой тип данных.
- Неявное преобразование типов автоматически выполняется интерпретатором Python.
- Python позволяет избежать потери данных в неявном преобразовании типов.
- Явное преобразование типов также называется приведением типов, типы данных объекта преобразуются с использованием предопределенной функции.
- При приведении типов может произойти потеря данных, поскольку мы приводим объект к определенному типу данных.
24. Что такое аннотация типов
В простейшем случае аннотация содержит непосредственно ожидаемый тип. Аннотации для переменных пишут через двоеточие после идентификатора. После этого может идти инициализация значения. Например price: int = 5
Параметры функции аннотируются так же как переменные, а возвращаемое значение указывается после стрелки ->
и до завершающего двоеточия. Например
def indent_right(s: str, width: int) -> str:
.
Важно: аннотация типов не есть то же самое, что статическая типизация.
25. Строка это последовательность или нет
Да.
26. Что такое PEP
PEP - Python Enhancement Proposals - база всех предложений как улучшить Python и что изменить. Например PEP8 - это общепринятое руководство по написанию кода на Python.
27. Что такое фунция range
Функция range()
возвращает объект с интерфейсом итератора, выдающий элементы из диапазона, определяемого аргументами функции range(старт, стоп, шаг), при этом не храня все элементы в памяти.
28. Что делает enumerate
Если начальное значение счётчика enumerate()
не передаётся — оно, по умолчанию, устанавливается в 0. Функция создаёт объект, генерирующий кортежи, состоящие из индекса элемента и самого этого элемента.
29. Какие методы списков
- list.append(x) Добавляет элемент в конец списка
- list.extend(L) Расширяет список list, добавляя в конец все элементы списка L
- list.insert(i, x) Вставляет на i-ый элемент значение x
- list.remove(x) Удаляет первый элемент в списке, имеющий значение x. ValueError, если такого элемента не существует
- list.pop([i]) Удаляет i-ый элемент и возвращает его. Если индекс не указан, удаляется последний элемент
- list.index(x, [start [, end]]) Возвращает положение первого элемента со значением x (при этом поиск ведется от start до end)
- list.count(x) Возвращает количество элементов со значением x
- list.sort([key=функция]) Сортирует список на основе функции
- list.reverse() Разворачивает список
- list.copy() Поверхностная копия списка
- list.clear() Очищает список
30. Что в python не является объектом
В python всё является объектом, кроме ключевых слов: in, is, if, while, и т.д.
31. Название переменных
Имя переменной может состоять только из цифр, букв и знаков подчеркивания. Имя переменной может начинаться только с буквы или с нижнего подчеркивания. Никаких чисел в начале имени переменной быть не должно. Имя переменной не может содержать ключевые слова (зарезервированные) языка Python. Принято разделять слова нижним подчеркиванием (snake case).
32. Что такое литералы
Литерал в Python – это простейший способ создания объектов. Если в тексте программы встречается литерал, то для этого литерала создается отдельный объект некоторого типа, соответствующего содержанию литерала:
"Hello" # строковый литерал
1123 # целочисленный литерал
[1,2] # списковый литерал
33. Можно ли число сделать строкой
Чтобы конвертировать число в строку, используйте встроенную функцию str()
.
34. Что делает метод split()
Разбивает строку на части, используя специальный разделитель, и возвращает эти части в виде списка
str.split([разделитель [, maxsplit]])
.
35. Что делает метод join()
Метод "str".join(["Hello", "world"])
возвращает строку, которая является конкатенацией (объединением) всех элементов строк итерируемого объекта iterable. В итоговой строке элементы объединяются между собой при помощи строки-разделителя str. Элементы итерируемого объекта должны быть строками (ну или как минимум иметь реализованный магический метод __str__()
).
36. Как импортировать модуль
Используя ключевое слово “import”, например import random
Использование псевдонимов — as. Некоторые модули имеют длинное и неудобное название. Для удобства и сокращения количества кода программист может заменить его на своё.
Для импорта конкретных объектов используют конструкцию from ... import ...
.
37. Как импортировать все содержимое модуля
from module_name import *
import module_name
38. Сколько пар ключ значение может быть в словаре
Ограничено объемом оперативной памяти.
39. Какой тип данных может быть значением в словаре
Ключом может являться в принципе любой неизменяемый тип данных.
40. Как узнать id элемента
Функция id()
возвращает уникальный идентификатор для указанного объекта. По сути этот идентификатор однозначно опредедяет адрес объекта в памяти интерпретатора.
41. Как узнать версию python
В консоли прописать python --version
42. Отличия второго python от 3
Огромное количество отличий. Самые значимые/ключевые:
- строки в Python3 по умолчанию в кодировке Unicode
- в Python3 теперь range вместо xrange
- в словарях в Python3 теперь нет некоторых методов
- в Python3 появилась возможность распаковывать переменных через оператор
*
-....
Подробнее здесь.
43. Как прервать выполнение цикла
Оператор break
досрочно прерывает цикл.
44. Что означает continue
Оператор continue
начинает следующий проход цикла, минуя оставшееся тело цикла (for или while).
45. Что будет если сравнить 5 и 5.0
True
46. Что быстрее python или c++
C++
47. Что такое байт код
Python - интерпретируемый язык программирования. Он не конвертирует свой код в машинный, который понимает железо (в отличие от С и С++). Процесс такой вот конвертации называется компилляцией. Вместо этого, Python-интерпретатор, а точнее говоря его стандартная реализация CPython, переводит код программы в байт-код, который запускается на виртуальной машине Python (PVM). Есть реализация интерпретатора Python, которая работает через JIT (just in time) компилляцию - Pypy.
48. Как избежать конфликтов при импорте файлов
- Называть свои модули так, чтобы имена не совпадали с именами сторонних/стандартных библиотек, которые также используются в коде
- Ипользовать
as
при импорте, чтобы заменять названия импортируемых модулей
49. Что означает %s %d
%s
Строка %d
Десятичное число.
50. Что такое класс
Класс — тип, описывающий устройство объектов. Другими словами, это описание сущности, у которой есть определенный набор свойств и методов.
51. Что такое наследование
Возможность одному классу выступать в качестве наследника для другого, перенимая тем самым его свойства и методы. Ключевой момент наследования - это то, что класс наследник может не только использовать методы и свойства родительского класса, но и переопределить их, а также добавить новые свойства и методы.
52. Что такое инкапсуляция
Ограничение доступа к составляющим объект компонентам (методам и свойствам). Инкапсуляция делает некоторые из компонент доступными только внутри класса.
53. Что такое полиморфизм
Разное поведение одного и того же метода в разных классах.
54. Сколько может быть родителей и наследников у класса
Неограниченное количество.
55. Что такое перегрузка операторов
Один из способов реализации полиморфизма, заключающийся в возможности одновременного существования в одной области видимости нескольких различных вариантов применения оператора, имеющих одно и то же имя, но различающихся типами параметров, к которым они применяются. Перегрузка операторов не поддерживается в Python.
Пример из C++, где поддерживается перегрузка операторов:
float getArea(float a, float b) // функция, вычисляющая площадь прямоугольника с длиной a и высотой b
{
return a * b;
}
float getArea(float r) // функция, вычисляющая площадь круга с радиусом r
{
return pi * r * r;
}
float S1 = getArea(5.0, 6.0); // 30
float S3 = getArea(5.0); // 78.5
56. Магические методы
Это специальные методы в python, обрамленные двумя нижними подчеркиваниями
- Инициализация объекта:
__init__
- Строковые представления:
__repr__
,__str__
- Итерация:
__iter__
,__next__
и другие
57. Модификаторы доступа
Есть три типа модификаторов доступов в Python ООП:
- публичный
public
- приватный
__private
- защищенный
_protected
Важно: в Python нету жесткой инкапсуляции, т.е. даже к приватному методу можно получить доступ снаружи класса. Инкапсуляция в Python это больше договорянность между разработчиками, чем жесткое сокрытие, как например в C++ или Java.
58. Генераторы
Это функция, которая будучи вызванной в функции next() возвращает следующий объект согласно алгоритму ее работы. Вместо ключевого слова return в генераторе используется yield. Главное отличие yield от return это то, что yield, после возврата объекта, сохраняет стек генератора, так что при следующем вызове функции next() от генератора, исполнение кода генератора продолжится с того момента, где yield вернул объект в прошлый раз.
59. Как пишутся комментарии в python
С помощью символа #
. Так же есть такое понятие как docstring задать его можно с помощью тройных кавычек.
60. Как можно обратить (reverse) порядок элементов в списке
С помощью среза [::-1]
или встроенной функции reversed()
.
61. Если мы не поставим двоеточие в конце строки для цикла "do-while", он все равно сработает?
В python такой цикл не реализован. Это вопрос из тех, которые с подвохом, когда упоминают элементы других языков.
62. Как убрать из списка дубликат элемента
Для этого можно конвертировать список во множество set()
.
63. Расскажите про арифметические операторы //, %, и **
- Оператор // выполняет целочисленное деление и возвращает целую часть числа, полученного в результате операции:
7 // 2 = 3
- Оператор ** возводит в степень:
2**10 = 1024
- Оператор % возвращает результат деления по модулю, то есть остаток после деления:
13 % 7 = 6
64. Как посчитать длину строки (string)
Для этого вызываем функцию len()
.
65. Расскажите про генераторы списков (list comprehension)
Генераторы позволяют создавать списки с помощью одной строки кода
>>> [i for i in range(1, 11, 2)]
[1, 3, 5, 7, 9]
66. Что такое HTTP
HyperText Transfer Protocol — «протокол передачи гипертекста». По умолчанию использует для работы TCP порт 80.
67. Что такое json, xml
JSON - текстовый формат обмена данными, основанный на JavaScript - JavaScript Object Notation. XML - в переводе с англ eXtensible Markup Language — расширяемый язык разметки. Используется для хранения и передачи данных.
68. Чем отличается HTML и XML
Разница: HTML - это язык разметки, который используется для разработки веб-страниц. Его основная цель - отображение данных с акцентом на их внешний вид. XML - это язык разметки, основной целью которого является транспортировка и хранение данных.
69. Что такое CRUD
Терамин обозначающий четыре базовые функции: создание (create), чтение (read), редактирование (update) и удаление (delete). Как правило термин "CRUD" употребляется в контексте работы с хранилищем данных.
70. Какой паттерн программирования реализует Django
Фреймворк Django реализует архитектурный паттерн Model-View-Template.
В DRF Request-Process-Response.
71. На каком этапе в приложении Django происходит запрос к базе данных
QuerySet может быть создан, отфильтрован, ограничен и использован фактически без выполнения запросов к базе данных. База данных не будет затронута, пока вы не спровоцируете выполнение QuerySet.
72. Какой результат будет Post.objects.all() и какого типа вернет
Объект класса QuerySet.
73. Что такое SQL
SQL или Structured Query Language (язык структурированных запросов) — язык программирования, предназначенный для управления данными в СУБД.
74. Каким запросом я могу достать все данные из таблицы
SELECT * FROM nametable
75. Что такое многие-ко-многим
Связь многие ко многим описывает ситуацию, когда объект первой модели может одновременно ассоциироваться с несколькими объектами второй модели. И наоборот, один объект второй модели может также одновременно быть ассоциирован с несколькими объектами первой модели. Например, один студент может посещать несколько курсов, а один курс могут посещать несколько студентов.
76. Как реализуется М2М в SQL
Связь многие ко многим подразумевает, что записи в одной таблице могут иметь множество ссылок на другую таблицу и наоборот. Когда есть такой тип связи нужно создавать дополнительную таблицу, которая сведет связь многие ко многим до связи один ко многим.
77. Что такое JOIN и какой он может быть
- INNER JOIN (CROSS JOIN) - внутреннее (перекрёстное) объединение.
- LEFT JOIN - левостороннее внешнее объединение.
- RIGHT JOIN - правостороннее внешнее объединение.
- FULL OUTER JOIN (FULL JOIN) - полное объединение
78. Что такое View
Views отвечают за обработку и передачу данных и могут реализовывать одну или несколько функций. В Django используются два вида представлений:
- Представления-функции (view functions),
- Представления-классы (class based views).
79. Что такое миксины
Mixin представляет собой набор свойств и методов, которые могут быть использованы в различных классах, которые не приходят из базового класса.
80. Звёздный синтаксис
-
- и ** для передачи аргументов в функцию;
-
- и ** для сбора переданных в функцию аргументов;
- ** для принятия только именованных аргументов;
-
- при распаковке кортежей;
-
- для распаковки итерируемых объектов в список/кортеж;
- ** для распаковки словарей в другие словари.
81. Два способа создания класса
Класс type() с тремя аргументами вернет объект нового типа. Это по сути динамическая форма инструкции class, ее еще называют метакласс.
type(class_name, super_classes, attributes_dict)
82. Чем файл .pyc отличается от .py
.pyc
содержат скомпилированный байт-код исходных файлов Python
83. Что делает python объектно-ориентированым
Он следует парадигме объектно-ориентированного программирования, которая построена вокруг классов (classes) и их экземпляров (instances). Это позволяет реализовать следующие функции:
- сокрытие внутренней структуры данных
- абстракция
- наследование
- полиморфизм (способность выбирать правильный метод в зависимости от типа данных)
- ограничение доступа к данным.
84. Как производится отладка программы на Python
Использовать IDE с поддержкой дебага либо использовать модуль pdb
import pdb; pdb.set_trace()
85. Что такое GIL
Глобальная блокировка интерпретатора CPython. Это механизм, который не позволяет нескольким потокам выполнить один и тот же байткод. Другими словами, благодаря GIL, в каждый момент времени в контексте одного процесса Python исполняется только один поток (Thread), все остальные ждут своей очереди на исполнение. Именно поэтому многопоточность не ускоряет обработку данных в разных потоках, так как по факту все обрабатывается последовательно.
86. Статусы ответов HTTP
Коды сгруппированы в 5 классов:
- Информационные 100 - 199
- Успешные 200 - 299
- Перенаправления 300 - 399
- Клиентские ошибки 400 - 499
- Серверные ошибки 500 – 599
Подробнее https://developer.mozilla.org/ru/docs/Web/HTTP/Status
87. Что такое Django Middleware
Django Middleware (middleware в переводе "промежуточный слой") – это промежуточный слой между запросом (request) и ответом (response). В Django по умолчанию содержатся наиболее важные и нужные middleware. Например, AuthenticationMiddleware, ассоциирует пользователей с запросами с помощью сессий. Можно написать свой middleware: например хорошим вариантом может быть middleware для отлавливания и логгирования всех тех исключений которые не были отловлены на более низких уровнях.
88. Как вставить объект чтобы он оказался под определенным индексом?
Сначала создадим список:
>>> a=[1, 2, 4]
Затем используем метод insert()
. В нем первым аргументом будет индекс, под которым вставляется объект, а вторым — значение объекта:
>>> a.insert(2,3)
>>> a
[1, 2, 3, 4]
89. Что нужно сделать, чтобы функция возвращала значение?
Использовать оператор return
или yield
return
, будет ли она что-то возвращать?
90. Что если в функции не будет Функция может и не заканчиваться инструкцией return
, при этом функция вернет значение None
91. Напишите в одну строку как можно получить самую позднюю по коду букву в строке
Строковый метод max()
будет сравнивать значение ASCII каждого символа в строке и возвращает максимальный алфавитный символ.
>>> str = "Wow! This is string!"
>>> max(str)
'w'
92. Как конвертировать список в строку?
Мы могли бы использовать метод str.join()
для преобразования списка, который имеет элементы типа данных str
в строку.
Например,
>>> a = ["a", "b", "c"]
>>> "".join(a)
'abc'
Метод join объединяет любое количество строк, строка, метод которой вызывается, вставляется между каждой заданной строкой. Как показано в примере, между элементами списка вставляется строка "", пустая строка.
Метод join
требует в качестве заданных параметров тип данных str
. Поэтому, если вы попытаетесь присоединиться к списку типов int, вы получите TypeError
.
Перед соединением тип int
должен быть преобразован в тип str
.
>>> a = [1,2,3]
>>> "".join([str(_) for _ in a])
"123"
или при помощи функции map
:
>>> a = [1,2,3]
>>> "".join(map(str, a))
'123'
93. Принципы SOLID
S – Single Responsibility (Принцип единственной ответственности)
Каждый класс должен отвечать только за одну операцию.
O — Open-Closed (Принцип открытости-закрытости)
Классы должны быть открыты для расширения, но закрыты для модификации.
L — Liskov Substitution (Принцип подстановки Барбары Лисков)
Если П является подтипом Т, то любые объекты типа Т, присутствующие в программе, могут заменяться объектами типа П без негативных последствий для функциональности программы.
I — Interface Segregation (Принцип разделения интерфейсов)
Не следует ставить клиент в зависимость от методов, которые он не использует.
D — Dependency Inversion (Принцип инверсии зависимостей)
Модули верхнего уровня не должны зависеть от модулей нижнего уровня. И те, и другие должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
94. SQL JOIN
INNER JOIN Возвращает записи которые имеют соответствие в обеих таблицах
OUTER LEFT JOIN Возвращает все записи из левой таблицы + записи которые имеют соответствие из правой
OUTER RIGHT JOIN Возвращает все записи из правой таблицы + записи которые имеют соответствие из левой
OUTER FULL JOIN Возвращает все записи из обеих таблиц
95. SQL оператор HAVING
SQL оператор HAVING используется в сочетании с оператором GROUP BY, чтобы ограничить группы возвращаемых строк только теми, чьё условие TRUE.
96. Метаклассы в Python
Метакласс это «штука», которая создаёт классы.
Мы создаём класс для того, чтобы создавать объекты, так? А классы являются объектами. Метакласс это то, что создаёт эти самые объекты. Они являются классами классов, можно представить это себе следующим образом:
MyClass = MetaClass()
MyObject = MyClass()
Мы уже видели, что type позволяет делать что-то в таком духе:
MyClass = type('MyClass', (), {})
Это потому что функция type на самом деле является метаклассом. type это метакласс, который Питон внутренне использует для создания всех классов.
97. Множественное наследование
class Class1: # Базовый класс для класса Class2
def f_func1(self):
print "Метод f_func1() класса Class1"
class Class2(Class1): # Класс Class2 наследует класс Class1
def f_func2(self):
print "Метод f_func2() класса Class2"
class Class3(Class1): # Класс Class3 наследует класс Class1
def f_func1(self):
print "Метод f_func1() класса Class3"
def f_func2(self):
print "Метод f_func2() класса Class3"
def f_func3(self):
print "Метод f_func3() класса Class3"
def f_func4(self):
print "Метод f_func4() класса Class3"
class Class4(Class2, Class3): # Множественное наследование
def f_func4(self):
print "Метод f_func4() класса Class4"
c1 = Class4() # Создаем экземпляр класса Class4
c1.f_func1() # Выведет: Метод f_func1() класса Class1
c1.f_func2() # Выведет: Метод f_func2() класса Class2
c1.f_func3() # Выведет: Метод f_func3() класса Class3
c1.f_func4() # Выведет: Метод f_func4() класса Class4