Eksiksiz Python Geliştirici Rehberi

1 Mart 2026 · netologist · 16 dakika, 3289 kelime ·

Dil Hakimiyeti, Best Practice’ler, Tasarım Kalıpları, Ekosistem & AI/Agentic Araçları

Profesyonel Python geliştiricileri için referans kalitesinde, derinlemesine bir rehber — dilin çekirdek iç işleyişinden modern AI agent yığınına kadar.


İçindekiler

  1. Dilin Temelleri ve İç İşleyişi
  2. Modern Python Özellikleri (3.10 → 3.13+)
  3. Tip Sistemi (Typing) Derinlemesine
  4. Best Practice’ler ve Kod Kalitesi
  5. Python’da Tasarım Kalıpları
  6. Eşzamanlılık ve Paralellik
  7. Test Ekosistemi
  8. Paketleme, Ortamlar ve Araçlar
  9. Web Framework’leri ve API’ler
  10. Veri Mühendisliği ve Bilimsel Yığın
  11. Veritabanları ve ORM’ler
  12. CLI, Loglama, Gözlemlenebilirlik
  13. DevOps, CI/CD ve Deployment
  14. AI / Agentic Mühendislik Yığını
  15. Önerilen Proje Yapısı
  16. Bilinmesi Gereken Kütüphaneler — Özet Tablo

1. Dilin Temelleri ve İç İşleyişi

1.1 Data Model (Veri Modeli)

Python’ın “sihirli” (dunder/çift alt çizgili) metotları, nesnelerin built-in operasyonlarla nasıl davranacağını belirler. Data model’e hakim olmak, idiomatic Python ile “Java/C++ gibi yazılmış Python” arasındaki farkı yaratır.

class Vector:
    __slots__ = ("x", "y")  # bellek verimli, __dict__'i devre dışı bırakır

    def __init__(self, x: float, y: float):
        self.x, self.y = x, y

    def __repr__(self) -> str:
        return f"Vector({self.x!r}, {self.y!r})"

    def __add__(self, other: "Vector") -> "Vector":
        return Vector(self.x + other.x, self.y + other.y)

    def __eq__(self, other: object) -> bool:
        return isinstance(other, Vector) and (self.x, self.y) == (other.x, other.y)

    def __hash__(self) -> int:
        return hash((self.x, self.y))

    def __iter__(self):
        yield self.x
        yield self.y

Bilinmesi gereken dunder grupları:

1.2 Her Şey Bir Nesnedir, İsimler Referanstır

Değişkenler, nesnelere bağlanan etiketlerdir; kutu/konteyner değildir. Bu durum, mutable default argument hatalarını, shallow vs. deep copy semantiğini (copy.copy vs copy.deepcopy) ve is‘in kimlik (identity), ==‘in ise eşitlik kontrolü yaptığını açıklar.

# Klasik tuzak
def append_item(item, bucket=[]):   # KÖTÜ: mutable default tüm çağrılar arasında paylaşılır
    bucket.append(item)
    return bucket

def append_item_fixed(item, bucket=None):
    bucket = bucket if bucket is not None else []
    bucket.append(item)
    return bucket

1.3 Iterator’lar, Generator’lar ve Coroutine’ler

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

# Generator expression — lazy, bellek verimli
squares = (x * x for x in range(1_000_000))

# yield from bir alt-generator'a delege eder
def chain(*iterables):
    for it in iterables:
        yield from it

Generator’lar; asyncio coroutine’lerinin, itertools pipeline’larının ve büyük veri setlerinin bellek-güvenli akışının (streaming) temelini oluşturur.

1.4 Decorator’lar ve Closure’lar

import functools
import time

def retry(times: int = 3, delay: float = 1.0):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            last_exc = None
            for attempt in range(times):
                try:
                    return func(*args, **kwargs)
                except Exception as exc:
                    last_exc = exc
                    time.sleep(delay)
            raise last_exc
        return wrapper
    return decorator

@retry(times=5, delay=0.5)
def flaky_call():
    ...

__name__, __doc__ ve signature introspection’ı korumak için her zaman functools.wraps kullanın.

1.5 Context Manager’lar

