sickn33/agentic-awesome-skills/python

Claude Code and agent skill by sickn33/agentic-awesome-skills

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Language-specific super-code guidelines for python.

Install

npx vskill@latest install sickn33/agentic-awesome-skills/python

SKILL.md

Python: Idiomatic Efficiency Reference

Apply only within the requested scope and current project conventions. Preserve behavior, ownership, error handling, accessibility and security; examples are independent fragments, not equivalent rewrites in every context. Verify language/library versions and run relevant checks. Required tests and user-facing progress/results take precedence over brevity rules. Do not install dependencies or delete files merely to follow these examples.

When to Use

  • Use this skill when the task matches this description: Language-specific super-code guidelines for python.

Table of Contents

  1. Comprehensions & Generators
  2. Unpacking & Destructuring
  3. Built-ins & stdlib
  4. Functions & Defaults
  5. Classes & Dataclasses
  6. Error Handling
  7. Type Hints
  8. Anti-patterns specific to Python

1. Comprehensions & Generators {#comprehensions}

python
# ❌ Imperative accumulation
result = []
for item in items:
if item.active:
result.append(item.name.upper())
# ✅
result = [item.name.upper() for item in items if item.active]
python
# ❌ Dict built in a loop
d = {}
for k, v in pairs:
d[k] = v
# ✅
d = dict(pairs)
# or
d = {k: v for k, v in pairs}
python
# ❌ Generator converted to list unnecessarily
total = sum(list(x * 2 for x in nums))
# ✅ — generator expression works directly in sum()
total = sum(x * 2 for x in nums)

Use generator expressions (not list comprehensions) when the result is consumed once and not stored.


2. Unpacking & Destructuring {#unpacking}

python
# ❌ Index access
first = items[0]
rest = items[1:]
# ✅
first, *rest = items
python
# ❌ Temporary variable for swap
tmp = a
a = b
b = tmp
# ✅
a, b = b, a
python
# ❌ items() with separate indexing
for i in range(len(items)):
print(i, items[i])
# ✅
for i, item in enumerate(items):
print(i, item)
python
# ❌ zip with separate index
for i in range(len(a)):
process(a[i], b[i])
# ✅
for x, y in zip(a, b, strict=True): # Python 3.10+; fail if lengths differ
process(x, y)

3. Built-ins & stdlib {#builtins}

python
# ❌ Manual max search
max_val = items[0]
for item in items[1:]:
if item > max_val:
max_val = item
# ✅
max_val = max(items)
python
# ❌ Manual grouping
from collections import defaultdict
groups = defaultdict(list)
for item in items:
groups[item.category].append(item)
# ✅ — same thing, just be explicit about defaultdict; it IS the right tool
# (this example is already correct — don't replace defaultdict with a loop)
python
# ❌ Manual sentinel for dict default
if key in d:
val = d[key]
else:
val = default
# ✅
val = d.get(key, default)
python
# ❌ Rolling your own counter
counts = {}
for item in items:
counts[item] = counts.get(item, 0) + 1
# ✅
from collections import Counter
counts = Counter(items)

Use `itertools` (chain, islice, groupby, product) before writing nested loops for combinatorial or streaming logic.


4. Functions & Defaults {#functions}

python
# ❌ Mutable default argument (bug, not just style)
def append_to(item, lst=[]):
lst.append(item)
return lst
# ✅
def append_to(item, lst=None):
if lst is None:
lst = []
lst.append(item)
return lst
python
# ❌ Positional args for everything when keyword clarity helps
create_user("Alice", True, False, 30)
# ✅ — use keyword args at call site for boolean/ambiguous params
create_user("Alice", is_admin=True, is_active=False, age=30)
python
# ❌ Long function doing multiple things
def process_and_save(data):
# 40 lines of transform
# 20 lines of DB write
...
# ✅ — split only if each part is reused OR independently testable
def _transform(data): ...
def _save(record): ...
def process_and_save(data): _save(_transform(data))

5. Classes & Dataclasses {#classes}

python
# ❌ Manual __init__ for data holders
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
# ✅
from dataclasses import dataclass
@dataclass
class Point:
x: float
y: float
python
# ❌ Class just to hold a namespace of functions
class MathUtils:
@staticmethod
def add(a, b): return a + b
# ✅ — module-level functions; classes for state + behavior
def add(a, b): return a + b
python
# ❌ __repr__ written manually when dataclass gives it free
# (see above — use @dataclass)

Use `@dataclass(frozen=True)` for immutable value objects. Use `NamedTuple` when you need tuple unpacking.


6. Error Handling {#errors}

python
# ❌ Bare except
try:
risky()
except:
pass
# ✅ — catch the specific exception; don't swallow silently
try:
risky()
except ValueError as e:
logger.warning("Invalid value: %s", e)
python
# ❌ LBYL (look before you leap) when EAFP is cleaner
if os.path.exists(path):
with open(path) as f:
data = f.read()
# ✅ (EAFP)
try:
with open(path) as f:
data = f.read()
except FileNotFoundError:
data = None
python
# ❌ Re-raising with raise e (adds a re-raise frame)
except Exception as e:
raise e
# ✅
except Exception:
raise # bare raise preserves original traceback

7. Type Hints {#types}

python
# ❌ Overly verbose Union syntax (Python <3.10 style in new code)
from typing import Optional, Union
def f(x: Optional[int]) -> Union[str, None]: ...
# ✅ (Python 3.10+)
def f(x: int | None) -> str | None: ...
python
# ❌ Any where a TypeVar or Protocol would be informative
from typing import Any
def first(lst: list[Any]) -> Any: ...
# ✅
from typing import TypeVar
T = TypeVar("T")
def first(lst: list[T]) -> T: ...

Don't add type hints to every local variable — annotate function signatures and class fields; leave obvious locals inferred.


8. Anti-patterns specific to Python {#antipatterns}

Anti-patternPreferred
len(lst) == 0not lst
if x == True:if x:
if x == None:if x is None:
range(len(lst)) for iterationenumerate(lst)
String concatenation in a loop"".join(parts)
import *explicit imports
Catching Exception to log and re-raisebare raise or let it propagate
print() for debug outputlogging.debug()
os.path.join (Python 3.4+)pathlib.Path / "subpath"
Manual __eq__ + __hash__ on value objects@dataclass(eq=True, frozen=True)

Limitations

  • These are language-specific guidelines and do not cover overall architectural decisions.
  • Over-compression might reduce readability; apply judgement.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
47,054
Repository forks
6,853
7-day trend score
54

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/sickn33/agentic-awesome-skills/python/badge)](https://verified-skill.com/skills/sickn33/agentic-awesome-skills/python)

Something wrong with this skill or its page? Tell us.