Share This
Связаться со мной
Крути в низ
Categories
//🐍 15 самых часто задаваемых вопросов на собеседовании про Python

🐍 15 самых часто задаваемых вопросов на собеседовании про Python

Разбор 15 самых часто задаваемых вопросов для начинающих, а также для продвинутых Python-разработчиков.

15 samyh chasto zadavaemyh voprosov na sobesedovanii pro python 0c13add - 🐍 15 самых часто задаваемых вопросов на собеседовании про Python

1. Что такое PEP 8?

PEP — расшифровывается как Python Enhancement Proposal. Это официальный проектный документ, предоставляющий информацию сообществу Python и описывающий новую функцию для Python или его процессов. PEP 8 важен, так как документирует руководящие принципы стиля для кода Python. То есть, для написания кода ввели определенные правила, которым рекомендуется следовать.

2. Scope в Python – какие бывают?

Объект в Python функционирует в пределах области видимости. Область видимости – это блок кода, в котором объект в Python остается актуальным. Пространства имен уникально идентифицируют все объекты внутри программы. Однако эти пространства имен также имеют определенную для них область видимости, где можно использовать их объекты без префикса. Ниже приведено несколько примеров областей видимости, создаваемых во время выполнения кода в Python:

  • Local scope – относится к локальным объектам, доступным в текущей функции.
  • Global scope – относится к объектам, доступным во время выполнения кода с момента их создания.
  • Module-level scope — относится к глобальным объектам текущего модуля, доступным в программе.
  • Outermost – относится ко всем встроенным именам, вызываемым в программе. Объекты в этой области видимости ищутся в последнюю очередь, чтобы найти имя, на которое ссылаются.

🐍 Самоучитель для начинающих: как освоить Python с нуля за 30 минут?

3. List и Tuples – зачем нужны и какие отличия?

List и Tuples — это типы данных, которые хранят коллекцию объектов в Python. Объекты, хранящиеся в обеих последовательностях, имеют разные типы данных. List представлены квадратными скобками ['sara', 6, 0.19], а tuples — круглыми скобками ('max', 5, 0.97). Ключевое различие между ними заключается в том, что в то время как list является изменяемым, tuples, напротив, является неизменяемым объектом. Это означает, что данные в list могут быть изменены, добавлены или нарезаны на ходу, а в tuples остаются неизменными и не могут быть изменены никаким образом.

Пример использования:

Пример использования list и tuples в Python

         tuple_example = ('max', 6, 5, 0.97) list_example = ['max', 6, 5, 0.97] print(tuple_example [0])     # вывод => 'max' print(list_example [0])     # вывод => 'max' tuple_example [0] = 'andrey'    # изменение tuple => тут вызвется ошибка list_example [0] = 'andrey'    # изменение list => list modified print(tuple_example [0])     # вывод => 'max' print(list_example [0])     # вывод => 'andrey'     

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста» Интересно, перейти к каналу

4. Что такое pass в Python?

Pass — представляет собой нулевую операцию в Python. Обычно она используется для заполнения пустых блоков кода, который может выполняться во время исполнения. В примере, приведенном ниже, без оператора pass можно столкнуться с ошибкой как <<IndentationError>> во время выполнения кода.

Пример использования pass в Python

         def myEmptyFunc():    #функция ничего не делает    pass myEmptyFunc() # если же убрать pass будет вот такая ошибка # File "<stdin>", line 3 # IndentationError: expected an indented block     

⛱️ Как правильно ничего не делать в Python: инструкция pass

5. Что такое модули и пакеты в Python?

Модули — это файлы Python с расширением <<.py>>, в которых определены и реализованы наборы функций, классов или переменных. Они могут быть импортированы и инициализированы один раз с помощью оператора import. Если требуется частичная функциональность, необходимые классы или функции импортируются с помощью оператора from foo import bar.

Пакеты позволяют иерархически структурировать пространство имен модуля с помощью точечной нотации. Как модули помогают избежать столкновений между именами глобальных переменных, так и пакеты помогают избежать столкновений между именами модулей. Создать пакет просто, поскольку он использует присущую системе файловую структуру. Пакет создается как папка в файловой системе и помещается необходимый модуль (файл python). Импорт модуля или его содержимого из пакета требует, чтобы имя пакета был префиксом к имени модуля, соединенным точкой. Подробнее на здесь.

