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

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
Из документации Pandas:

DataFrame.set_index(keys, *, ...)
Устанавливает индекс датафрейма, используя существующие столбцы. В данном случае — timestamp.

DataFrame.asfreq(freq, ...):
Преобразует временной ряд в ряд заданной частоты. В данном случае — в ряд ежедневных (D — "Daily") значений.

DataFrame.ffill(*, ...):
Заполняет значения NA / NaN, распространяя последнее действительное наблюдение на следующее действительное. В данном случае — заполняет пропущенные значения в режиме "forward fill" (то есть выставляет значение предыдущего дня на следующий пустующий день).

В данном случае комбинация asfreq() и ffill() позволяет сформировать последовательно возрастающие данные для каждого из семи дней, с forward-заполнением.
👍1👎1
🧩 Что выведет код?
Anonymous Quiz
59%
<class '__main__.С'>
9%
None
28%
<__main__.C at 0x0...>
3%
Error
👍2👎1
Марк Лутц, «Изучаем Python», том 2, гл. 32:

«Помимо появления возможности создавать подклассы встроенных типов и реализовывать метаклассы — один из самых практических контекстов, где такое объединение “тип/класс” становится наиболее очевидным, касается явной проверки типов. Для классических классов Python 2.Х типом экземпляра класса является обобщенный «экземпляр» (instance), но типы встроенных объектов более специфичны:

class С(object): pass # Обычный класс
I = С() # Экземпляры создаются из классов
print(type(I)) # Выведет <class '__main__.С'>»

В данном примере:
- Создается класс С, наследующий от object
- Создается экземпляр I этого класса
- type(I) возвращает <class '__main__.С'>
Хватит жить в неведении и не знать, как пройдёт твой день

IT-колода расставит всё по местам.

Что тебя ждёт? Завал задачами, вновь вылезший баг, похвала от тимлида? Вытаскивай карту из колоды и узнай, что приготовила для тебя судьба на день грядущий: https://tprg.ru/CifG

Реклама
🤡3
Достаточно ли сложных задач?
Anonymous Poll
46%
Да
54%
Нет
🪤 Что выведет код?
Anonymous Quiz
22%
1
59%
2
14%
None
5%
Error
👍4👎1
Речь идет о так называемом ромбовидном наследовании и принципе MRO (Method Resolution Order).

Марк Лутц, «Изучаем Python», том 2, гл. 32:

«Путь поиска при наследовании в ромбовидных схемах выполняется больше в манере сначала в ширину ~ Python сначала ищет в любых суперклассах справа от только что просмотренного и только потом поднимается к общему суперклассу вверху. Другими словами, поиск проходит по уровням, прежде чем двигаться вверх.

...

class A: attr = 1 # Обычный класс

class B(A): pass # В и С ведут к А
class С(A): attr = 2
class D(B, С): pass # Проверяет С перед А

х = D()
print(х.attr) # Ищет в х, D, В, С

Атрибут x.attr обнаруживается в суперклассе А, потому что в классических классах
поиск при наследовании поднимается настолько высоко, насколько может, прежде
чем остановиться и начать движение вправо».
👍4👎1
🪤 Что выведет код?
Anonymous Quiz
34%
1
11%
2
24%
3
31%
Error
👎2👍1
Здесь речь также идет о принципе MRO (см. предыдущую задачу).

x = D() # создаем экземпляр класса D, но НЕ вызываем никаких методов

Метод meth() содержит print('C.meth'), но этот print() выполняется только при вызове метода.
🧩 Что выведет код?
Anonymous Quiz
38%
1000
13%
None
1%
[]
48%
Error
👍2👎1
Документация Python:

«object.__slots__
...__slots__ резервирует место для объявленных переменных и предотвращает автоматическое создания dict и weakref для каждого экземпляра».

В задаче выше мы «зафиксировали» список атрибутов и не допускаем добавление ape.

Средство слотов задумывалось как способ отлавливания опечаток.
👍5👎1
🪤 Что выведет код?
Anonymous Quiz
27%
{'a': 1, 'b': 2}
19%
{'b': 2}
6%
{}
48%
Error
🤯2👍1👎1
Задача выше тоже относится к теме слотов.

Что происходит:
1. Класс C - пустой базовый класс
2. Класс D наследует от C и имеет __slots__ = ['a'] - это означает, что экземпляры класса D могут иметь только атрибут a
3. X = D() - создается экземпляр класса D
4. X.a = 1 - устанавливается атрибут a (разрешенный слот)
5. X.b = 2 - устанавливается атрибут b (НЕ разрешенный слот)

Почему же в __dict__ только {'b': 2}? Когда вы используете, атрибуты, указанные в __slots__ (в данном случае a) хранятся в специальной структуре данных, а не в __dict__. Атрибуты, НЕ указанные в __slots__ (в данном случае b) хранятся в __dict__ как обычно.
2👍2👎1🤨1
Из документации Python:

«
@staticmethod
Преобразует метод в статический. Такой метод не получает неявного первого аргумента:

class C:
@staticmethod
def f(arg1, arg2, argN): ...

Форма
@staticmethod представляет собой декоратор функции.

Статический метод может быть вызван как для класса (например, C.f()), так и для экземпляра (например, C().f())».

Декораторы позволяют расширять и изменять поведение вызываемых объектов (функций, методов и классов) без постоянного изменения самого вызываемого объекта.
👍1👎1