Ghostly Python
👩💻 Викторина: что выведет код?
from collections import OrderedDict
call_depth = 0
def trace(func):
def wrapper(*args, **kwargs):
global call_depth
call_depth += 1
indent = " " * call_depth
print(f"{indent}➡ {func.__name__}({', '.join(map(str, args))})")
result = func(*args, **kwargs)
print(f"{indent} {result}")
call_depth -= 1
return result
return wrapper
def lru_cache(maxsize=2):
cache = OrderedDict()
def decorator(func):
def wrapper(*args, **kwargs):
key = (args, tuple(sorted(kwargs.items())))
if key in cache:
cache.move_to_end(key)
return f"[CACHE] {cache[key]}"
result = func(*args, **kwargs)
cache[key] = result
if len(cache) > maxsize:
cache.popitem(last=False)
return f"[NEW] {result}"
return wrapper
return decorator
@lru_cache(maxsize=2)
@trace
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(4))
print(fibonacci(3))
print(fibonacci(5))
print(f"max depth: {call_depth}")
🐍 Ghostly Python | #викторина
11 · 2.5K ·