пример импортирования пакета и модуля в Python

         from myclass import MyClass from foo.bar.yourclass import YourClass     

Пакеты и модули – это два механизма, позволяющие осуществлять модульное программирование в Python. Модульное программирование имеет несколько преимуществ:

  • Простота: Работа над одним модулем позволяет сосредоточиться на относительно небольшой части проблемы. Это делает разработку более простой и менее подверженной ошибкам.
  • Удобство обслуживания: Модули предназначены для обеспечения логических границ между различными проблемными областями. Если они написаны таким образом, что уменьшают взаимозависимость, то меньше вероятность того, что изменения в модуле могут повлиять на другие части программы.
  • Возможность повторного использования: Функции, определенные в модуле, могут быть легко использованы повторно в других частях приложения.
  • Разметка: Модули обычно определяют отдельное пространство имен, что помогает избежать путаницы между идентификаторами из других частей программы.

6. Какие отличия между массивом и списком в Python?

Массивы содержат только элементы одинаковых типов данных, то есть тип данных массива должен быть однородным. Массивы потребляют меньше памяти.

Списки содержат элементы разных типов данных, то есть тип данных списков может быть неоднородным. Их недостатком является потребление большого объема памяти.

Пример использования массива и списка:

Пример использования array и list в Python

         import array array_example = array.array('i', [1, 2, 3]) for i in array_example:     print(i, end=' ')    #вывод: 1 2 3 array_example = array.array('i', [1, 2, 'string'])    #вывод: TypeError: an integer is required (got type str) list_example = [1, 2, 'string'] for i in list_example:    print(i, end=' ')    #вывод: 1 2 string     

7. Отрицательное значение индексов в Python

Отрицательное значение индексов в Python является популярным использованием slicing (вырезок) коллекций и массивов. То есть индексацией можно пользоваться для создания вырезок из коллекций.

Синтаксис – [start : stop : step]:

  • start – с какого индекса нужно начинать (может быть отрицательным)
  • stop – на каком месте остановится
  • step – количество шагов для перехода. По умолчанию 1.

Пример использования slicing в Python

         numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(numbers[1::2])  print(numbers[-1::2]) #начнет с последнего значения. print(numbers[3:-2:2]) #начнет с индекса 3 и дойдет до 2 элемента,  											 #то есть дойдет до последнего элемента и начнет сначало чтобы 											 #дойти до индекса 2     

8. Как управляется память в Python?

В Python оператор присваивания (=) не копирует объекты. Вместо этого он создает связь между существующим объектом и именем целевой переменной. Чтобы создать копии объекта в Python, необходимо использовать модуль copy. Более того, существует два способа создания копий для данного объекта с помощью модуля copy.

  1. Shallow Copy – это побитовая копия объекта. Созданный скопированный объект имеет точную копию значений в исходном объекте. Если одно из значений является ссылкой на другие объекты, копируются только адреса ссылок на них.
  2. Deep Copy – рекурсивно копирует все значения от исходного объекта к целевому, т. е. дублирует даже объекты, на которые ссылается исходный объект.

Пример использования сopy и deepcopy:

Пример использования copy и deepcopy в Python

         from copy import copy, deepcopy list_1 = [1, 2, [3, 5], 4]  ## shallow copy list_2 = copy(list_1)  list_2[3] = 7 list_2[2].append(6) list_2    # вывод => [1, 2, [3, 5, 6], 7] list_1    # вывод => [1, 2, [3, 5, 6], 4]  ## deep copy list_3 = deepcopy(list_1) list_3[3] = 8 list_3[2].append(7) list_3    # вывод => [1, 2, [3, 5, 6, 7], 8] list_1    # вывод => [1, 2, [3, 5, 6], 4]     

10. Как делается перегрузка операторов в Python?

Перегрузка оператора – это возможность переопределять различные операторы в классах, то есть менять операции, которые они выполняют, в зависимости от контекста. В Python есть операторы такие как: сложение, вычитание и т. д., которые можно перегрузить для класса.

Пример использования:

Пример использования перегрузки оператора в Python

         class Vector:  	def __init__(self, x, y): 		self.x = x 		self.y = y 	 	def __add__(self, vector):  		return Vector(self.x + vector.x, self.y + vector.y) 	 	def __sub__(self, vector):     return Vector(self.x - vector.x, self.y - vector.y)  v1 = Vector(1,2) v2 = Vector(3,4)  print(v1+v2) #вывод => Vector(4, 6) print(v1-v2) #вывод => Vector(-2, -2)     