from contextlib import contextmanager

@contextmanager
def timer(label: str):
    start = time.perf_counter()
    try:
        yield
    finally:
        print(f"{label}: {time.perf_counter() - start:.4f}s")

with timer("db-sorgusu"):
    run_query()

1.6 Metaclass’lar ve __init_subclass__

Metaclass’lar class oluşturma sürecini kontrol eder; __init_subclass__ ise plugin/registry kalıpları için daha hafif, modern bir alternatiftir:

class PluginBase:
    registry: dict[str, type] = {}

    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        PluginBase.registry[cls.__name__] = cls

1.7 GIL ve Bellek Modeli


2. Modern Python Özellikleri (3.10 → 3.13+)

SürümÖne Çıkan Özellikler
3.10Structural pattern matching (match/case), daha iyi hata mesajları, X | Y union syntax’ı
3.11Ciddi interpreter hız artışları (Faster CPython projesi), exception group’lar (except*), Self tipi, tomllib
3.12Yeni tip parametre syntax’ı (class Stack[T]), f-string parser’ın yenilenmesi, buffer protokolü iyileştirmeleri
3.13Free-threaded (no-GIL) deneysel build, JIT (deneysel), gelişmiş REPL, daha iyi hata traceback’leri

2.1 Structural Pattern Matching

def handle_event(event: dict):
    match event:
        case {"type": "click", "x": x, "y": y}:
            print(f"Tıklama konumu: ({x}, {y})")
        case {"type": "key", "key": ("Enter" | "Return")}:
            submit_form()
        case {"type": str() as t}:
            print(f"Bilinmeyen event tipi: {t}")
        case _:
            raise ValueError("Hatalı biçimlendirilmiş event")

2.2 Yeni Generic Syntax’ı (3.12+)

class Stack[T]:
    def __init__(self) -> None:
        self._items: list[T] = []

    def push(self, item: T) -> None:
        self._items.append(item)

    def pop(self) -> T:
        return self._items.pop()

def first[T](items: list[T]) -> T:
    return items[0]

2.3 Exception Group’lar

try:
    async with asyncio.TaskGroup() as tg:
        tg.create_task(fetch("a"))
        tg.create_task(fetch("b"))
except* ValueError as eg:
    for e in eg.exceptions:
        log.error(e)

3. Tip Sistemi (Typing) Derinlemesine

Tip ipuçları (type hints) opsiyoneldir ama profesyonel kod tabanlarında olmazsa olmazdır — IDE desteği, statik analiz ve kendi kendini dokümante eden API’ler sağlar.

from typing import TypedDict, Protocol, Literal, overload
from collections.abc import Sequence, Callable

class UserDict(TypedDict):
    id: int
    name: str
    role: Literal["admin", "member", "guest"]

class Comparable(Protocol):
    def __lt__(self, other) -> bool: ...

def sort_items[T: Comparable](items: Sequence[T]) -> list[T]:
    return sorted(items)

@overload
def parse(value: str) -> int: ...
@overload
def parse(value: bytes) -> int: ...
def parse(value):
    return int(value)

Statik tip kontrolcüleri: mypy (referans implementasyon), pyright/pylance (hızlı, VS Code tarafından kullanılır), pyre (Meta). Maksimum güvenlik için CI’da mypy --strict veya pyright --strict kullanın.

Runtime doğrulama: Statik tipler runtime’da silinir (erased) — güvenilmeyen input’ları parse ederken veya API sınırlarında runtime zorlaması gerektiğinde Pydantic veya typeguard/beartype kullanın.


4. Best Practice’ler ve Kod Kalitesi

4.1 Stil ve Yapı

4.2 Hata Yönetimi

class DomainError(Exception):
    """Tüm domain'e özgü hatalar için temel sınıf."""

class InsufficientFundsError(DomainError):
    def __init__(self, balance: float, requested: float):
        self.balance = balance
        self.requested = requested
        super().__init__(f"Bakiye {balance} < istenen {requested}")

4.3 Konfigürasyon Yönetimi

from pydantic_settings import BaseSettings

class Settings(BaseSettings):
    database_url: str
    debug: bool = False
    model_config = {"env_file": ".env"}

