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

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
🧩 Что выведет код?
Anonymous Quiz
59%
1
13%
Spam.count
10%
None
18%
Error
👍2👎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'
👍2👎1
🧩 Что выведет код?
Anonymous Quiz
10%
1
69%
2
14%
3
7%
Error
Эта задача демонстрирует ключевую особенность итераторов в Python - их способность
сохранять внутреннее состояние между вызовами next(), даже когда происходят исключения.

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

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

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

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

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

try:
...выполнить код...
except IndexError:
...обработать исключение...
else:
...исключения не возникали...»
👍2🔥1