• Stars
    star
    258
  • Rank 158,189 (Top 4 %)
  • Language
  • Created almost 4 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Вопросы из собеседования на python junior

Вопросы для собеседования Python Junior

Еще 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 классов:

  1. Информационные 100 - 199
  2. Успешные 200 - 299
  3. Перенаправления 300 - 399
  4. Клиентские ошибки 400 - 499
  5. Серверные ошибки 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

к оглавлению ⬆️

90. Что если в функции не будет return, будет ли она что-то возвращать?

Функция может и не заканчиваться инструкцией 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

98. Компоненты django

image