80 практических вопросов по Python для собеседования

Многие начинающие ученые в области данных начали свое путешествие по науке о данных с языка программирования Python. Почему Python? Потому что он легок в освоении и сегодня его используют многие компании. Более того, этот язык универсальный и предназначен не только для специалистов по обработке данных, но также используется и в целях разработчиков.

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

1. Что такое Python?

Python — это язык программирования с объектами, модулями, потоками, исключениями и автоматическим управлением памятью. Python предназначен для высокой читабельности. Он часто использует английские ключевые слова, в то время как другие языки используют пунктуацию, и у него меньше синтаксических конструкций, чем у других языков.

2. Каковы преимущества использования Python?

Они заключаются в том, что он прост, удобен, портативен, расширяем, имеет встроенную структуру данных и открытый исходный код.

3. Как Python интерпретируется как язык?

Интерпретируемый язык — это любой язык программирования, который не находится в машинном коде до выполнения. Таким образом, Python им и является.

4. Как интерпретируется Python?

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

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

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

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

PEP расшифровывается как Python Enhancement Proposal (Предложение по улучшению Python). Это набор правил, которые определяют, как форматировать код для максимальной читабельности.

7. Как писать комментарии на Python?

Комментарии начинаются с символа #.

#Пример комментария

8. Как прокомментировать несколько строк в Python?

Многострочные комментарии появляются на нескольких строках. Все строки, подлежащие комментарию, должны иметь префикс #. Можно использовать метод быстрого доступа, чтобы прокомментировать несколько строк. Все, что нужно сделать, — это удерживать клавишу ctrl и щелкнуть левой кнопкой мыши в том месте, где вы хотите включить символ #, и ввести # только один раз. Это закомментирует все строки, на которых щелкнули курсором.

9. Что такое строки документации в Python?

Docstrings не являются комментариями, это строки документации. Они заключены в тройные кавычки. Такие строки не привязаны ни к одной переменной, и поэтому иногда служат в качестве комментариев.

""" 
Это строка документации
Она используется для документирования
"""

10. Обязательны ли отступы в Python?

Отступ в Python является обязательным и является частью его синтаксиса.

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

11. Что такое функция в Python?

Функция — это блок кода, который выполняется только при его вызове. Для определения функции Python используется ключевое слово def. Если функция возвращает что-то, ей нужно ключевое слово return.

def example(a):
   return a*2

12. Что такое локальные и глобальные переменные в Python?

Глобальная переменная:

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

Локальная переменная:

Любая переменная, объявленная внутри функции, называется локальной. Она присутствует в локальном пространстве, а не в глобальном.

#Пример глобальной переменной
a = 1

#Пример локальной переменной
def sample():
   #Локальная переменная
   a = 1

13. Что такое лямбда-функция?

Анонимная или неназванная функция называется лямбда-функцией. Она может иметь любое количество параметров, но только один оператор. Она часто используется как одноразовая функция, а не многоразовая.

#Пример лямбда-функции

test = lambda x,y: x*y
print(test(2,4))

14. Почему лямбда-формы в Python не имеют операторов?

Потому что они используются для создания нового объекта функции, а затем возвращают его во время выполнения.

15. Какие типы данных поддерживаются в Python?

Python имеет пять стандартных типов данных −

• число (целочисленные и с плавающей запятой);

• строка;

• список;

• кортеж;

• словарь.

16. Что такое индексы?

Чтобы получить доступ к элементу из упорядоченных последовательностей, мы используем его индекс, который является номером позиции этого конкретного элемента. Индекс обычно начинается с 0, то есть первый элемент имеет индекс 0, второй — 1 и так далее.

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

list_ex = [1,2, 'Test']
print(list_ex[0])

17. Что такое отрицательные индексы и почему они используются?

Когда мы используем индекс для доступа к элементам из конца списка, это называется обратным индексированием. При нем индексация элементов начинается с последнего элемента с индексом -1. Второй последний элемент имеет индекс “-2” и так далее. Они называются отрицательными.

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

list_ex = [1,2, 'Test']
print(list_ex[-1])

18. Что такое словарь в Python?

Словарь Python — это один из поддерживаемых типов данных. Это неупорядоченная коллекция элементов. Элементы в словарях хранятся в виде пар ключ-значение. Словари индексируются по ключам. Тип данных представлен в виде {}.

#Пример словаря

dictionary = {'key' : 'value'}

19. Как получить доступ к значениям в словаре?

Вы можете получить доступ к значениям в словаре, индексируя их с помощью ключа. Индексация представлена в виде [].

#Доступ к словарю

dictionary = {'key' : 'value'}
print(dictionary['key'])

