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: |

Your posting frequency depends on the topic of your channel. If you have a news channel, it’s OK to publish new content every day (or even every hour). For other industries, stick with 2-3 large posts a week. Judge Hui described Ng as inciting others to “commit a massacre” with three posts teaching people to make “toxic chlorine gas bombs,” target police stations, police quarters and the city’s metro stations. This offence was “rather serious,” the court said. How to create a business channel on Telegram? (Tutorial) Among the requests, the Brazilian electoral Court wanted to know if they could obtain data on the origins of malicious content posted on the platform. According to the TSE, this would enable the authorities to track false content and identify the user responsible for publishing it in the first place. The visual aspect of channels is very critical. In fact, design is the first thing that a potential subscriber pays attention to, even though unconsciously.
from us


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