Python: вопросы на собеседовании. Часть II. Middle

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

  1. Python: вопросы собеседования. Часть I. Junior
  2. Python: вопросы собеседования. Часть II. Middle
  3. Python: вопросы собеседования. Часть III. Senior

Вопросы

  1. Какой будет результат операции -12 % 10?
  2. Какой будет результат операции -12 // 10?
  3. Какая последовательность вызова операторов в выражении a * b * c?
  4. Почему нельзя сделать пустой список аргументом по умолчанию?
  5. Что делает функция id()?
  6. Для чего зарезервировано ключевое слово yield?
  7. Что такое итераторы в Python?
  8. Что такое генераторы в Python? Чем они отличаются от итераторов?
  9. В чем разница между __iter__ и __next__?
  10. Как вы создадите словарь, который может сохранять порядок элементов (пар ключ-значение)?
  11. Что такое контекстный менеджер в Python? Чем он отличается от конструкции try ... finally?
  12. Какие функции нужно переопределить в классе А, чтобы экземпляры этого класса могли реализовать протокол контекстного менеджера?
  13. Что такое синхронный код? А асинхронный? Как написать асинхронное приложение?
  14. Что такое unittest в Python?
  15. Что такое проверка типов? Какие есть типы в Python?
  16. Как осуществляется управление памятью в Python?
  17. Как в Python работает сборщик мусора? Опишите вкратце его деятельность.
  18. Как можно расширить зону видимости глобальных переменных на другие модули?
  19. Что такое атрибут __slots__?
  20. Что такое метаклассы в Python?
  21. Как создать класс без инструкции class?

Вопросы с кодом

  1. Каким будет результат выполнения данного кода?
list = ['a', 'b', 'c', 'd', 'e']
print list[10:] # []
  1. Как мне перезагрузить уже импортированный модуль? (Предполагается, что модуль это отдельный файл).
  2. Каким будет результат выполнения данного кода?
a = [[]]*3
a[1].append(1)
print(a)  # [[1], [1], [1]]
  1. Что не так в этом коде?
def foo():
    from .module import *
    print(f"{bar()}")
  1. Файл с программой на языке Python находится здесь: /usr/lib/python/person.py. Он запускается следующим образом: python /usr/lib/python/person.py. Что получится в результате? Код программы ниже:
class Person:
    def __init__(self, name):
        __name__ = name

    def getAge(self):
        print(__name__)

p = Person("John")
p.getAge()
  1. Напишите декоратор timeit для измерения времени работы функции.
  2. Напишите настраиваемый декоратор repeater, который будет перехватывать повторяющиеся ошибки.
  3. Какой будет результат выполнения данного кода?
class parent:
    def __init__(self, param):
        self.v1 = param

class child:
    def __init__(self, param):
        self.v2 = param

obj = child(11)
print(obj.v1 + " " + obj.v2)
  1. Добавьте код, чтобы программа ниже заработала.
class Repeater:
    ...
class RepeaterIterator:
    ...

repeater = Repeater("Hello")
for i in repeater:
    print(i)  # hello
  1. Напишите программу для получения списка с уникальными элементами из списка с различными типами данных.
  2. У нас есть следующий код с неизвестной функцией f(). Мы не хотим использовать в функции f() return, а хотим, чтобы она была генератором.
for x in f(5):
    print x
  1. Результат выполнения данного кода следующий: 0 1 8 27 64. Напишите функцию f(), в результате работы которой будет получаться такой результат.
  2. Каким будет результат выполнения данного кода?
x = [[0], [1]]
print(len(' '.join(list(map(str, x)))))
  1. Напишите программу, которая выводит на экран числа от 1 до 20. Но для чисел, кратных трем, вместо числа надо вывести “Fizz”, а для чисел, кратных пяти, — “Buzz”. Если число кратно и трем, и пяти, то нужно вывести на экран “FizzBuzz”.
  2. Каким будет результат выполнения данного кода? Что здесь не так и как это можно исправить?
class Developer:
    coffee_cups = 0

    def __init__(self, name):
        self.name = name
        self.coffee_cups += 1

    def speak(self):
        print(f"I'm {self.name} and I've had {self.coffee_cups} cups 
              of coffee today")

rover = Developer("Steve")
spot = Developer("Bob")

Предыдущая статья: Python: вопросы собеседования. Часть I. Junior

Следующая статья: Python: вопросы собеседования. Часть III. Senior