Python: задачки и вопросы
7.74K subscribers
1.19K photos
1 video
1 file
91 links
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Другие наши проекты: https://tprg.ru/media
Download Telegram
🧩 Какого типа исключения не существует?
Anonymous Quiz
13%
SystemError
10%
ModuleNotFoundError
26%
StopIteration
51%
Все существуют
2👍1👎1
Из документации Python:

«SystemError: Возникает, когда интерпретатор обнаруживает внутреннюю ошибку, но ситуация не выглядит настолько серьезной, чтобы заставить его потерять всякую надежду».

«ModuleNotFoundError: Подкласс ImportError, который возникает при импорте, когда модуль не может быть найден».

«StopIteration: Вызывается встроенной функцией next() и методом итератора __next__(), чтобы сигнализировать об отсутствии дальнейших созданных итератором элементов».
👍3👎1
🪤 Что выведет код?
Anonymous Quiz
11%
1
33%
2
48%
3
8%
Error
👍1👎1
Марк Лутц, «Изучаем Python», том 2, гл. 32:

«class С:
def act(self):
print('spam')

class E(С):
def method(self): # self подразумевается в super
proxy = super() # Эта форма не имеет смысла вне метода
print(proxy) # Вывод обычно скрытого промежуточного объекта
proxy.act() # Аргументы отсутствуют: неявно вызывает метод суперкласса

print(E().method())»

Пошагово:
1. E().method() создает экземпляр класса E и вызывает его метод method()
2. Внутри method():
- Создается proxy = super() (объект super)
- Выводится print(proxy) → <super: <class 'E'>, <E object>>
- Вызывается proxy.act() → выводится spam
3. Метод method() завершается без return, поэтому возвращает None
👍1👎1
Из документации Python:

«
@classmethod преобразует метод в метод класса, что получает класс в качестве неявного первого аргумента, точно так же, как метод экземпляра получает экземпляр».

В данном случае преимущества такие:
- Гибкость - разные способы создания объектов
- Читаемость - from_string явно показывает источник
- Наследование - если создать подкласс, cls автоматически будет указывать на него
👍3👎1
🪤 Что выведет код?
Anonymous Quiz
36%
1
20%
2
35%
3
9%
Error
Марк Лутц, «Изучаем Python», том 2, гл. 32:

«В данном случае ветви дерева суперклассов разъединены (у них отсутствует явный общий предок), так что подклассы, которые их комбинируют, должны делать вызовы через каждый суперкласс по имени — распространенная ситуация с большинством существующего кода на Python, которую super не может решить напрямую без внесения изменений в код».

class В:
def __init__(self): print("B.__init__")

class С:
def __init__(self): print("C.__init__")

class D(В, С):
pass

x = D() # По умолчанию выполняется только крайний слева
🧩 Исполнится ли данный код
Anonymous Quiz
80%
Да
20%
Нет
Этот код исполнится, поскольку Serializer — это так называемый миксин (Mixin — англ. «примесь»).
Самый доступное объяснение этой концепции можно посмотреть на
этом англоязычном видео.
Из документации Pandas:

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

df = pd.DataFrame({"foo": [1, 2, 3], "bar": [4, 5, 6]})
subset = df["foo"]
subset.iloc[0] = 100

df

В консоль выведется:

foo bar
0 100 4
1 2 5
2 3 6

Изменение подмножества, например, обновление его значений, также приводит к обновлению df. Точное поведение сложно предсказать. Copy-on-Write решает проблему случайного изменения более одного объекта, явно запрещая это. При включённом CoW df не изменяется».

Режим copy_on_write означает "копирование при записи". Это оптимизация, которая позволяет pandas не создавать копии данных сразу при создании view или slice, а только тогда, когда данные действительно изменяются. Это значительно экономит память, особенно при работе с большими наборами данных и цепочками операций. Это дефолтное поведение для Pandas версии 3.0+.