En Son Python Özellikleri

En Son Python Özellikleri

Bu makale, Python'un en son özelliklerini açıklar.

Python 3.12 ile 3.13 sürümleri arasındaki dikkat çekici özellikleri, 'hemen kullanılabilir' uygulamalar açısından adım adım açıklayacağız.

YouTube Video

En Son Python Özellikleri

Son yıllarda Python, yalnızca 'yazım kolaylığı'na değil, aynı zamanda 'sağlamlık, hız ve okunabilirliğe' de önem vererek gelişmiştir. Aşağıda, Python 3.12 ile 3.13 sürümleri arasındaki öne çıkan özellikleri tanıtıyoruz.

Hata Mesajlarında Büyük İyileştirmeler (Python 3.12)

Python 3.12 ile birlikte, hatalar artık daha somut ve görsel bir şekilde görüntüleniyor. Hataların nerede yapıldığını anında tespit edebilir ve hata ayıklama süresini önemli ölçüde azaltabilirsiniz.

1def calc_total(price, tax):
2    return price + price * tax
3
4result = calc_total(100, )
  • Eksik argümanlar ilgili satır ve konum ile birlikte gösterilir, bu sayede sebebi tespit ederken kafa karışıklığı yaşamazsınız.

'match' Deyiminin Pratik Kullanımı (Yapısal Desen Eşleştirme)

'match' deyimi sayesinde karmaşık koşul dallarını ve veri yapısı ayrımını deklaratif bir şekilde tanımlayabilirsiniz. Özellikle sözlükler ve iç içe geçmiş yapıları yönetmek çok daha okunabilir hale gelir.

1user = {"status": "active", "name": "Alice"}
2
3match user:
4    case {"status": "active", "name": name}:
5        print(f"Welcome back, {name}!")
6    case {"status": "inactive"}:
7        print("Please activate your account.")
8    case _:
9        print("Unknown user status.")
  • Koşul dallanması ve veri çıkarmayı aynı anda gerçekleştirebildiğiniz için iç içe if ifadelerine gerek kalmaz.

İç içe geçmiş verileri yönetmek için sezgisel desen eşleştirme

'match' deyimi, JSON veya API yanıtları gibi yapılandırılmış veriler için de etkilidir.

1data = {"user": {"name": "Bob", "age": 25}}
2
3match data:
4    case {"user": {"name": name, "age": age}}:
5        print(f"{name} is {age} years old.")
  • Yalnızca gerekli elemanları güvenli şekilde çıkarabilir, savunmacı kod yazma ihtiyacını azaltabilirsiniz.