4.4 Loglama (production kodunda asla print kullanmayın)

import logging
logger = logging.getLogger(__name__)
logger.info("Sipariş işleniyor: %s", order_id)

Production’da JSON log’lar, correlation ID’ler ve log aggregation uyumluluğu için structured logging (structlog) kullanın.

4.5 Güvenlik Uygulamaları

4.6 Dokümantasyon


5. Python’da Tasarım Kalıpları

Python’ın dinamik doğası, birçok klasik GoF kalıbını daha basit veya gereksiz hale getirir — ama fikirler hâlâ değerlidir.

5.1 Creational (Yaratımsal)

@functools.lru_cache(maxsize=None)
def get_settings() -> Settings:
    return Settings()

5.2 Structural (Yapısal)

5.3 Behavioral (Davranışsal)

def process(data: list[int], strategy: Callable[[list[int]], int]) -> int:
    return strategy(data)

process(data, strategy=sum)
process(data, strategy=max)

5.4 Dependency Injection

Duck typing sayesinde Python nadiren bir DI framework’üne ihtiyaç duyar, ancak daha büyük uygulamalar için:

5.5 Repository & Unit of Work (DDD’ye yakın)

İş mantığını persistence’tan ayırmak için servis katmanı mimarilerinde yaygın (Unit of Work olarak SQLAlchemy session scope’u).


6. Eşzamanlılık ve Paralellik

ModelKullanım AlanıAraçlar
ThreadingI/O-yoğun, bloklayan kütüphanelerthreading, concurrent.futures.ThreadPoolExecutor
AsyncioI/O-yoğun, yüksek eşzamanlılık (ağ, DB)asyncio, httpx, aiohttp, asyncpg
MultiprocessingCPU-yoğunmultiprocessing, concurrent.futures.ProcessPoolExecutor, joblib
Dağıtık (Distributed)Makineler arası paralellikCelery, Dask, Ray
import asyncio

async def fetch_all(urls: list[str]):
    async with httpx.AsyncClient() as client:
        tasks = [client.get(url) for url in urls]
        return await asyncio.gather(*tasks)

# Yapılandırılmış eşzamanlılık (structured concurrency, 3.11+)
async def main():
    async with asyncio.TaskGroup() as tg:
        tg.create_task(fetch_all(urls_a))
        tg.create_task(fetch_all(urls_b))

7. Test Ekosistemi

import pytest

@pytest.fixture
def client():
    return TestClient(app)

@pytest.mark.parametrize("value,expected", [(1, 2), (2, 4), (3, 6)])
def test_double(value, expected):
    assert double(value) == expected

@pytest.mark.asyncio
async def test_fetch():
    result = await fetch_data()
    assert result is not None

8. Paketleme, Ortamlar ve Araçlar

8.1 Modern Araç Zinciri (2025-2026 konsensüsü)

# uv workflow
uv init my-project
uv add fastapi httpx
uv run pytest
uv lock

8.2 pyproject.toml (PEP 621) tek doğruluk kaynağıdır

[project]
name = "my-project"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = ["fastapi>=0.115", "pydantic>=2.0"]

[tool.ruff]
line-length = 100

[tool.mypy]
strict = true

8.3 Pre-commit Hook’ları

repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    hooks:
      - id: ruff
      - id: ruff-format

9. Web Framework’leri ve API’ler

FrameworkEn İyi Kullanım Alanı
FastAPIModern async API’ler, otomatik OpenAPI dokümantasyonu, Pydantic-native — yeni servisler için varsayılan seçim (ve çoğu AI-serving API’nin belkemiği)
DjangoFull-stack, her şey dahil uygulamalar, admin panel, ORM, auth
Django REST FrameworkDjango üzerinde REST API’ler
FlaskHafif, mikroservisler, basit uygulamalar
LitestarGüçlü DI’a sahip, performans odaklı FastAPI alternatifi
StarletteFastAPI’nin temelini oluşturan ASGI toolkit’i
from fastapi import FastAPI, Depends
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float

@app.post("/items")
async def create_item(item: Item):
    return {"id": 1, **item.model_dump()}