20. Как получить список всех ключей в словаре?

Можно использовать атрибут, который есть у словаря — keys().

dictionary = {'key' : 'value', 'key1': : 'value1'}
print(dictionary.keys())

21. В чем разница между списком и кортежем?

Разница между списком и кортежем заключается в том, что список является изменяемым, а кортеж — нет. Кортеж может быть хэширован, например, в качестве ключа для словарей. Список определяется с помощью [], а кортеж — с помощью () .

#Пример списка и кортежа

#Список
list_ex = [1,2,'test']

#Список изменяем
list_ex[0] = 100

#Кортеж
tuple_ex = (1,2,'test)

#Кортеж неизменяем
tuple_ex[0] = 100 #Вернет ошибку

22. Что такое итераторы в Python?

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

23. Что делает [:: -1}?

[:: -1] используется для обратного порядка любого итерируемого объекта.

#Пример печати с конца

string = 'this is a string'
print(string[::-1])

24. Как можно использовать тернарные операторы в Python?

Тернарный оператор — это оператор, который используется для отображения условных операторов. Он состоит из истинных или ложных значений с утверждением, которое нужно проверить.

#Пример тернарного оператора

a = 1

#Значения true
if a < 1:
   print('Less')
#Если не выполнилось предыдущее значение
else:
   print('More')

25. Как работает break?

Оператор break позволяет завершить цикл, когда выполняется некоторое условие, и управление передается следующему оператору.

#Пример break

for i in range(5):
   if i < 3:
      print(i)
   else:
      break

26. Каков смысл оператора pass в Python?

Оператор pass в Python используется, когда выражение требуется синтаксически, но вы не хотите, чтобы какая-либо команда или код выполнялись.

#Пример pass

for i in range(10):
   if i%2 == 0:
      print(i)
   else:
      pass

27. Что такое функция map в Python?

map() — это функция, которая принимает другую в качестве аргумента, а затем применяет её ко всем элементам итератора, передаваемым ей в качестве другого аргумента. Функция вернет объект map, поэтому нам нужно преобразовать его в объект списка.

#Пример функции map

def number_exponential(num):
   return num**2

number_list = [2,3,4,5]

print(list(map(number_exponential, number_list)))

28. Что такое функция enumerate в Python?

Метод enumerate() добавляет счетчик к итерируемому и возвращает его в виде объекта перечисления (enumerate). Объект будет состоять из счетчика и итерационных значений.

#Пример enumerate

iter_example = ['test', 'test2', 'test3']
for idx, val in enumerate(iter_example):
   print(idx)
   print(val)

29. Что такое абстракции у словаря и списка в Python?

Они представляют собой синтаксические конструкции, облегчающие создание словаря или списка на основе существующих итеруемых. Создание происходит циклом внутри самого объекта.

#Абстракция словаря

dict_comprehension = {key:val for key, val in emumerate('sample')}
print(dict_comprehension)

#Абстракция списка

list_comprehension = [i for i in range(5)]
print(list_comprehension)

30. Что такое slicing в Python?

Slicing (отсечение) — это механизм выбора диапазона элементов из таких типов последовательностей, как список, кортеж, строки и т.д. Такое отсечение выполняется методом индексации.

#Пример отсечения

list_example = [1,2,3,4,'test','test2']
print(list_example[1:4])

31. Каков смысл not в операторе?

Операторы — это специальные функции. Они принимают одно или несколько значений и дают соответствующий результат. not вернет обратное логическое значение.

print(not 1 == 2)

32. Каков смысл // в python?

Это оператор целочисленного деления, который используется для деления двух операндов с результатом, показывающим только цифры перед десятичной точкой.

print(5//2)

33. Как добавить новое значение в объект списка?

Это можно сделать с помощью атрибута append(), который есть у списка. При передачи какого-то значения в этот атрибут, оно будет помещено в конец последовательности.

list_example = [1,2,3,4,5]
list_example.append(6)
print(list_example)

34. Что такое поверхностная копия?

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

#Пример поверхностной копии

list_example = [1,2,3,4,5]
another_list = list_example
another_list[0] = 100
print(list_example)

35. Что такое глубокая копия?

Глубокая копия используется для хранения значений, которые уже скопированы. Глубокая копия не копирует ссылочные указатели на объекты. Она создает ссылку на объект, и новый объект, на который указывает другой, сохраняется. В отличие от неглубокой копии, изменения, внесенные в исходную копию, не повлияют ни на одну другую копию, использующую объект. Это значит, что они не привязаны.

#Пример глубокой копии

list_example = [1,2,3,4,5]

#Создание глубокой копии с помощью атрибута .copy
another_list = list_example.copy()
another_list[0] = 100
print(list_example)

36. Как создать пустой класс в Python?

Пустой класс — это класс, который не имеет никакого кода, определенного в его блоке. Он может быть создан с помощью ключевого слова pass. Однако объекты этого класса можно создать и вне самого класса. В Python команда pass ничего не делает при ее выполнении, это null.

class sample:
    pass
test=sample()
test.name="test1"
print(test.name)

37. Что означает ключевое слово self в Python?

Ключевое слово self используется в качестве первого параметра функции внутри класса, представляющего экземпляр класса. Объект или экземпляр класса автоматически передается методу, которому он принадлежит, и принимается в ключевом слове “self”. Пользователи могут использовать другое имя для первого параметра функции, которая указывает на объект класса, но рекомендуется использовать ключевое слово “self”, так как оно ближе к соглашению Python.

38. Будет ли цикл do-while работать, если вы не закончите его точкой с запятой?

Это вопрос с подвохом! Во-первых, Python не поддерживает встроенный цикл do-while. Во-вторых, завершение циклов do-while является необходимостью для таких языков, как C++.

39. Как преобразовать список в строку?

В этом случае мы могли бы использовать атрибут .join() из строкового объекта. Здесь мы передали объект списка в атрибут:

list_example = ['apple', 'grape', 'orange']
print(' '.join(list_example))

40. Что такое оператор членства?

Это оператор, который может подтвердить, является ли значение членом в другом объекте. Операторы членства бывают “in” и “not in”.

#Пример операторов членства

print('me' in 'membership')
print('mes' not in 'membership')

41. Что такое операторы тождественности в Python?

Они показывают нам, тождественны ли два значения. Операторы — “is” и “is not”.

#Пример операторов тождественности
print(1 is '1')
print(2 is not '2')

42. Как обрабатывать входные данные в Python?

Для получения входных данных от пользователя можно использовать функцию input(). Она будет принимать входные данные от пользователя и возвращать их в строковый объект.

test = input('input a number: ')
print(test)

43. Что делает функция zip()?

Она вернет итератор кортежей, сформирует n-пару значений из перечисляемых, передаваемых функции. n — это число итерируемых, которые передают функции.

#Пример функции Zip

print(list(zip([1,2,3], ['apple', 'grape', 'orange'], ['x', 2, True])))

for num, fruit, thing in zip([1,2,3], ['apple', 'grape', 'orange'], ['x', 2, True]):
    print(num)
    print(fruit)
    print(thing)

44. В чем разница между тем, когда функция range() принимает один аргумент, два и три?

Когда мы передаем только один аргумент, функция принимает его в качестве стоп-значения. Здесь начальное значение равно 0, а шаговое +1. Итерация с диапазоном всегда будет останавливаться на единицу перед стоп-значением.

for i in range(5):
print(i)

Когда мы передаем два аргумента, первый из них является начальным значением, а второй — стоп значением.

for i in range(1,5):
print(i)

Используя три аргумента, первый аргумент является начальным, второй — стоп, а третий — значением шага.

for i in range(1,10,2):
print(i)

45. Напишите лучший код для перестановки двух чисел местами.

Вы можете выполнить перестановку с помощью одной строки.

a = 1
b = 2

#Перестановка чисел
a, b = b, a

46. Как можно объявить несколько назначений в одной строке кода?

Есть два способа это сделать. Первый — это отдельное объявление переменной в той же строке:

a, b, c = 1,2,3

Другой способ — объявить переменную в той же строке только с одним значением:

a=b=c=1

47. Как вырваться из бесконечного цикла?

Чтобы прервать процесс, нужно нажать Ctrl+C.

48. Что делает оператор with в Python?

Оператор with в Python гарантирует, что код очистки выполняется при работе с неуправляемыми ресурсами путем инкапсуляции общих задач подготовки и очистки. Он может быть использован, чтобы открыть файл, сделать что-то, а затем автоматически закрыть его. Также он может пригодиться для открытия соединения с базой данных, выполнения некоторой обработки, а затем автоматического закрытия, чтобы гарантировать, что ресурсы закрыты и доступны для других. with выполнит очистку ресурсов, даже если выдается исключение.

#Пример оператора with

with open('database.txt') as data:
    print(data)

49. Когда выполняется except, в блоке try-except?

Блок try-except обычно используется, когда мы хотим что-то выполнить, если возникли ошибки. except выполняется, когда код в блоке try вызвал ошибки.

a = (1,2,3)
try:
   a[0] = 2
except:
   print('There is an error')

50. Где вы будете использовать while вместо for?

Для простого повторяющегося цикла, либо тогда, когда не нужно перебирать список элементов, например записи базы данных и символы в строке.

51. Что такое модули Python?

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

import #имя модуля

52. Что такое PYTHONPATH?

PYTHONPATH — это переменная окружения, которая при импорте проверяется на наличие импортированных модулей в различных каталогах. Интерпретатор использует её, чтобы определить, какой модуль следует загрузить.

53. Назовите пример режимов обработки файлов с помощью Python?

Существуют следующие режимы:

  • Режим только для чтения (‘r’): открыть файл для чтения. Это режим по умолчанию.
  • Режим только для записи (‘w’): открыть файл для записи. Если файл содержит данные, они будут потеряны. Создается новый файл.
  • Режим чтения-записи (‘rw’): открыть файл для чтения, режим записи. Это режим обновления.
  • Режим добавления (‘a’): открыть для записи, добавить в конец файла, если файл существует.

54. Что такое pickling и unpickling?

Модуль pickle принимает любой объект Python, преобразует его в строковое представление и сохраняет в файл с помощью функции dump, такой процесс называется pickling. Процесс извлечения исходных объектов Python из сохраненного строкового представления называется unpickling.

import pickle

a = 1

#Процесс pickling
pickle.dump(a, open('file.sav', 'wb'))

#Процесс unpickling
file = pickle.load(open('file.sav', 'rb'))

55. Являются ли массивы Python NumPy лучше списков?

Мы используем массивы Python NumPy вместо списка по следующим трем причинам:

1. меньший объем памяти;

2. быстрее;

3. удобнее.

56. Как вычислять процентили с помощью NumPy?

Медиана — это 50 процентиль по определению. 25 процентиль указывает, что 25% наблюдаемых меньше числа в процентиле, то есть n процентов наблюдаемых значений меньше значения в процентиле n.

Мы можем вычислить его с помощью NumPy, используя следующий код:

import numpy as np

a = np.array([i for i in range(100)])
p = np.percentile(a, 50) #Возвращает 50-ый перцентиль - медиану

print(p)

57. Как получить текущий рабочий каталог с помощью Python?

Работая с Python, вам может понадобиться читать и записывать файлы из различных каталогов. Чтобы узнать, в каком вы сейчас работаете, можно использовать метод getcwd() из модуля os:

import os
os.getcwd()

58. Что вы видите снизу? Что произойдет, если мы выполним этот код?

a = '1'
b = '2'
c = '3's = a + ‘[‘ + b + ‘:’ + c + ‘]’
print(s)

Это конкатенация строк. Если даже одна из переменных не является строкой, она вызовет ошибку типа (TypeError). Выполнив этот код, мы получим результат конкатенации.

59. Как бы вы произвели рандомизацию содержимого списка на месте?

Мы можем воспользоваться функцией shuffle() из модуля random:

from random import shuffle
list_example = [1,2,3,4,5,6,7,8]
shuffle(list_example)

60. Что такое приведение в Python?

Приведение — это процесс преобразования значения переменной из одного типа в другой. В Python это можно сделать с помощью таких функций, как list(), int (), float() и str(). Примером может служить преобразование строки в целочисленный объект:

a = '1'
b = int(a)

61. Объясните ошибку

from numpy imprt stdev

ImportError Traceback (most recent call last)
<ipython-input-26-685c12521ed4> in <module>
----> 1 from numpy import stdev

ImportError: cannot import name 'stdev' from 'numpy'

В приведенном выше коде мы пытаемся импортировать несуществующую функцию из модуля numpy. В этом причина.

62. Как можно удалить переменные в Python?

Для удаления переменной мы можем использовать функцию del(). Считается хорошей практикой, убрать что-то лишнее, что не используется.

a = 1
del a

63. Что такое pandas в Python?

Pandas — это пакет Python, предоставляющий быстрые, гибкие и функциональныеструктуры данных, предназначенные для того, чтобы сделать работу с “реляционными” или “помеченными” данными простой и интуитивно понятной. Он призван стать фундаментальным строительным блоком высокого уровня для практического анализа реальных данных в Python.

64. В чем разница между методами append() и extend()?

Они используются для добавления элементов в конец списка.

  • append(элемент): добавляет элемент в конец списка;
  • extend(другой список): добавляет элементы другого списка в конец первого.

65. Как получить текущую версию Python?

Мы можем узнать текущую версию Python с помощью sys.version:

import sys
sys.version

66. Что значит *args, **kwargs? И зачем нам их использовать?

Мы используем *args, когда неуверены, сколько аргументов будет передано функции, или если хотим передать сохраненный список или кортеж аргументов функции. **kwargs используется, когда мы не знаем, сколько аргументов ключевых слов будет передано, а также он может быть использован для передачи значений словаря в качестве аргументов ключевых слов. Идентификаторы args и kwargs необязательны, вы можете изменить их на другие, типа *другой **пример, но лучше использовать имя по умолчанию.

#Пример *args
def sample(*args):
    print(args)

sample('time', 1, True)

#Пример **kwargs
def sample(**kwargs):
    print(kwargs)

sample(a = 'time', b = 1)

67. Что за функции help() и dir() в Python?

Функция help() отображает строку документации и справку для своего аргумента.

import numpy
help(numpy.array)

Функция dir() отображает все элементы объекта (любого вида).

import numpy
dir(numpy.array)

68. Что означает одинарное и двойное подчеркивание перед именем объекта?

Одиночное подчеркивание — имена в классе с подчеркиванием перед ними просто указывают другим программистам, что атрибут или метод предназначен для закрытого использования, однако с самим именем ничего особенного не делается.

Двойное подчеркивание (искажение имени) — любой идентификатор вида __spam (не менее двух ведущих подчеркиваний, не более одного завершающего) заменяется на _имякласса__spam, где имя класса — это текущее спрятанное имя с подчеркиванием перед ним. Это искажение выполняется без учета синтаксической позиции идентификатора, поэтому его можно использовать для определения экземпляра закрытого класса и его переменных, методов, а также глобальных и других переменных, хранящихся в экземплярах, частных для этого класса в экземплярах других.

69. Каков результат нижеприведенного запроса?

ss = “Python Programming!”
print(ss[5])

Ответ: ‘n’

70. Напишите программу на Python, чтобы создать треугольник из звезд

def star_triangle(r):
   for x in range(r):
      print(' '*(r-x-1)+'*'*(2*x+1))

star_triangle(7)

71. Что плохого в следующем коде:

counter = 0

def increment():
   counter += 1

increment()

В Python нет объявлений переменных, поэтому он должен сам определить их область действия. Если внутри функции имеется обращение к переменной, то она считается локальной. Переменная counter выше является глобальной, поэтому код выбрасывает ошибку.

72. Как разделить строку на список?

Мы можем использовать атрибут split(). Он принимает разделитель в качестве аргумента и возвращает список, состоящий из результатов разделения строки на его основе.

text = 'hello again world !'
text.split(' ')

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

a=input("enter the sequence: ")
b=a[::-1]

if a==b:
   print("palindrome")
else:
   print("Not a Palindrome")

74. Что такое генератор?

Генератор Python создает последовательность значений для итерации, часто с помощью функции. Мы определяем функцию с помощью yield , которая используется для получения значения по одному, а затем используем цикл for для итерации.

def squares(n):
    i=1
    while(i<=n):
        yield i**2
        i+=1
for i in squares(7):
    print(i)

75. Напишите программу на Python для проверки, является ли число простым

a=int(input("enter a number"))     
if a>1:
    for x in range(2,a):
        if(a%x)==0:
            print("not prime")
            break
    else:
        print("Prime")
else:
    print("not prime")

76. Какова цель одинарной переменной подчеркивания ( ‘ _ ’ ) в Python?

Она предназначена для хранения результата последнего выполненного выражения (/statement) в сеансе интерактивного интерпретатора. Этот прецедент был установлен стандартным интерпретатором CPython, а другие последовали этому примеру.

77. Каковы типы наследования в Python?

Python поддерживает различные типы наследования. Ими являются:

  • единичное наследование;
  • многоуровневое наследование;
  • иерархическое наследование;
  • множественное наследование.

78. Что такое распаковка кортежа?

Это процесс распаковки его значений и их ввода в несколько различных переменных.

tup = (1,2,3)

#Процесс распаковки кортежа
a,b,c = tup

79. Освобождается ли вся память при выходе из Python?

Выход из Python освобождает все, кроме:

1. модулей с циклическими ссылками;

2. объектов, на которые ссылаются глобальные пространства имен;

3. части памяти, зарезервированной библиотекой C.

80. Является ли функция допустимой, если она не имеет оператора return?

Функция, которая ничего не возвращает, возвращает объект None. Ключевое слово return необязательно обозначает конец функции, оно просто завершает ее, если присутствует. Обычно блок кода помечает функцию, и там, где заканчивается блок, заканчивается и тело функции.

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи Cornellius Yudha Wijaya: 80 Python Interview Practice Questions

Предыдущая статьяРеализация GitHub Action в контейнере Docker
Следующая статьяСоздаем Telegram-бота с помощью Node.js за 3 минуты