Geliştirilmiş f-string Hata Ayıklama Çıktısı (=` gösterimi / Python 3.8 ve sonrası, kullanışlılık arttı)

f-string'lerle artık ifadeye = ekleyerek hem ifadenin kendisini hem de sonucunu aynı anda görüntüleyebilirsiniz. Bu özellik, hata ayıklama için özelleştirilmiştir ve bir değişkenin içeriğini hızla kontrol etmek istediğinizde son derece kullanışlıdır.

1x = 10
2y = 20
3print(f"{x=}, {y=}, {x+y=}")
  • Değişken isimleri ve değerleri birlikte gösterildiği için, print() ifadeleriyle yapılan geçici hata ayıklama daha okunabilir hale gelir.
  • Kayıt çıktıları ve doğrulama kodlarını daha kısa ve daha açıklayıcı bir şekilde yazabilirsiniz.

Basitleştirilmiş Tip İpuçları ve 'type' Takma Adı (Python 3.12: Yeni Type Alias Söz Dizimi)

Python 3.12'de tip takma adları tanımlamak için özel bir söz dizimi—type deyimi—eklenmiştir. Bu sayede tip ipuçları sadece ek bilgi olarak değil, aynı zamanda tasarım amacını açıkça anlatan bir dil unsuru olarak da kullanılabilir.

1type UserId = int
2type UserName = str
3
4def greet(user_id: UserId, name: UserName) -> str:
5    return f"Hello, {name} (id={user_id})"
  • UserId veya UserName'e anlam vererek, her ikisi de aynı int veya str tipini kullansa bile rol farkları netleştirilebilir.
  • Tip tanımlamaları daha kısa hale gelir ve kod inceleme ve bakım sürecinde anlaşılma maliyetini azaltır.
  • Daha önce UserId = int gibi tip takma adları atama ile oluşturuluyordu, ancak type deyimi kullanıldığında bunun 'bir tip tanımı olduğu' açıkça belirtilir. Bu, özellikle orta ve büyük kod tabanlarında tasarım okunabilirliğini artırmak için etkilidir.

Yerleşik Tipleri Kullanarak Doğal Tip Açıklamaları (Python 3.9+ ile Basitleştirilmiş Generics)

Python 3.9'dan itibaren, list veya dict gibi yerleşik tipleri doğrudan generic olarak kullanabilirsiniz.

Bu sayede, typing modülünden tip ithal etmeden sezgisel ve okunabilir tip ipuçları yazabilirsiniz.

1def sum_numbers(numbers: list[int]) -> int:
2    return sum(numbers)
3
4print(sum_numbers([1, 2, 3, 4]))
  • Tip ipuçları, 'kısıtlama' değil, 'işlemin içeriğini açıklayan belge' işlevi görür.

Self Tipiyle Güvenli Metot Zincirleme (Python 3.11 ve sonrası)

Python 3.11'den itibaren, sınıfı döndüren metotlarda dönüş tipi olarak Self belirtebilirsiniz.

Bu şekilde, tip bilgisini kaybetmeden güvenli metot zincirleme kodları yazabilirsiniz.

 1from typing import Self
 2
 3class Counter:
 4    def __init__(self, value: int = 0) -> None:
 5        self.value = value
 6
 7    def increment(self) -> Self:
 8        self.value += 1
 9        return self
10
11counter = Counter()
12counter.increment().increment()
13print(counter.value)
  • self döndüren metotlarda bile doğru dönüş tipi korunur.
  • IDE'ler ve tip denetleyiciler metot zincirlemeyi doğru şekilde anlayabilir.

Daha Açık Dize Manipülasyonu (removeprefix / removesuffix | Python 3.9 ve sonrası)

Python 3.9'dan itibaren, dizelerin başındaki ve sonundaki önek ve sonekleri güvenle çıkarmak için özel str.removeprefix() ve str.removesuffix() metotları eklenmiştir. Bu yöntemlerle kodunuzda 'yalnızca başı veya sonu kaldırmak' amacını doğru şekilde ifade edebilirsiniz.

1filename = "report_2026.txt"
2
3clean_name = filename.removeprefix("report_")
4name_without_ext = clean_name.removesuffix(".txt")
5
6print(name_without_ext)
  • Belirtilen dize sadece başta veya sonda varsa kaldırılır, istenmeyen değiştirmeleri önler.
  • Bu yöntem, replace() veya dilimleme kullanımına göre daha iyi okunabilirlik ve güvenlik sağlar.
  • Özellikle dosya adları veya URL ön işleme gibi 'belirli formata sahip dizeler'i işlerken, bu metotları kullanmak hata riskini büyük ölçüde azaltır.

Uluslararasılaştırma için Güçlü Dize Karşılaştırması (str.casefold() | Unicode Desteği)

Python'daki str.casefold(), Unicode'u dikkate alarak büyük/küçük harf duyarsız karşılaştırma için bir yöntemdir. Basit lower() veya upper()'dan farklı olarak, dil özelinde karakter dönüşümleri dahil olmak üzere dizeleri normalize eder.

1text1 = "Stra\u00dfe"
2text2 = "strasse"
3
4print(text1)
5print(text2)
6
7print(f"Comparison Result: {text1.casefold() == text2.casefold()}")
  • Almancadaki ß ve ss gibi dile bağlı farklılıkları doğru şekilde ele alır.
  • Bu, çok dilli destek veya uluslararasılaştırma temelli uygulamalar için temel bir tekniktir.

Standart TOML Desteği (tomllib | Python 3.11 ve sonrası)

Python 3.11 ve sonrasında, TOML yapılandırma dosyalarını okumak için tomllib modülü standart kütüphaneye eklenmiştir. Yapılandırma yönetimi artık dış kütüphanelere bağlı kalmadan yalnızca Python üzerinde yapılabilir.

 1import tomllib
 2
 3with open("config.toml", "rb") as f:
 4    config = tomllib.load(f)
 5
 6print(config["database"]["host"])
 7
 8# config.toml
 9# title = "TOML Example"
10# [database]
11# host = "192.168.1.1"
12# ports = [ 8001, 8001, 8002 ]
  • toml gibi harici paketlere artık gerek yok, böylece bağımlılıklarınız basitleşir.
  • Yapılandırma dosyası yüklemesi standart hale gelir, böylece dağıtım, işletim ve CI ortamları daha kolay yönetilebilir.

Paralel İşleme Çağı için İstisna Yönetimi (ExceptionGroup / except* | Python 3.11 ve sonrası)

Python 3.11, birden fazla istisnayı birlikte ele almak için ExceptionGroup ve bunları dallarda güvenli şekilde yönetmek için except* söz dizimini tanıttı. Bu, eşzamanlı veya paralel işlemede ortaya çıkan 'eşzamanlı hataları' ele almak için yeni bir özelliktir.

 1def process(values):
 2    errors = []
 3    for v in values:
 4        if v < 0:
 5            errors.append(ValueError(f"Negative value: {v}"))
 6    if errors:
 7        raise ExceptionGroup("Invalid values", errors)
 8
 9try:
10    process([1, -2, -3])
11except* ValueError as e:
12    print("Handled:", e)
  • Birden fazla istisna artık tek bir işlemde ortaya konabilir ve sınıflandırılabilir.
  • Yalnızca ilk hatanın görülebildiği asenkron işlemdeki sorunu gidermektedir.
  • asyncio.gather() veya paralel toplu işlem gibi operasyonlarda birden fazla hata etkeni aynı anda ortaya çıkabilir. ExceptionGroup kullanmak, hata toplama, günlükleme ve yeniden deneme stratejilerini düzenlemeyi kolaylaştırır.

Sadece En Son Sürüme Güncelleyerek Performans Artar

Python 3.11 ve sonrasında, birçok süreç dahili iyileştirmelerle daha hızlı hale getirilmiştir.

1def count_up(n):
2    total = 0
3    for i in range(n):
4        total += i
5    return total
6
7print(count_up(1_000_000))
  • Önemli bir avantaj, kodunuzu yeniden yazmadan hız iyileştirmeleri elde edilebilmesidir.

Çöp Toplamayı Yönetmek (gc Modülü ile Açık Yönetim)

Python'da standart gc modülünü kullanarak çöp toplamayı geçici olarak devre dışı bırakabilir veya manuel olarak çalıştırabilirsiniz. Bu, büyük veri kümelerinin toplu işlenmesi veya performansa duyarlı işlemler gibi senaryolarda etkili bir optimizasyon tekniğidir.

1import gc
2
3gc.disable()
4# heavy batch processing
5gc.enable()
6gc.collect()
  • Gereksiz çöp toplama tetiklemelerini bastırmak, işlem süresindeki dalgalanmaları azaltabilir.
  • İşlem aralıklarında açıkça toplama yapabilir ve hafıza kullanımını takip etmeyi kolaylaştırabilirsiniz.
  • Ancak, bu teknik varsayılan bir optimizasyon olarak kullanılmamalı, yalnızca profil çıkarımı GC'nin dar boğaz olduğunu gösteriyorsa düşünülmelidir. Çoğu uygulama için Python'un otomatik çöp toplama sistemine güvenmek en güvenlisidir.

Özet

Python 3.12 ile 3.13 sürümlerindeki hata mesajlarındaki iyileştirmeler ve tip ipuçlarının gelişimiyle, kodu anlamak ve bakımını yapmak her zamankinden daha kolay hale geldi. Ayrıca, daha iyi hata ayıklama deneyimi ve dahili optimizasyonlarla gelen performans artışları, uygulamada verimliliğe doğrudan katkı sağlamaktadır. Tüm bu yeni özellikleri bir anda kullanmanıza gerek yok; en son Python sürümüyle başlayıp gerekli oldukça özellikleri kademeli olarak eklemek daha pratik olacaktır. Bu kademeli uyum, daha okunabilir ve sağlam Python kodlarına yol açar.

Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.

YouTube Video