ch
Feedback
Python: задачки и вопросы

Python: задачки и вопросы

前往频道在 Telegram

Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media

显示更多
7 132
订阅者
-124 小时
+77
无数据30
帖子存档
Марк Лутц, «Изучаем Python», глава 36: «Методы __𝚐𝚎𝚝𝚊𝚝𝚝𝚛__ и __𝚜𝚎𝚝𝚊𝚝𝚝𝚛__ автоматически запускаются, когда экземпляр задействован в контексте, описанном справа в комментарии: — 𝚍𝚎𝚏 __𝚐𝚎𝚝𝚊𝚝𝚝𝚛__(𝚜𝚎𝚕𝚏, 𝚗𝚊𝚖𝚎): При извлечении неопределённых атрибутов obj.name — 𝚍𝚎𝚏 __𝚜𝚎𝚝𝚊𝚝𝚝𝚛__(𝚜𝚎𝚕𝚏, 𝚗𝚊𝚖𝚎, 𝚟𝚊𝚕𝚞𝚎): При присваивании всех атрибутов obj.name=value» В данном коде: 🔘При первом обращении к 𝚡.𝚓𝚘𝚋 вызывается __𝚐𝚎𝚝𝚊𝚝𝚝𝚛__, так как атрибут 𝚓𝚘𝚋 не существует; 🔘При присваивании 𝚡.𝚙𝚊𝚢 = 99 вызывается __𝚜𝚎𝚝𝚊𝚝𝚝𝚛__; 🔘При повторном обращении к 𝚡.𝚓𝚘𝚋 снова вызывается __𝚐𝚎𝚝𝚊𝚝𝚝𝚛__, поскольку атрибут 𝚓𝚘𝚋 так и не был создан (метод __𝚜𝚎𝚝𝚊𝚝𝚝𝚛__ не создаёт атрибут, а только выводит сообщение) 🔘Метод __𝚐𝚎𝚝𝚊𝚝𝚝𝚛__ возвращает 42, который выводится через 𝚙𝚛𝚒𝚗𝚝 🔘Метод __𝚜𝚎𝚝𝚊𝚝𝚝𝚛__ перехватывает ВСЕ присваивания атрибутов, но в данном случае он только выводит сообщение, не создавая реальный атрибут в экземпляре.

🪤 Что выведет код?
Anonymous voting

Из документации Python: «При работе с JSON-файлами в текстовом формате используйте encoding="utf-8" при открытии файла для чтения и записи». 𝚏 = 𝚘𝚙𝚎𝚗('𝚠𝚘𝚛𝚔𝚏𝚒𝚕𝚎', '𝚠', 𝚎𝚗𝚌𝚘𝚍𝚒𝚗𝚐="𝚞𝚝𝚏-𝟾") Почему вариант 1 — правильный 🔘Он непосредственно позволяет указать желаемую кодировку при чтении или записи файла. 🔘Это прямой и стандартный подход, предусмотренный в языке (без дополнительных преобразований вручную). Другие варианты (например, str.encode() с записью байтов, использование JSON или pickle) не являются подходящими для создания текстового файла в нужной кодировке — они либо статичны, либо служат для других целей.

Как можно создать текстовый файл Unicode в формате специфической кодировки?
Anonymous voting

Из документации Python: Причина вывода False — разные типы данных: 🔘 Литерал с префиксом u создаёт объект типа 𝚜𝚝𝚛 (Unicode-строка); 🔘 Литерал с префиксом b создаёт объект типа 𝚋𝚢𝚝𝚎𝚜 (байтовая строка). В Python 3 это принципиально разные типы. Сравнение 𝚜𝚝𝚛 == 𝚋𝚢𝚝𝚎𝚜 всегда возвращает False, даже если они визуально одинаковы, потому что объекты разных типов не равны. В официальной документации Python указано: «Байтовые литераты всегда сопровождаются префиксом b, это генерирует объект типа 𝚋𝚢𝚝𝚎𝚜, не 𝚜𝚝𝚛». «Поддержка устаревшего Unicode-литерала (u'spam') была вновь введена для упрощения поддержки кода, работающего как на Python 2.x, так и на Python 3.x».

Что выведет код?
Anonymous voting

Марк Лутц, «Изучаем Python», глава 36: Использование пустой конструкции except может привести к серьезным проблемам: «Программист здесь предполагает, что единственным видом ошибок, которые могут произойти при индексировании словаря, будет отсутствующий ключ. Но поскольку имя myditctionary написано неправильно (должно быть mydictionary), интерпретатор Python взамен генерирует исключение NameError для ссылки на неопределенное имя, которое обработчик молча перехватывает и игнорирует». Что происходит в коде: — Переменная mydictionary определена корректно; — В блоке try используется неправильное имя myditctionary (с опечаткой); — Это вызывает NameError, а не ожидаемый KeyError; — Пустой except перехватывает любую ошибку, включая NameError; — Программа продолжает выполнение, маскируя реальную проблему. «В качестве эмпирического правила: будьте в своих обработчиках как можно более конкретными — пустые конструкции except и перехват суперкласса Exception удобны, но потенциально подвержены ошибкам».

🧩 Что выведет код?
Anonymous voting

Марк Лутц, «Изучаем Python», глава 36: «В коде используется удобная функция `print_exc` из модуля `traceback`, которая по умолчанию потребляет данные `sys.exc_info`» Исключение уже было перехвачено блоком except Exception. Когда происходит деление на ноль в функции inverse(0), Python генерирует `ZeroDivisionError`, но этот блок except перехватывает исключение и предотвращает его дальнейшее распространение. После перехвата исключения: 1. `traceback.print_exc(file=open('badly.exc', 'w'))` - записывает информацию об ошибке в файл `badly.exc` 2. `print('Bye')` - выполняется нормально, так как исключение уже обработано «traceback.print_exc() потребляет данные sys.exc_info - это означает, что функция извлекает информацию о последнем исключении и форматирует её для вывода, но не прерывает выполнение программы.

🧩 Что выведет код?
Anonymous voting

Марк Лутц, «Изучаем Python», глава 36: «Результат вызова sys. exc inf о, который применялся в предшествующих двух разделах, дает возможность обработчику исключений получать доступ к самому последнему cгенерированному исключению обобщенным образом. Это особенно полезно при использовании пустой конструкции except для слепого перехвата всех исключений, чтобы выяснить, какое исключение было сгенерировано: import sys try: ... except: # sys.exc_info()[0:2] представляет класс и экземпляр исключения Если никакие исключения не обрабатывались, тогда такой вызов возвращает кортеж с тремя значениями None. В противном случае значениями будут (type, value, traceback): — type — класс обрабатываемого исключения; — value — экземпляр класса исключения, который был сгенерирован; — traceback — объект трассировки, который представляет стек вызовов в месте, где первоначально возникло исключение, и применяется модулем traceback для генерации сообщений об ошибках».

🧩 Что выведет код?
Anonymous voting

Код выводит: Поймано: RuntimeError Причина: ValueError D функции process_data() происходит попытка преобразовать строку "abc" в целое число, что вызывает ValueError. Затем это исключение перехватывается и перебрасывается как RuntimeError с помощью конструкции raise ... from e, которая сохраняет связь между исключениями. Внешний блок try-except ловит RuntimeError и выводит информацию о типе пойманного исключения и его причине через атрибут __cause__.

🪤 Что выведет код?
Anonymous voting