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

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
🧩 Что выведет код?
Anonymous Quiz
12%
1
19%
2
64%
3
5%
Error
👍1👎1
Перемещение счетчика в общую глобальную область видимости, чтобы сделать возможным его изменение, также означает, что он будет разделяться всеми внутренними функциями. В отличие от атрибутов экземпляров классов глобальные счетчики относятся ко всей программе, а не к каждой функции — счетчик инкрементируется для вызова любой отслеживаемой функции.

Это демонстрирует разницу между использованием глобальных переменных и атрибутов экземпляров классов в декораторах. Глобальная переменная создает общий счетчик для всех декорированных функций, а не отдельный счетчик для каждой функции.

Глобальная переменная 𝚌𝚊𝚕𝚕𝚜 является общей для всех декорированных функций, поэтому счетчик инкрементируется при каждом вызове любой из декорированных функций.

Последовательность выполнения:

🔘 𝚜𝚙𝚊𝚖(𝟷, 𝟸, 𝟹) − 𝚌𝚊𝚕𝚕𝚜 становится 𝟷, выводится «𝚌𝚊𝚕𝚕 𝟷 𝚝𝚘 𝚜𝚙𝚊𝚖», затем 𝟼
🔘 𝚜𝚙𝚊𝚖(𝚊=𝟺, 𝚋=𝟻, 𝚌=𝟼) − 𝚌𝚊𝚕𝚕𝚜 становится 𝟸, выводится «𝚌𝚊𝚕𝚕 𝟸 𝚝𝚘 𝚜𝚙𝚊𝚖», затем 𝟷𝟻
🔘 𝚎𝚐𝚐𝚜(𝟸, 𝟷𝟼) − 𝚌𝚊𝚕𝚕𝚜 становится 𝟹, выводится «𝚌𝚊𝚕𝚕 𝟹 𝚝𝚘 𝚎𝚐𝚐𝚜», затем 𝟼𝟻𝟻𝟹𝟼
🔘 𝚎𝚐𝚐𝚜(𝟺, 𝚢=𝟺) − 𝚌𝚊𝚕𝚕𝚜 становится 𝟺, выводится «𝚌𝚊𝚕𝚕 𝟺 𝚝𝚘 𝚎𝚐𝚐𝚜», затем 𝟸𝟻𝟼
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1👎1
🪤 Что выведет код?
Anonymous Quiz
28%
1
59%
2
4%
3
9%
Error
👍1👎1
Марк Лутц «Изучаем Python», глава 𝟹𝟿:

«Корень проблемы здесь кроется в аргументе 𝚜𝚎𝚕𝚏 метода __𝚌𝚊𝚕𝚕__ класса 𝚝𝚛𝚊𝚌𝚎𝚛 — он является экземпляром 𝚝𝚛𝚊𝚌𝚎𝚛 или же экземпляром 𝙿𝚎𝚛𝚜𝚘𝚗? На самом деле нам необходимы в коде оба экземпляра: экземпляр 𝚝𝚛𝚊𝚌𝚎𝚛 для состояния декоратора и экземпляр 𝙿𝚎𝚛𝚜𝚘𝚗 для перенаправления на исходный метод. В действительности 𝚜𝚎𝚕𝚏 обязан быть объектом 𝚝𝚛𝚊𝚌𝚎𝚛, чтобы предоставить доступ к информации состояния 𝚝𝚛𝚊𝚌𝚎𝚛 (его атрибутам 𝚌𝚊𝚕𝚕𝚜 и 𝚏𝚞𝚗𝚌); это справедливо для декорирования как простой функции, так и метода».

«К сожалению, когда имя декорированного метода повторно привязывается к объекту экземпляра класса с помощью __𝚌𝚊𝚕𝚕__, интерпретатор 𝙿𝚢𝚝𝚑𝚘𝚗 передает в 𝚜𝚎𝚕𝚏 только экземпляр 𝚝𝚛𝚊𝚌𝚎𝚛; он вообще не передает экземпляр 𝙿𝚎𝚛𝚜𝚘𝚗 в списке аргументов. Кроме того, поскольку экземпляру 𝚝𝚛𝚊𝚌𝚎𝚛 ничего не известно об экземпляре 𝙿𝚎𝚛𝚜𝚘𝚗, который мы пытаемся обработать посредством вызовов методов, создать связанный метод с экземпляром не удастся, следовательно, нет способа для корректного координирования вызова».

«В итоге предыдущий код передает декорированному методу слишком мало аргументов, что приводит к ошибке».
👍2👎1👻1