Python 3.15 çıktı: lazy import, frozendict, varsayılan UTF-8 ve diğer yenilikler (örneklerle)

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:

  • lazy yalnızca dosyanın en üst seviyesinde yazılabilir. Fonksiyon, sınıf ya da try/except içinde SyntaxError verir.
  • 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=0 ortam değişkeni ya da python -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 da encoding="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 profiling paketi 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.
  • cProfile hâlâ çalışıyor. Eski profile modü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.