Python: задачки и вопросы
7.62K subscribers
1.23K photos
2 videos
1 file
103 links
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
🧩 Что выведет код?
Anonymous Quiz
20%
1
15%
2
59%
3
7%
Error
👍1👎1
В данном коде демонстрируется декоратор регистрации, который добавляет объекты в словарь для будущей обработки.

Предположим, что вы требуете от методов или классов, используемых приложением, регистрации в API−интерфейсе для будущей обработки (может быть, API−интерфейс позже будет обращаться к объектам и отвечать на текущие события). Несмотря на то что это могли бы предоставить регистрационные функции, которые выполняли вызову вручную после того, как объекты определены, декораторы сделают ваше решение более элегантным.

Механизм работы:

🔘 Декоратор 𝚛𝚎𝚐𝚒𝚜𝚝𝚎𝚛 добавляет функции в словарь 𝚛𝚎𝚐𝚒𝚜𝚝𝚛𝚢 по их имени
🔘 При декорировании @𝚛𝚎𝚐𝚒𝚜𝚝𝚎𝚛 функции 𝚜𝚙𝚊𝚖 и 𝚎𝚐𝚐𝚜 автоматически регистрируются
🔘 𝚛𝚎𝚐𝚒𝚜𝚝𝚛𝚢[𝚘𝚋𝚓.__𝚗𝚊𝚖𝚎__] = 𝚘𝚋𝚓 сохраняет ссылку на функцию в словаре
🔘 𝚛𝚎𝚝𝚞𝚛𝚗 𝚘𝚋𝚓 возвращает саму функцию, а не обертку

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

Вывод кода:
🔘 𝚁𝚎𝚐𝚒𝚜𝚝𝚛𝚢: показывает содержимое словаря 𝚛𝚎𝚐𝚒𝚜𝚝𝚛𝚢 с именами функций, их объектами и типами
🔘 𝙼𝚊𝚗𝚞𝚊𝚕 𝚌𝚊𝚕𝚕𝚜: прямые вызовы функций 𝚜𝚙𝚊𝚖(𝟺) = 𝟷𝟼, 𝚎𝚐𝚐𝚜(𝟾) = 𝟻𝟷𝟸
🔘 𝚁𝚎𝚐𝚒𝚜𝚝𝚛𝚢 𝚌𝚊𝚕𝚕𝚜: вызовы функций через словарь 𝚛𝚎𝚐𝚒𝚜𝚝𝚛𝚢 с аргументом 𝟸: 𝚜𝚙𝚊𝚖(𝟸) = 𝟺, 𝚎𝚐𝚐𝚜(𝟸) = 𝟾

Таким образом, регистр хранит ссылки на функции и классы, и их можно вызывать напрямую через регистр.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👎1
🧩 Что выведет код?
Anonymous Quiz
5%
None
87%
Bob is 45 years old
3%
Bob
5%
TypeError
👍1👎1
В данном коде демонстрируется декоратор проверки вхождения значений в диапазон для позиционных аргументов.

🔘 Декоратор @𝚛𝚊𝚗𝚐𝚎𝚝𝚎𝚜𝚝((𝟷, 𝟶, 𝟷𝟸𝟶)) проверяет, что аргумент с индексом 𝟷 (𝚊𝚐𝚎) находится в диапазоне от 𝟶 до 𝟷𝟸𝟶
🔘 Если __𝚍𝚎𝚋𝚞𝚐__ = 𝚃𝚛𝚞𝚎 (режим отладки), функция оборачивается проверкой
🔘 При вызове 𝚙𝚎𝚛𝚜𝚒𝚗𝚏𝚘('𝙱𝚘𝚋', 𝟺𝟻) проверяется: 𝟺𝟻 >= 𝟶 и 𝟺𝟻 <= 𝟷𝟸𝟶
🔘 Условие выполняется, поэтому функция выполняется нормально и выводит «𝙱𝚘𝚋 𝚒𝚜 𝟺𝟻 𝚢𝚎𝚊𝚛𝚜 𝚘𝚕𝚍»

В имеющемся коде объект функции обертывается представленной формой исследования, если активен режим 𝚍𝚎𝚋𝚞𝚐 (по умолчанию 𝚃𝚛𝚞𝚎). В противном случае возвращается сама функция, и код выполняется без дополнительных проверок.

Если бы 𝚊𝚐𝚎 был вне диапазона (например, 𝟷𝟻𝟶), то возникло бы исключение 𝚃𝚢𝚙𝚎𝙴𝚛𝚛𝚘𝚛 с сообщением «𝙰𝚛𝚐𝚞𝚖𝚎𝚗𝚝 𝟷 𝚗𝚘𝚝 𝚒𝚗 𝟶..𝟷𝟸𝟶».
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👎1
😊 Как организовать работу с данными, чтобы не утонуть в бюрократии?
😊 Какие подводные камни ждут при миграции всего банка в облако?
😊 Как силами NLP в 30 раз ускорить обработку клиентских обращений?

В гайдах для начинающих на такие вопросы вряд ли найдется ответ. А вот в телеграм-канале OTP Tech точно найдется наглядный разбор.

В OTP Tech вы получите реальный опыт внедрения сложных решений в продакшен крупного финтеха. Ну и просто фановый интерактив, который поможет разгрузить голову.

Если вы разрабатываете, проектируете или администрируете и хотите смотреть дальше хеллоу ворлдов — вам будет здесь интересно.

