提供符合 Pythonic 风格、PEP 8 规范与类型标注的高质量 Python 开发指导。
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "python-patterns" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/docs/tr/skills/python-patterns/SKILL.md 2. 保存为 ~/.claude/skills/python-patterns/SKILL.md 3. 装好后重载技能,告诉我可以用了
请将下面这段 Python 代码重构为更符合 Pythonic 风格的版本,遵循 PEP 8,补充合适的 type hints,并说明你做了哪些可维护性优化: [粘贴代码]
输出重构后的代码、类型标注,以及按要点说明的优化建议。
请帮我设计一个可维护的 Python 模块,用于处理 CSV 数据清洗。请给出推荐的目录结构、函数划分、命名规范、类型标注建议,以及需要避免的反模式。
给出模块结构方案、示例接口设计和可维护性最佳实践清单。
下面是一段待评审的 Python 代码。请从 Pythonic 写法、PEP 8、异常处理、性能和可测试性几个方面给出代码评审意见,并提供修改示例: [粘贴代码]
结构化的评审意见列表,并附带针对问题的修改代码示例。
Sağlam, verimli ve bakımı kolay uygulamalar oluşturmak için idiomatic Python desenleri ve en iyi uygulamalar.
Python okunabilirliği önceliklendirir. Kod açık ve anlaşılması kolay olmalıdır.
# İyi: Açık ve okunabilir
def get_active_users(users: list[User]) -> list[User]:
"""Sağlanan listeden sadece aktif kullanıcıları döndür."""
return [user for user in users if user.is_active]
# Kötü: Zeki ama kafa karıştırıcı
def get_active_users(u):
return [x for x in u if x.a]
Sihirden kaçının; kodunuzun ne yaptığı konusunda açık olun.
# İyi: Açık yapılandırma
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# Kötü: Gizli yan etkiler
import some_module
some_module.setup() # Bu ne yapıyor?
Python, koşulları kontrol etmek yerine exception handling'i tercih eder.
# İyi: EAFP stili
def get_value(dictionary: dict, key: str, default_value: Any = None) -> Any:
try:
return dictionary[key]
except KeyError:
return default_value
# Kötü: LBYL (Atlamadan Önce Bak) stili
def get_value(dictionary: dict, key: str, default_value: Any = None) -> Any:
if key in dictionary:
return dictionary[key]
else:
return default_value
from typing import Optional, List, Dict, Any
def process_user(
user_id: str,
data: Dict[str, Any],
active: bool = True
) -> Optional[User]:
"""Bir kullanıcıyı işle ve güncellenmiş User'ı veya None döndür."""
if not active:
return None
return User(user_id, data)
# Python 3.9+ - Built-in tipleri kullan
def process_items(items: list[str]) -> dict[str, int]:
return {item: len(item) for item in items}
# Python 3.8 ve öncesi - typing modülünü kullan
from typing import List, Dict
def process_items(items: List[str]) -> Dict[str, int]:
return {item: len(item) for item in items}
from typing import TypeVar, Union
# Karmaşık tipler için type alias
JSON = Union[dict[str, Any], list[Any], str, int, float, bool, None]
def parse_json(data: str) -> JSON:
return json.loads(data)
# Generic tipler
T = TypeVar('T')
def first(items: list[T]) -> T | None:
"""İlk öğeyi döndür veya liste boşsa None döndür."""
return items[0] if items else None
from typing import Protocol
class Renderable(Protocol):
def render(self) -> str:
"""Nesneyi string'e render et."""
def render_all(items: list[Renderable]) -> str:
"""Renderable protocol'ünü implement eden tüm öğeleri render et."""
return "\n".join(item.render() for item in items)
# İyi: Spesifik exception'ları yakala
def load_config(path: str) -> Config:
try:
with open(path) as f:
return Config.from_json(f.read())
except FileNotFoundError as e:
raise ConfigError(f"Config file not found: {path}") from e
except json.JSONDecodeError as e:
raise ConfigError(f"Invalid JSON in config: {path}") from e
# Kötü: Bare except
def load_config(path: str) -> Config:
try:
with open(path) as f:
return Config.from_json(f.read())
except:
return None # Sessiz hata!
def process_data(data: str) -> Result:
try:
parsed = json.loads(data)
except json.JSONDecodeError as e:
…
提供地道 Go 设计模式与最佳实践,帮助编写健壮高效且易维护的应用