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

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
🌱 Что выведет код?
Anonymous Quiz
19%
[1, 2, 3]
74%
[1, 2, 3, 4]
5%
[4, 1, 2, 3]
3%
Error
👍3👎1
Списки являются изменяемыми объектами, и при присваивании b = a создается ссылка на тот же список, а не его копия. Поэтому при изменении списка b через метод append(), изменения также отражаются в списке a, так как они указывают на один и тот же объект в памяти.
👍3👎1
🔍 Что выведет код?
Anonymous Quiz
14%
a
74%
b
6%
ab
6%
Error
👍2👎1
Код выведет "b" из-за принципа работы областей видимости LEGB и использования ключевого слова global:

1. Сначала определяется глобальная переменная x со значением "a":
x = "a"

2. Затем определяется функция outer_func(), которая объявляет x как глобальную переменную с помощью ключевого слова global:

def outer_func():
global x

3. Внутри outer_func() определяется вложенная функция nested_func(), которая просто выводит значение x:

def nested_func():
print(x)

4. После определения функций, значение глобальной переменной x изменяется на "b":
x = "b"

Благодаря объявлению global x внутри outer_func(), все обращения к x внутри этой функции (включая вложенные функции) будут ссылаться на глобальную переменную x. Когда nested_func() вызывается и пытается вывести x, она ищет значение x в следующем порядке (LEGB):
— L (Local): локальной переменной x нет;
— E (Enclosing): из-за global x в outer_func, пропускается;
— G (Global): находит x со значением "b";
— B (Built-in): не требуется.
👍2👎1
Классы всегда вкладываются внутрь модуля. Классы и модули являются пространствами имен, но классы соответствуют операторам (не целым файлам) и поддерживают такие понятия ООП, как множество экземпляров, наследование и перегрузку операций (все перечисленное модули не поддерживают). До известной степени модуль подобен классу с единственным экземпляром без наследования, который соответствует полному файлу кода.
👍2👎1
🌱 Какие из способов создания атрибута класса являются правильными?
Anonymous Quiz
20%
1
18%
2
6%
3
56%
Все верные
🍌5👍31👎1
Объяснение: Все три способа являются корректными, но создают разные типы атрибутов:
- attr1 - это атрибут класса, доступный всем экземплярам
- attr2 - это атрибут экземпляра, уникальный для каждого объекта
- attr3 - это атрибут класса, добавленный после определения класса
👎31👍1
Атрибуты экземпляра создаются посредством присваивания значений атрибутам объекта экземпляра. Они обычно создаются в функциях методов класса, реализованных внутри оператора class, с помощью присваивания значений атрибутам аргумента self (который всегда является подразумеваемым экземпляром).

Однако их тоже можно создавать присваиванием везде, где присутствует ссылка на экземпляр, даже за пределами оператора class. Обычно все атрибуты экземпляра инициализируются в методе конструктора __init__ таким образом, более поздние вызовы методов могут предполагать, что атрибуты уже существуют.
👎3👍1
self — это имя, обычно назначаемое первому (крайнему слева) аргументу в функции метода класса, который представляет собой подразумеваемый объект вызова метода. Данный аргумент НЕ обязан называться self.
3👍1👎1
🔍 Какой метод перерузки операций используется чаще всего?
Anonymous Quiz
13%
__add__
15%
__call__
66%
__init__
7%
__getitem__
👎7💩3
Наиболее часто используется метод конструктора __init__ класс применяет этот метод для установки начальных значений атрибутов экземпляра и выполнения других задач начального запуска.
🤡2
Какого значения параметра fill_method в Pandas не существует?
Anonymous Quiz
26%
pad
16%
ffill
14%
zfill
46%
Все существуют
👍2👎1
Параметр fill_method позволяет задавать способ замены значений NaN. Этот параметр присутствует во множестве методов — pct_change, diff, и т.д. У метода fillna() он зовется просто method.

— forward-fill (ffill): «протащить» последнее действительное значение вперед;
— backfill (bfill): использовать следующее действительное наблюдение для заполнения пробела;
— zero-fill (zfill): заполнить пробелы нулями
— None: не обрабатывать пропуски

Важное примечание: существует отдельный метод pandas.DataFrame.pad(), он по умолчанию заливает в пустую ячейку последнее валидное значение.
👍2👎1