PYTHON_JOB_INTERVIEW Telegram 1193
🔑 Сложная задача для собеседования по Python

Условие:
Рассмотрим следующий фрагмент кода с использованием asyncio и декораторов:

import asyncio

def cache(func):
cache = {}

async def wrapper(*args):
if args not in cache:
cache[args] = await func(*args)
return cache[args]

return wrapper

@cache
async def expensive_operation(x):
await asyncio.sleep(1)
return x * 2

async def main():
tasks = [expensive_operation(i) for i in range(3)]
results = await asyncio.gather(*tasks)
print(results)

asyncio.run(main())


Вопрос:
Что будет выведено в консоль и почему?

Варианты ответов:
1) [0, 2, 4] — вывод корректный, кеширование работает
2) RuntimeError — возникает из-за неправильного использования await в декораторе
3) [0, 0, 0] — возникает ошибка кеширования
4) [2, 2, 2] — декоратор мешает асинхронности

Правильный ответ: 3)

Пояснение:
1️⃣ Проблема в декораторе: обычный
def-декоратор не совместим с асинхронными функциями. При вызове await func(args) внутри wrapper, декоратор не дожидается выполнения корутины, возвращая None.
2️⃣ Почему
[0, 0, 0]:
cache[args] сохраняет не результат, а корутину (<coroutine object...>).
— При повторном обращении к кешу возвращается эта корутина, но
await вне декоратора не применяется.
— Фактически, все задачи получают первую сохраненную корутину (для x=0), которая всегда возвращает 0.
3️⃣ Чтобы исправить код нужно использовать
functools.wraps и сделать декоратор асинхронным.

Пишите свои варианты решения в комментариях 🔽

@python_job_interview
7👍4🔥2👌1



tgoop.com/python_job_interview/1193
Create:
Last Update:

🔑 Сложная задача для собеседования по Python

Условие:
Рассмотрим следующий фрагмент кода с использованием asyncio и декораторов:


import asyncio

def cache(func):
cache = {}

async def wrapper(*args):
if args not in cache:
cache[args] = await func(*args)
return cache[args]

return wrapper

@cache
async def expensive_operation(x):
await asyncio.sleep(1)
return x * 2

async def main():
tasks = [expensive_operation(i) for i in range(3)]
results = await asyncio.gather(*tasks)
print(results)

asyncio.run(main())


Вопрос:
Что будет выведено в консоль и почему?

Варианты ответов:
1) [0, 2, 4] — вывод корректный, кеширование работает
2) RuntimeError — возникает из-за неправильного использования await в декораторе
3) [0, 0, 0] — возникает ошибка кеширования
4) [2, 2, 2] — декоратор мешает асинхронности

Правильный ответ: 3)

Пояснение:
1️⃣ Проблема в декораторе: обычный
def-декоратор не совместим с асинхронными функциями. При вызове await func(args) внутри wrapper, декоратор не дожидается выполнения корутины, возвращая None.
2️⃣ Почему
[0, 0, 0]:
cache[args] сохраняет не результат, а корутину (<coroutine object...>).
— При повторном обращении к кешу возвращается эта корутина, но
await вне декоратора не применяется.
— Фактически, все задачи получают первую сохраненную корутину (для x=0), которая всегда возвращает 0.
3️⃣ Чтобы исправить код нужно использовать
functools.wraps и сделать декоратор асинхронным.

Пишите свои варианты решения в комментариях 🔽

@python_job_interview

BY Python вопросы с собеседований


Share with your friend now:
tgoop.com/python_job_interview/1193

View MORE
Open in Telegram


Telegram News

Date: |

Hui said the time period and nature of some offences “overlapped” and thus their prison terms could be served concurrently. The judge ordered Ng to be jailed for a total of six years and six months. Matt Hussey, editorial director at NEAR Protocol also responded to this news with “#meIRL”. Just as you search “Bear Market Screaming” in Telegram, you will see a Pepe frog yelling as the group’s featured image. To view your bio, click the Menu icon and select “View channel info.” Content is editable within two days of publishing When choosing the right name for your Telegram channel, use the language of your target audience. The name must sum up the essence of your channel in 1-3 words. If you’re planning to expand your Telegram audience, it makes sense to incorporate keywords into your name.
from us


Telegram Python вопросы с собеседований
FROM American