Sunum (serving): production için Uvicorn (ASGI server), Gunicorn (Uvicorn worker’larıyla birlikte).


10. Veri Mühendisliği ve Bilimsel Yığın

import polars as pl

df = pl.read_parquet("events.parquet")
result = (
    df.filter(pl.col("status") == "active")
      .group_by("country")
      .agg(pl.col("revenue").sum())
)

11. Veritabanları ve ORM’ler

from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase

class Base(DeclarativeBase): pass

class User(Base):
    __tablename__ = "users"
    id: Mapped[int] = mapped_column(primary_key=True)
    email: Mapped[str]

12. CLI, Loglama, Gözlemlenebilirlik

import typer
from rich import print

app = typer.Typer()

@app.command()
def greet(name: str, loud: bool = False):
    msg = f"Merhaba, {name}!"
    print(msg.upper() if loud else msg)

if __name__ == "__main__":
    app()

13. DevOps, CI/CD ve Deployment

FROM python:3.13-slim AS builder
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev

FROM python:3.13-slim
COPY --from=builder /app /app
CMD ["uv", "run", "uvicorn", "main:app", "--host", "0.0.0.0"]

14. AI / Agentic Mühendislik Yığını

Bu bölüm, 2025-2026 döneminde LLM tabanlı uygulamalar ve otonom agent’lar inşa etmek için olmazsa olmaz kütüphaneleri ve kalıpları kapsar.

14.1 Temel LLM SDK’ları

import anthropic

client = anthropic.Anthropic()
response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    tools=[{
        "name": "get_weather",
        "description": "Bir konum için güncel hava durumunu getir",
        "input_schema": {
            "type": "object",
            "properties": {"location": {"type": "string"}},
            "required": ["location"],
        },
    }],
    messages=[{"role": "user", "content": "İstanbul'da hava nasıl?"}],
)

14.2 Yapılandırılmış Çıktı (Structured Output) ve Doğrulama

import instructor
from pydantic import BaseModel

class Person(BaseModel):
    name: str
    age: int

client = instructor.from_anthropic(anthropic.Anthropic())
person = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    response_model=Person,
    messages=[{"role": "user", "content": "Çıkar: John 30 yaşında"}],
)

14.3 Agent Orkestrasyon Framework’leri

FrameworkFelsefe
LangGraphGraph-tabanlı, düşük seviyeli, agent’lar için açık state machine’ler — production-grade, kontrol edilebilir agent workflow’ları için güncel favori; LangChain ekibi tarafından geliştirildi
LangChainChain’ler, retriever’lar, memory, entegrasyonlardan oluşan geniş ekosistem — hızlı prototipleme, RAG pipeline’ları için iyi
CrewAIRol-tabanlı multi-agent orkestrasyonu (agent’lar rol/hedef/görevleri olan “crew üyeleri” olarak)
AutoGen (AG2) / Microsoft Agent FrameworkKonuşma-odaklı multi-agent sistemleri, araştırma/kurumsal ortamlarda güçlü
LlamaIndexRAG’de uzmanlaşmış veri framework’ü — dökümanlar üzerinde indeksleme, retrieval, query engine’ler
Semantic KernelMicrosoft’un SDK’sı, plugin/skill-tabanlı orkestrasyon, güçlü .NET/Python paralelliği
OpenAI Agents SDKOpenAI’nin hafif resmi agent/handoff/guardrail primitifleri
Pydantic AITip-güvenli, Pydantic-native agent framework’ü — minimal, test edilebilir, dependency-injection tarzı
smolagents (Hugging Face)Minimalist, kod yazan agent’lar (aksiyon almak için Python yazıp çalıştıran agent’lar)
# LangGraph tarzı açık agent state machine (kavramsal)
from langgraph.graph import StateGraph, END

class AgentState(TypedDict):
    messages: list
    next_step: str

graph = StateGraph(AgentState)
graph.add_node("plan", plan_node)
graph.add_node("act", act_node)
graph.add_node("reflect", reflect_node)
graph.add_conditional_edges("reflect", should_continue, {"continue": "plan", "done": END})
graph.set_entry_point("plan")
app = graph.compile()

14.4 Model Context Protocol (MCP)