В примере показано использование перезагрузки операторов. Данные методы не вызываются напрямую, но вызываются встроенными функциями или операторами.

11. Как передаются аргументы – значения или ссылка?

В Python аргументы передаются по ссылке, т. е. передается ссылка на реальный объект. Но есть два вида передачи объекта в аргументах.

По значению: Передается копия реального объекта. Изменение значения копии объекта не приведет к изменению значения исходного объекта.

По ссылке: Передается ссылка на реальный объект. Изменение значения нового объекта изменит значение исходного объекта.

Пример использования:

Пример использования передачи аргументов в Python

         def appendNumber(arr):    arr.append(4) arr = [1, 2, 3] print(arr)  #вывод: => [1, 2, 3] appendNumber(arr) print(arr)  #вывод: => [1, 2, 3, 4]     

12. Что такое *args и *kwargs?

*args – это специальный синтаксис, используемый в определении функции для передачи аргументов переменной длины.

* – означает переменную длину, а args – это название принятое в PEP 8, но можно использовать любое другое название

Пример использования:

Пример использования *args в Python

         def multiply(a, b, *argv):    mul = a * b    for num in argv:        mul *= num    return mul print(multiply(1, 2, 3, 4, 5)) #вывод: 120     

**kwargs – это специальный синтаксис, используемый в определении функции для передачи аргументов переменной длины с ключевыми словами. На самом деле, это dictionary который имеет key и value.

Пример использования:

Пример использования **kwargs в Python

         def tellArguments(**kwargs):    for key, value in kwargs.items():        print(key + ": " + value) tellArguments(arg1 = "argument 1", arg2 = "argument 2", arg3 = "argument 3") #вывод: # arg1: argument 1 # arg2: argument 2 # arg3: argument 3     

13. Пустой класс и как он используется?

Пустой класс – класс, который не имеет реализацию каких-то методов или же свойств. При пустом классе используется ключевое слово pass для того, чтобы не выдавало ошибок.

Пример использования:

Пример использования пустого класса в Python

         class EmptyClassDemo:    pass obj=EmptyClassDemo() obj.name="Proglib" print("Name of class = ",obj.name)     

14. Используются ли в python спецификаторы доступа?

Python не использует спецификаторы доступа, такие как private, public, protected и т. д. Однако, в нем есть концепция имитации поведения переменных путем использования одинарного (protected) или двойного подчеркивания (private) в качестве префикса к именам переменных. По умолчанию переменные без подчеркивания являются общедоступными.

Пример использования:

Пример использования спецификаторы доступов в Python

         class User:         # protected - доступен только в классе или же те дочерним классам     _emp_name = None     _age = None          # private - доступен только в самом классе     __branch = None          # конструктор     def __init__(self, emp_name, age, branch):           self._emp_name = emp_name          self._age = age          self.__branch = branch          # публичный метод - общедоступный метод     def display():         print(self._emp_name +" "+self._age+" "+self.__branch)     

15. Написать алгоритм (несколько примеров)

  • Напишите программу для объединения двух разных словарей. При объединении, если вы найдете одинаковые ключи, вы можете добавить значения этих ключей. Выведите новый словарь

Реализация алгоритма на Python

         from collections import Counter d1 = {'ключ1': 50, 'ключ2': 100, 'ключ3':200} d2 = {'ключ1': 200, 'ключ2': 100, 'ключ4':300} new_dict = Counter(d1) + Counter(d2) print(new_dict)     
  • Напишите программу для проверки и возврата пар заданного массива A, суммарное значение которых равно заданному значению N.

Реализация алгоритма на Python

         def print_pairs(arr, N):    # hash set    hash_set = set()         for i in range(0, len(arr)):        val = N-arr[i]        if (val in hash_set):            print("Пара: " + str(arr[i]) + ", " + str(val))        hash_set.add(arr[i])  arr = [1, 2, 40, 3, 9, 4] N = 3 print_pairs(arr, N)     

***

Материалы по теме

  • 🐍 15 вопросов по Python: как джуниору пройти собеседование
  • 🐍 Что такое yield в Python? Самый популярный вопрос на Стаковерфлоу по Питону
  • 🐍 Скрытые сокровища Python
  • 🐍 30 уловок на языке Python, которые сделают вас лучшим программистом

  • 2 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close