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` и областью видимости
• Контроль состояния внутри декоратора
• Умение не "засорить" глобальные или общие области



@pythonl



group-telegram.com/pythonl/4808
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` и областью видимости
• Контроль состояния внутри декоратора
• Умение не "засорить" глобальные или общие области



@pythonl

BY Python/ django


Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260

Share with your friend now:
group-telegram.com/pythonl/4808

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

"He has to start being more proactive and to find a real solution to this situation, not stay in standby without interfering. It's a very irresponsible position from the owner of Telegram," she said. On Telegram’s website, it says that Pavel Durov “supports Telegram financially and ideologically while Nikolai (Duvov)’s input is technological.” Currently, the Telegram team is based in Dubai, having moved around from Berlin, London and Singapore after departing Russia. Meanwhile, the company which owns Telegram is registered in the British Virgin Islands. After fleeing Russia, the brothers founded Telegram as a way to communicate outside the Kremlin's orbit. They now run it from Dubai, and Pavel Durov says it has more than 500 million monthly active users. Oleksandra Matviichuk, a Kyiv-based lawyer and head of the Center for Civil Liberties, called Durov’s position "very weak," and urged concrete improvements. Despite Telegram's origins, its approach to users' security has privacy advocates worried.
from cn


Telegram Python/ django
FROM American