9 Ekim 2026’da Python 3.15.0 yayınlandı. Aşağıdaki örnekler Python’un resmi “What’s New in 3.15” belgesinden. Kaynaklar en altta. Hatırlatma: geçen hafta Reddit derlemesinde son dakika “rc3” gecikmesini yazmıştık; son sürüm bir hafta sonra geldi.
Kısaca: neler yeni?
| Yenilik | PEP | Ne işe yarar? |
|---|---|---|
Tembel içe aktarma (lazy import) |
810 | Modül ilk kullanıldığı anda yüklenir, program daha hızlı açılır |
| Varsayılan kodlama UTF-8 | 686 | open() artık sistemden bağımsız UTF-8 kullanır |
frozendict |
814 | Değiştirilemez sözlük; hash’lenebilir |
Kavramalarda açma (*, **) |
798 | [*L for L in listeler] gibi düzleştirme |
| Yeni profil aracı (Tachyon) | 799 | Çalışan programı durdurmadan örnekleyen profiler |
sentinel yerleşik tipi |
661 | “Değer verilmedi” gibi özel işaretler için |
| Deneysel JIT’te büyük iyileştirme, daha iyi hata mesajları, daha renkli çıktılar | – | – |
1. lazy import: daha hızlı açılış
Büyük kütüphaneleri import etmek, kullanmasan bile açılışı yavaşlatır. Artık şöyle yazabilirsin:
lazy import json
lazy from pathlib import Path
json modülü, ilk kez json. dediğin anda yüklenir. Dikkat edilecekler:
lazyyalnızca dosyanın en üst seviyesinde yazılabilir. Fonksiyon, sınıf ya datry/exceptiçindeSyntaxErrorverir.lazy from modul import *yazılamaz.- Eski Python sürümleriyle uyumlu kalmak istersen, modülün başına bir liste koyabilirsin:
__lazy_modules__ = ["json", "pathlib"]
import json # 3.15'te tembel yüklenir
import os # normal yüklenir
Tüm programda açmak için: python -X lazy_imports=all program.py
2. Varsayılan kodlama artık UTF-8 (Windows kullanıcıları dikkat!)
Önceden Windows’ta open("dosya.txt") dediğinde Türkçe sistemde cp1254 kullanılırdı. “ş, ğ, ı” bozuk çıkar, UnicodeDecodeError alırdın. 3.15’te encoding vermezsen UTF-8 kullanılır.
- Eski davranışa dönmek için:
PYTHONUTF8=0ortam değişkeni ya dapython -X utf8=0 program.py. - En doğrusu: her zaman açıkça yaz. Böylece kodun her sürümde aynı çalışır:
with open("notlar.txt", encoding="utf-8") as f:
metin = f.read()
- Eski Windows programlarından gelen cp1254 dosyaları okuyorsan
encoding="cp1254"ya daencoding="locale"ver.
3. frozendict: değiştirilemez sözlük
>>> a = frozendict(x=1, y=2)
>>> a["z"] = 3
TypeError: 'frozendict' object does not support item assignment
>>> b = frozendict(y=2, x=1)
>>> a == b, hash(a) == hash(b)
(True, True)
Hash’lenebildiği için set içine ya da başka bir sözlüğe anahtar olarak koyabilirsin. Ayarlar, sabit tablolar ve önbellek anahtarları için ideal. Not: frozendict, dict’in alt sınıfı değil.
4. Kavramalarda * ve **
İç içe listeyi düzleştirmek artık tek ve okunaklı satır:
>>> listeler = [[1, 2], [3, 4], [5]]
>>> [*L for L in listeler]
[1, 2, 3, 4, 5]
>>> sozlukler = [{"a": 1}, {"b": 2}, {"a": 3}]
>>> {**d for d in sozlukler}
{'a': 3, 'b': 2}
Eskisi [x for L in listeler for x in L] idi; o da çalışmaya devam ediyor.
5. Yeni profil aracı
- Yeni
profilingpaketi geldi. İçindeki örnekleyici profiler (Tachyon), çalışan bir programa PID ile bağlanıp nerede zaman harcadığını gösterebiliyor; alev grafiği (flamegraph) çıktısı verebiliyor. cProfilehâlâ çalışıyor. Eskiprofilemodülü kullanımdan kaldırılıyor ve 3.17’de silinecek.
Hemen yükseltmeli miyim?
- Yeni öğreniyorsan: Evet, 3.15 kur. Kurulum rehberimiz aynen geçerli: Python nasıl kurulur?
- Projen varsa: Önce sanal ortamda dene (venv rehberi). Bazı paketlerin (özellikle C eklentili olanların) 3.15 uyumlu sürümü birkaç hafta gecikebilir.
- Python 3.10 kullanıyorsan: 3.10’un ömrü 1 Ekim 2026’da bitti (PEP 619). Aynı gün çıkan 3.10.22 son güvenlik sürümüydü; artık güvenlik düzeltmesi gelmeyecek. En az 3.12’ye geç.
Sen hangi yeniliği ilk deneyeceksin? 3.15’e geçerken bir hata aldıysan hata mesajıyla birlikte aşağıya yaz.
Kaynaklar: Python 3.15.0 sürüm sayfası (9 Ekim 2026), What’s New In Python 3.15 (resmi belge), PEP 790: 3.15 sürüm takvimi, PEP 619: 3.10 sürüm takvimi, python.org sürüm listesi (3.10.22, 1 Ekim 2026). Kontrol tarihi: 13 Ekim 2026.