Telegram Group & Telegram Channel
🐍 Задача уровня Pro: декоратор с внутренним состоянием

📌 Задача:
Напиши декоратор call_limiter, который:

- ограничивает функцию f максимум до n вызовов
- после n вызова функция больше не вызывается, а возвращает строку "LIMIT REACHED"

Пример использования:


@call_limiter(3)
def greet(name):
return f"Hello, {name}!"

print(greet("Alice")) # Hello, Alice!
print(greet("Bob")) # Hello, Bob!
print(greet("Charlie"))# Hello, Charlie!
print(greet("Dave")) # LIMIT REACHED


🎯 Подвохи:
- Нужно создать декоратор-фабрику с аргументом n
- Внутри должна быть функция с nonlocal, чтобы отслеживать число вызовов
- Часто путаются и используют mutable default, что ломает независимость между декорируемыми функциями

Решение:

```python
def call_limiter(n):
def decorator(func):
count = 0
def wrapper(*args, **kwargs):
nonlocal count
if count >= n:
return "LIMIT REACHED"
count += 1
return func(*args, **kwargs)
return wrapper
return decorator
```

🧪 **Проверка:**

```python
@call_limiter(2)
def ping():
return "pong"

print(ping()) # pong
print(ping()) # pong
print(ping()) # LIMIT REACHED

@call_limiter(1)
def echo(msg):
return msg

print(echo("hi")) # hi
print(echo("bye")) # LIMIT REACHED
```

🧠 **Что проверяет задача:**

• Понимание функций высшего порядка
• Работа с `nonlocal` и областью видимости
• Контроль состояния внутри декоратора
• Умение не "засорить" глобальные или общие области





@Python_Community_ru



tg-me.com/Python_Community_ru/2604
Create:
Last Update:

🐍 Задача уровня Pro: декоратор с внутренним состоянием

📌 Задача:
Напиши декоратор call_limiter, который:

- ограничивает функцию f максимум до n вызовов
- после n вызова функция больше не вызывается, а возвращает строку "LIMIT REACHED"

Пример использования:


@call_limiter(3)
def greet(name):
return f"Hello, {name}!"

print(greet("Alice")) # Hello, Alice!
print(greet("Bob")) # Hello, Bob!
print(greet("Charlie"))# Hello, Charlie!
print(greet("Dave")) # LIMIT REACHED


🎯 Подвохи:
- Нужно создать декоратор-фабрику с аргументом n
- Внутри должна быть функция с nonlocal, чтобы отслеживать число вызовов
- Часто путаются и используют mutable default, что ломает независимость между декорируемыми функциями

Решение:

```python
def call_limiter(n):
def decorator(func):
count = 0
def wrapper(*args, **kwargs):
nonlocal count
if count >= n:
return "LIMIT REACHED"
count += 1
return func(*args, **kwargs)
return wrapper
return decorator
```

🧪 **Проверка:**

```python
@call_limiter(2)
def ping():
return "pong"

print(ping()) # pong
print(ping()) # pong
print(ping()) # LIMIT REACHED

@call_limiter(1)
def echo(msg):
return msg

print(echo("hi")) # hi
print(echo("bye")) # LIMIT REACHED
```

🧠 **Что проверяет задача:**

• Понимание функций высшего порядка
• Работа с `nonlocal` и областью видимости
• Контроль состояния внутри декоратора
• Умение не "засорить" глобальные или общие области





@Python_Community_ru

BY Python Community


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/Python_Community_ru/2604

View MORE
Open in Telegram


Python Community Telegram | DID YOU KNOW?

Date: |

Should I buy bitcoin?

“To the extent it is used I fear it’s often for illicit finance. It’s an extremely inefficient way of conducting transactions, and the amount of energy that’s consumed in processing those transactions is staggering,” the former Fed chairwoman said. Yellen’s comments have been cited as a reason for bitcoin’s recent losses. However, Yellen’s assessment of bitcoin as a inefficient medium of exchange is an important point and one that has already been raised in the past by bitcoin bulls. Using a volatile asset in exchange for goods and services makes little sense if the asset can tumble 10% in a day, or surge 80% over the course of a two months as bitcoin has done in 2021, critics argue. To put a finer point on it, over the past 12 months bitcoin has registered 8 corrections, defined as a decline from a recent peak of at least 10% but not more than 20%, and two bear markets, which are defined as falls of 20% or more, according to Dow Jones Market Data.

Telegram is riding high, adding tens of million of users this year. Now the bill is coming due.Telegram is one of the few significant social-media challengers to Facebook Inc., FB -1.90% on a trajectory toward one billion users active each month by the end of 2022, up from roughly 550 million today.

Python Community from us


Telegram Python Community
FROM USA