📖 Что делает этот код?
```python
from contextlib import contextmanager
import time
@contextmanager
def timed(name):
start = time.perf_counter()
try:
yield
finally:
elapsed = time.perf_counter() - start
print(f"{name}: {elapsed*1000:.1f}ms")
with timed("db query"):
rows = db.execute("SELECT * FROM users")
```
Что делает, как работает yield в decorator'е, чем отличается от class-based context manager.