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

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
Марк Лутц, «Изучаем Python», том 2, гл. 32:

«Но обратите внимание, что происходит, когда мы изменяем атрибут класса динамически за пределами оператора class: в итоге также изменяется атрибут в каждом объекте, унаследованном от класса. Кроме того, новые экземпляры, созданные из класса в течение текущего сеанса или запуска программы, также получают динамически установленное значение
независимо от того, что указано в исходном коде класса.

...

Это полезная возможность или опасная ловушка? Судить вам. ... вы можете сделать работу за счет изменения атрибутов класса даже без создания одиночного экземпляра — методика, с помощью которой удастся эмулировать использование “записей” или “структур” в других языках. ...

class X: pass # Создать несколько пространств имен атрибутов
class Y: pass

X.а = 1 # Использовать атрибуты классов как переменные
X.b = 2 # Какие-либо экземпляры отсутствуют
X.с = 3
Y.a = X.а + X.b + X.с

for X.i in range (Y.a): print(X.i)

Код выведет:
1
2
3
4
5

Здесь классы X и Y работают подобно модулям «без файлов» — пространствам имен для хранения переменных, которые не должны конфликтовать. Это вполне законный трюк в программировании на Python, но он менее уместен, когда применяется к классам, реализованным другими; вы не всегда можете быть уверены в том, что изменяемые атрибуты отдельного класса не являются критически важными для его внутреннего поведения».
👍4👎2🔥1🤯1
🧩 Что выведет код?
Anonymous Quiz
57%
1
13%
Spam.count
11%
None
19%
Error
👍2👎1🌚1
Марк Лутц, «Изучаем Python», том 2, гл. 32:

«При продумывании смысла имен в коде, основанном на классах, полезно помнить о том, что классы в точности как функции вводят локальные области видимости, а методы являются просто более вложенными функциями. В следующем примере функция generate возвращает экземпляр вложенного класса Spam. Внутри своего кода имя класса Spam присваивается в локальной области видимости функции generate и потому оно доступно любой вложенной функции, включая код в method; это соответствует букве Е в правиле LEGB:

def generate():
class Spam: # Spam - имя в локальной области видимости generate
count = 1
def method(self):
print(Spam.count) # Согласно правилу LEGB (E) доступно в области видимости generate
return Spam()

generate().method()

... локальные области видимости всех операторов def объемлющих функций автоматически видны вложенным def».
👍3👎1
🧩 Будет ли создан lumberjack.txt?
Anonymous Quiz
70%
Да
30%
Нет
👍2👎1
Из документации Python:

«Оператор with используется для обертывания выполнения блока методами, определенными менеджером контекста (см. раздел Менеджеры контекста оператора With)».

Оператор with / as запускает логику управления контекстом объекта, чтобы гарантировать
выполнение действий при завершении безотносительно к любым исключениям
в его вложенном блоке:

with open('lumberjack.txt', 'w') as file:
file.write('Лиственница!')
# Попытка обратиться к несуществующему атрибуту
file.nonexistent_method() # AttributeError

Файл все равно будет создан, хоть программа и выпадет в исключение:

AttributeError: '_io.TextIOWrapper' object has no attribute 'nonexistent_method'
👍21👎1
🧩 Что выведет код?
Anonymous Quiz
9%
1
69%
2
13%
3
8%
Error
👍1👎1
Эта задача демонстрирует ключевую особенность итераторов в Python - их способность
сохранять внутреннее состояние между вызовами next(), даже когда происходят исключения.

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

«При вызове функции-генератора возвращается итератор, известный как генератор. Этот генератор затем управляет выполнением функции-генератора (counter). Выполнение начинается при вызове одного из методов генератора. В этот момент выполнение переходит к первому выражению yield, где снова приостанавливается, возвращая значение yield_list вызывающей стороне генератора или None, если yield_list опущен. Под приостановкой мы подразумеваем сохранение всего локального состояния, включая текущие привязки локальных переменных, указатель инструкций, внутренний стек вычислений и состояние обработки любых исключений».
👍3👎1
🧩 Выведется ли в CLI "Частное: 5.0"?
Anonymous Quiz
83%
Да
17%
Нет
👍1👎1
Марк Лутц, «Изучаем Python», том 2, гл. 32:

«Целевое назначение конструкции else не всегда сразу очевидно для новичков в Python. Однако без нее отсутствует прямой способ сообщить (без установки и проверки булевских флагов), продолжил поток управления выполнение после оператора try из-за того, что никаких исключений не возникало или же исключение произошло и обработано. В любом случае мы оказываемся после оператора try:

try:
...выполнить код...
except IndexError:
...обработать исключение...
# Мы сюда попали из-за того, что try потерпел неудачу или же прошел?

Во многом подобно тому, как конструкции else в циклах придают причине выхода
большую очевидность, конструкция else предоставляет в операторе try синтаксис,
который делает то, что произошло, ясным и недвусмысленным:

try:
...выполнить код...
except IndexError:
...обработать исключение...
else:
...исключения не возникали...»
👍3🔥1
🪤 Что выведет код?
Anonymous Quiz
18%
1
54%
2
21%
3
7%
Error
👍7👎1
Пасхавер Б. Pandas в действии, Часть I, глава 2:

«Pandas складывает значения на позициях с метками B и C и возвращает значения NaN для оставшихся индексов (A, D и E). Любая арифметическая операция с участием значения NaN
возвращает NaN».
👍1👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Взгляните на IT-мир по-новому

12 сентября. Топовые IT-компании. Закулисье разработок и доклады экспертов. Ещё не знаете, о чём речь? Сейчас расскажем!

Приглашаем вас на big tech night. Событие придумали в Яндексе и организовали вместе со Сбером, X5, Т-Банком и Lamoda. Впервые компании одновременно откроют двери офисов ночью и покажут IT-специалистам, где рождаются технологии.

▶️ В московских офисах организаторов вы:
• послушаете доклады топовых экспертов,
• обсудите новейшие разработки,
• познакомитесь с крутыми профессионалами,
• и просто повеселитесь.

▶️ Если не сможете прийти офлайн, big tech night организует онлайн-студию. Зрители смогут:
• посмотреть выступления спикеров от каждой компании,
• послушать дебаты о технологиях,
• поучаствовать в интерактивах,
• получить записи докладов после мероприятия.

Регистрируйтесь на сайте и присоединяйтесь к нам 12 сентября с 18:00 до 00:00!

Подписывайтесь:
big tech night

Реклама. Рекламодатель: ООО "Яндекс" ИНН 7736207543

Это #партнёрский пост
🔥3🤬1
🧩 Что выведет код?
Anonymous Quiz
34%
spam
42%
('spam',)
6%
X.args
18%
None
👍2👎1
Из документации Python:

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

«Все встроенные исключения наследуются от Exception. Когда исключение вызывается,
оно может иметь связанное значение, также известное как аргумент исключения».

«Exception.args - Кортеж аргументов, переданных конструктору исключения».

В нашем случае:
1. MyExc('spam') создает экземпляр исключения с аргументом 'spam'
2. X.args содержит кортеж всех аргументов конструктора
3. Поэтому X.args = ('spam',) - кортеж с одним элементом
👍1👎1