PYTHON EĞİTİMİ
Python eğitimi, dilin söz dizimini geçmiş ekiplerden ürün geliştirenlere doğru ilerleyen bir programdır. Pandas ile veri akışları, FastAPI ile servisler, asyncio ile asenkron işler — günlük işin Python'a taşınması için gereken pratikler gerçek senaryolarla işlenir. Söz dizimi değil mühendislik kararı odakta tutulur.
Eğitim sonunda katılımcı, Python ekosistemini "script yazma" boyutundan çıkartıp üretim seviyesinde kullanmaya başlar. Hata yönetimi, test disiplini, profiling ve paketleme gibi konular yan başlık değil temel pratik olarak ele alınır; böylece ekip içinde ortak bir kod kalitesi ve refaktör cesareti oluşur. Eğitim akışı Python resmi belgeleri referans alınarak şekillenir.
Katılımcı Profili
Bu eğitim, Python'u günlük iş aracı olarak kullanan veya kullanmaya başlayacak rollere yöneliktir:
- Backend Geliştiriciler: Django, FastAPI veya Flask ile servis yazan mühendisler
- Veri Mühendisleri: ETL ve pipeline akışlarını Python ile inşa eden roller
- DevOps Mühendisleri: Otomasyon ve scripting'i bash yerine Python'a taşıyanlar
- Test Otomasyoncuları: pytest ve Selenium ile test disiplini kuran QA mühendisleri
- Veri Analistleri: Pandas ve NumPy ile analiz akışını koda alan analistler
Ön Gereklilikler
Bu eğitime katılım için ileri seviye Python bilgisi gerekmez; aşağıdaki temel yetkinlikler öğrenme hızını artırır:
- Herhangi bir dilde if/else, döngü ve fonksiyon kullanma deneyimi
- Komut satırı ve dosya işlemleri ile temel rahatlık (cd, ls, mkdir)
- HTTP, JSON ve REST API kavramlarına aşinalık
- Git ile temel sürüm kontrolü kullanımı (clone, commit, push)
- Bir IDE veya editör deneyimi (VS Code, PyCharm tercihen)
Süresi ve Tarihi
Süre: 3 gün. Bu süre standart program içindir; ek modüllere ve hedefe göre süre özelleştirilebilir.
Eğitim tarihleri ve saatleri, ekibinizin uygunluğuna göre birlikte planlanır.
Kazanımlar
Bu programın sonunda katılımcı, Python ile günlük işleri otomatikleştirebilir ve veri/iş akışlarını koda taşıyabilecek seviyede pratiklenir:
- Liste, sözlük, set ve comprehension yapılarını doğru senaryoda kullanır
- Fonksiyon, generator ve decorator ile tekrar eden kodu sadeleştirir
- OOP'yi Pythonic biçimde — dataclass, __slots__ ve özel metotlarla — modelleyebilir
- asyncio ve threading arasında GIL'in etkisini bilerek seçim yapar
- requests, fastapi ve SQLAlchemy ile servisten servise veri taşır
- pytest ile testten korkmadan refactor edebilir
- pdb, logging ve cProfile ile hatayı kaynağına kadar kovalar
Python Eğitimi Konuları
1. Python'un Felsefesi ve Sürüm Manzarası
- Zen of Python ve dil felsefesinin günlük karara yansıması
- 2.x'in vedası, 3.x sürüm akışı ve EOL takvimi
- CPython, PyPy, MicroPython implementasyonları
- Hangi sürüm hangi proje için: stabilite ve özellik dengesi
2. Söz Dizimi ve Veri Tipleri
- Anlamlı girinti: blok yapısının dil-seviyesinde zorunluluğu
- int sınırsızlığı ve float IEEE 754 hassasiyet riski
- Mutable ve immutable tipler arasındaki kritik ayrım
- Identity (is) ve equality (==) — küçük int cache tuzağı
- str, bytes, bytearray arasındaki sınır
- Number, sequence, mapping protokol grupları
3. Truthy/Falsy ve None Semantik
- Boş koleksiyon, 0, None, "" gibi falsy değerler
- "if x:" ve "if x is None:" arasında doğru tercih
- Sentinel değer pattern'i ve None'dan kaçınma
4. Akış Kontrolü
- if/elif zinciri yerine dispatch dict alternatifi
- match-case ile yapısal eşleme ve sınır durumlar
- for/else, while/else şaşırtıcı blok davranışı
- Generator döngü ve eager evaluation farkı
- break/continue ile akış kontrolünün okunabilirlik sınırı
5. Fonksiyonlar - First-Class Citizens
- def, lambda ve callable protokolü
- Positional-only (/) ve keyword-only (*) ayraçları
- Mutable default trap: def f(x=[]) tuzağı
- Closure ve nonlocal — geç bağlanma (late binding) sorunu
- partial, reduce, map: fonksiyonel araç seti
- Function annotation ve introspection (inspect modülü)
6. Collections - List, Tuple, Set, Dict
- list: amortized O(1) append ve slicing maliyeti
- tuple: hashable ve struct-benzeri kullanım
- set: O(1) lookup ve frozenset farkı
- dict: insertion-order preserved ve view nesneler
- deque, OrderedDict, Counter ne zaman gerekli
7. Comprehension ve Generator Expression
- List, dict, set comprehension söz dizimi
- Generator expression ile bellek korumalı iterasyon
- Nested comprehension ve okunabilirlik sınırı
- Walrus (:=) operatörü comprehension içinde
8. Strings, Encoding ve f-strings
- str (Unicode) ve bytes ayrımı
- encode/decode ve UnicodeDecodeError
- f-string format spesifiyerleri ({x:.2f}, {x!r}, {x=})
- Regex temeli, re modülü ve precompiled pattern
- str.format vs eski % yöntemi vs f-string seçimi
9. Dosya I/O ve pathlib
- open() modları: r, w, a, x, b, t kombinasyonları
- with deyimi ve kaynak temizliği garantisi
- pathlib.Path API: glob, read_text, exists, parents
- csv, json modülleri ile yapılandırılmış veri
- mmap ile memory-mapped büyük dosya erişimi
10. Exception Hiyerarşisi ve Hata Yönetimi
- BaseException, Exception, ValueError sınırları
- try/except/else/finally bloklarının semantik farkı
- Exception chaining: raise X from Y
- Custom exception sınıfı tasarımı
- LBYL ("look before you leap") vs EAFP ("easier to ask forgiveness") kıyaslaması
11. Modül Sistemi ve Import Mantığı
- Absolute ve relative import farkı
- __init__.py ve namespace package
- sys.path ve modül arama düzeni
- Circular import tuzağı ve lazy import çözümü
- if __name__ == "__main__" deyiminin işlevi
12. OOP - Class, MRO ve Dunder Methods
- Class body, instance ve class attribute ayrımı
- __init__, __new__ ve nesne yaratım akışı
- @classmethod, @staticmethod kullanım kriteri
- Dunder protokoller: __eq__, __hash__, __repr__, __iter__
- super() ve MRO (C3 linearization) okuma
- Mixin ve composition yaklaşımı
13. Dataclass, NamedTuple ve __slots__
- @dataclass ile boilerplate-free model
- NamedTuple, TypedDict alternatifleri
- __slots__ ile bellek tasarrufu ve __dict__ kısıtı
- Pydantic ile runtime validation
14. Iterator Protokolü ve Generator
- Iterable, Iterator, Sequence kavram ayrımı
- __iter__ ve __next__ ile özel iterator
- yield, yield from ile generator yazımı
- Generator pipeline ile lazy data flow
- itertools: chain, groupby, islice, takewhile
15. Decorator ve Context Manager
- Function decorator (@) söz dizimi
- functools.wraps ile metadata korunması
- Parametreli decorator ve nested closure
- @contextmanager dekoratörü ile kısa context
- __enter__/__exit__ ile özel context sınıfı
16. GIL Gerçeği ve asyncio Modeli
- Global Interpreter Lock'un gerçek anlamı ve mit
- I/O-bound ve CPU-bound iş ayrımı
- threading, multiprocessing, concurrent.futures seçimi
- asyncio: event loop, coroutine, task
- async/await söz dizimi ve await yapılabilir nesneler
- Free-threading (no-GIL) mod ve deneysel statü
17. Type Hints ve Statik Analiz
- typing modülü: Optional, Union, Callable, TypeVar
- Generic, Protocol ve TypeAlias kullanımı
- mypy ve pyright ile statik denetim
- Runtime'a tip dayatma: pydantic, typeguard
- Type stubs ve .pyi dosyaları
18. pytest ile Test Disiplini
- pytest komut akışı ve test keşfi
- Fixture, parametrize ve indirect parametre
- Mock, MagicMock ve monkeypatch yöntemleri
- pytest-cov ile kapsam raporu
- Property-based test: hypothesis ile giriş
19. Paket Yönetimi: venv, pip, uv
- venv ile izole proje ortamı
- pip, pip-tools, poetry, uv karşılaştırması
- pyproject.toml ve PEP 621 metadata
- Distribution: wheel, sdist ve PyPI yayını
20. Modern Python ve Yarın
- match-case ve type parametre syntax
- Self type, ParamSpec, dataclass kw_only
- Geliştirilmiş hata mesajları ve f-string parser değişimi
- Yol haritası: free-threading, JIT, daha hızlı CPython
PYTHON EĞİTİMİ ile İlgili
Sıkça Sorulan Sorular ve Cevapları
Python eğitiminde async/await ile threading arasındaki fark nasıl ele alınıyor?
asyncio kooperatif çoklu görev için event loop tabanlı çalışır ve I/O-bound iş yükünde tek thread üzerinde çok sayıda görevi yönetir. threading ise GIL kısıtlı paralelizmle yine I/O-bound senaryolarda işe yarar; CPU-bound iş için multiprocessing önerilir. Eğitimde her birinin hangi senaryoda doğru olduğu örneklerle ayrıştırılır.
Pandas ile veri analizinde sık karşılaşılan performans tuzakları nelerdir?
DataFrame üzerinde apply ile satır satır Python fonksiyonu çalıştırmak vektörel işleme göre çok yavaş olabilir. Aynı şekilde iterrows ve string concat tuzakları sık görülür. Eğitimde NumPy vectorization, df.eval ve method chaining ile bu tuzakların nasıl önleneceği uygulamalı gösterilir.
Type hint ve mypy gerçek projede neye yarar?
Type hint kodu compile-time'a benzer hata yakalama disiplinine yaklaştırır ve IDE'nin tamamlamayı doğru yapmasını sağlar. mypy strict modda çalışınca null safety ve tip uyumsuzluğu gibi sınıf hatalarını runtime'a bırakmadan yakalar. Eğitimde aşamalı strict adaptasyonu örneklerle çalışılır.
Python paketleme için poetry, pipx ve uv arasında nasıl seçim yaparız?
poetry dependency lock ve publishing odaklı klasik bir araçtır. pipx global CLI tool kurulumu için tasarlandı. uv ise Rust ile yazılmış, hızlı ve modern bir alternatif; pip ile venv'i tek araçta birleştirir. Eğitimde her birinin hangi senaryoda doğru olduğu somut örneklerle inceliyoruz.
GIL kaldırılırsa mevcut Python kodumuz hızlanır mı?
Free-threading (no-GIL) modu deneysel sürümde mevcut. CPU-bound çoklu thread senaryolarında gerçek hızlanma sağlar; I/O-bound kodlarda fark hissedilmez. Ancak mevcut C extension'ların uyumu kritik. Eğitimde Free-threading'in ne zaman risk, ne zaman fırsat olduğu tartışılır.
Generator, list comprehension ve normal döngü arasında nasıl seçim yaparız?
Tüm veri belleğe sığıyor ve sonucu tekrar tekrar kullanacaksak list comprehension idealdir. Tek seferlik akış veya çok büyük veri varsa generator (yield) bellekte yer kazandırır. Karmaşık koşul ve yan etki gerekiyorsa normal döngü daha okunur. Eğitimde her birinin performans ve bellek davranışı ölçümle gösterilir.