Присоединяйтесь: @otp_tech
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👎1
🧩 Как называется параметр ???, который сузит список импортируемых столбцов до заданного списка?
Anonymous Quiz
38%
columns
17%
usecols
18%
col_names
27%
select_columns
👍1👎1
Борис Пасхавер, «Pandas в действии», глава 3:

С помощью параметра 𝚞𝚜𝚎𝚌𝚘𝚕𝚜 функции 𝚛𝚎𝚊𝚍_𝚌𝚜𝚟 можно указать список импортируемых библиотекой 𝚙𝚊𝚗𝚍𝚊𝚜 столбцов.
👍1👎1
🧩 Что выведет код?
Anonymous Quiz
21%
('c', 'd')
10%
('a', 'c', 'd')
54%
('a', 'b', 'c', 'd')
15%
Error
👍1👎1
Атрибут 𝚌𝚘𝚍𝚎 объекта функции предоставляет доступ к объекту кода, который содержит метаданные о функции, включая информацию о локальных переменных и аргументах.

Из
документации Python:

«𝚌𝚘𝚍𝚎𝚘𝚋𝚓𝚎𝚌𝚝.𝚌𝚘_𝚟𝚊𝚛𝚗𝚊𝚖𝚎𝚜: кортеж, содержащий имена локальных переменных в функции (начиная с имен параметров)».

В 𝚏𝚞𝚗𝚌() определены:
− Аргументы: 𝚊, 𝚋
− Локальные переменные: 𝚌, 𝚍

𝚌𝚘𝚍𝚎.𝚌𝚘_𝚟𝚊𝚛𝚗𝚊𝚖𝚎𝚜 — все имена локальных переменных. Этот атрибут возвращает кортеж всех локальных переменных функции, включая аргументы и переменные, определенные внутри функции.
👍1👎1
🧩 Что выведет код?
Anonymous Quiz
49%
5.5
17%
(2, 3, 0.5)
5%
5
29%
Error
👎2👍1
В данном коде используется декоратор 𝚛𝚊𝚗𝚐𝚎𝚝𝚎𝚜𝚝 с аргументами для проверки диапазонов значений параметров функции.

Марк Лутц «Изучаем Python», глава 𝟹𝟿:

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

Декоратор @𝚛𝚊𝚗𝚐𝚎𝚝𝚎𝚜𝚝(𝚊=(𝟷, 𝟻), 𝚌=(𝟶.𝟶, 𝟷.𝟶)) принимает аргументы для проверки диапазонов:
🔘 параметр 𝚊 должен находиться в диапазоне от 𝟷 до 𝟻 (не включительно)
🔘 параметр 𝚌 должен находиться в диапазоне от 𝟶.𝟶 до 𝟷.𝟶 (не включительно)

В данной реализации декоратор является «пустым» — он принимает аргументы, но не выполняет никаких проверок, просто возвращает исходную функцию без изменений.

При вызове 𝚏𝚞𝚗𝚌(𝟸, 𝟹, 𝟶.𝟻) функция выполняется с параметрами:
− 𝚊 = 𝟸
− 𝚋 = 𝟹
− 𝚌 = 𝟶.𝟻

Функция вычисляет и выводит результат: 𝟸 + 𝟹 + 𝟶.𝟻 = 𝟻.𝟻.
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1👎1
Из документации Python:

Флаг −𝙾 в команде «𝚙𝚢𝚝𝚑𝚘𝚗 −𝙾 𝚖𝚊𝚒𝚗.𝚙𝚢» выполняет следующие действия:

🔘 Удаляет операторы 𝚊𝚜𝚜𝚎𝚛𝚝 и любой код, зависящий от значения 𝚍𝚎𝚋𝚞𝚐
🔘 Добавляет .𝚘𝚙𝚝−𝟷 к именам скомпилированных (байт−код) файлов перед расширением .𝚙𝚢𝚌

Это позволяет создавать оптимизированный байт−код без отладочной информации и проверок 𝚊𝚜𝚜𝚎𝚛𝚝.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👎1
🧩 Что выведет код?
Anonymous Quiz
22%
<class 'type'>
63%
<class '__main__.MyClass'>
9%
class
7%
Error
👍1👎1
Классы представляют собой экземпляры класса 𝚝𝚢𝚙𝚎, в точности как нормальные экземпляры являются экземплярами класса, определённого пользователем. Это работает одинаково для встроенных типов и типов классов, определённых пользователями: классы вообще не считаются отдельной концепцией; они представляют собой просто обычные экземпляры особых типов и при их определении используется метакласс 𝚝𝚢𝚙𝚎.

𝚝𝚢𝚙𝚎(𝙼𝚢𝙲𝚕𝚊𝚜𝚜) возвращает <𝚌𝚕𝚊𝚜𝚜 '𝚝𝚢𝚙𝚎'> — это показывает, что сам класс 𝙼𝚢𝙲𝚕𝚊𝚜𝚜 является экземпляром класса 𝚝𝚢𝚙𝚎

Марк Лутц «Изучаем Python», глава 40:

«Классы представляют собой экземпляры класса 𝚝𝚢𝚙𝚎». Это означает, что 𝚝𝚢𝚙𝚎 является не только встроенным классом, но и метаклассом: классом, экземплярами которого являются другие классы.

Фактически 𝚖𝚎𝚝𝚊𝚌𝚕𝚊𝚜𝚜 — это просто фабрика классов, и благодаря тому, что классы являются экземплярами класса 𝚝𝚢𝚙𝚎, возможно создание собственных подклассов 𝚝𝚢𝚙𝚎 (называемых метаклассами) для генерации классов особого вида.
👍1👎1