MCP (Anthropic tarafından tanıtıldı, artık endüstride yaygın olarak benimseniyor), LLM uygulamalarını harici araçlara, veri kaynaklarına ve servislere bağlamak için açık bir standarttır — “AI uygulamaları için USB-C” gibi düşünün. Temel yapı taşları:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("weather-server")

@mcp.tool()
def get_forecast(city: str) -> str:
    """Bir şehir için hava tahminini getir."""
    return fetch_weather(city)

if __name__ == "__main__":
    mcp.run()

14.5 Vektör Veritabanları ve Retrieval (RAG)

import chromadb

client = chromadb.PersistentClient(path="./db")
collection = client.get_or_create_collection("docs")
collection.add(documents=[...], ids=[...], embeddings=[...])
results = collection.query(query_texts=["RAG nedir?"], n_results=5)

14.6 Embedding’ler ve Reranking

14.7 LLM Uygulamaları için Gözlemlenebilirlik ve Değerlendirme

from ragas import evaluate
from ragas.metrics import faithfulness, context_precision

results = evaluate(dataset, metrics=[faithfulness, context_precision])

14.8 Prompt Mühendisliği ve Şablonlar

14.9 Yerel ve Açık-Ağırlıklı Model Sunumu

14.10 Multi-Agent İletişimi ve Guardrail’lar

14.11 Minimal ama Gerçekçi Bir Agentic Yığın (2026)

LLM: Anthropic Claude / OpenAI GPT (`anthropic`/`openai`/`litellm` üzerinden)
Orkestrasyon: LangGraph veya Pydantic AI
Araçlar (Tools): MCP server'ları (özel + topluluk)
Yapılandırılmış G/Ç: Pydantic v2 + `instructor`
Retrieval: Qdrant/pgvector + sentence-transformers + Cohere Rerank
Gözlemlenebilirlik: Langfuse
Değerlendirme: Ragas + promptfoo (CI gate)
Sunum (Serving): FastAPI + Uvicorn, Docker, bir API gateway arkasında

15. Önerilen Proje Yapısı

my-project/
├── pyproject.toml
├── uv.lock
├── README.md
├── .pre-commit-config.yaml
├── .github/workflows/ci.yml
├── src/
│   └── my_project/
│       ├── __init__.py
│       ├── api/            # FastAPI router'ları
│       ├── core/           # config, loglama, güvenlik
│       ├── domain/         # iş modelleri, exception'lar
│       ├── services/       # iş mantığı
│       ├── repositories/   # veri erişimi
│       ├── agents/         # agent graph'ları, tool'lar, prompt'lar
│       └── schemas/        # Pydantic modelleri
└── tests/
    ├── unit/
    ├── integration/
    └── conftest.py

16. Bilinmesi Gereken Kütüphaneler — Özet Tablo

KategoriKütüphaneler
Paket/ortam yönetimiuv, poetry, pyenv, pipx
Lint/format/tip-kontrolüruff, mypy, pyright
Testpytest, hypothesis, tox, nox, testcontainers
Web framework’lerifastapi, django, flask, litestar
Veri doğrulamapydantic
Veri/Bilimselnumpy, pandas, polars, pyarrow, duckdb
ML/DLscikit-learn, pytorch, jax, transformers
DB/ORMsqlalchemy, sqlmodel, alembic, asyncpg
Async HTTPhttpx, aiohttp
CLItyper, click, rich
Loglama/Gözlemlenebilirlikstructlog, opentelemetry, sentry-sdk
AI/Agentic — LLM SDK’larıanthropic, openai, litellm
AI/Agentic — orkestrasyonlanggraph, langchain, crewai, autogen, pydantic-ai, llama-index
AI/Agentic — yapılandırılmış çıktıinstructor, outlines
AI/Agentic — araçlar/protokolmcp
AI/Agentic — vektör DBchromadb, qdrant-client, weaviate-client, pinecone
AI/Agentic — değerlendirmeragas, deepeval, promptfoo
AI/Agentic — gözlemlenebilirliklangfuse, langsmith
AI/Agentic — sunum (serving)vllm, ollama, llama-cpp-python

Son Notlar