For cross-cutting concerns: add behavior without modifying functions, caching, timing, logging, validation wrappers.
Decorators wrap functions to add behavior before, after, or around the original.
def timing(func):
"""Decorator to time function execution."""
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
elapsed = time.time() - start
print(f"{func.__name__} took {elapsed:.3f}s")
return result
return wrapper
@timing
def slow_function():
time.sleep(1)
return "done"
# Equivalent to: slow_function = timing(slow_function)
# Memoization decorator (ngrams.py)
def memo(f):
"""Memoize function f."""
table = {}
def fmemo(*args):
if args not in table:
table[args] = f(*args)
return table[args]
fmemo.memo = table # Expose cache
return fmemo
@memo
def segment(text):
"""Optimal word segmentation."""
if not text:
return []
candidates = ([first] + segment(rest)
for first, rest in splits(text))
return max(candidates, key=word_prob)
# Using functools for cleaner decorators
from functools import cache, lru_cache, wraps
@cache # Built-in memoization
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
@lru_cache(maxsize=1000) # Limited cache size
def expensive_lookup(key):
...
# Reusable decorator with parameter
cache = lru_cache(None) # Alias for unlimited cache
@cache
def expressions(numbers):
...
@cache
def segment(text):
...
@functools.wraps@lru_cache(n) returns decoratornpx skills add jimmc414/apply-decorator-wrap下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer