Python 3.10

Python 3.10.0 (final) 4 Ekim 2021’de yayımlandı. 3.10 için özellikler PEP 619 içinde tanımlanmıştır ve değişikliklerin ayrıntılı bir açıklaması What’s New in Python 3.10 içinde bulunabilir.

Yeni sözdizimi özellikleri

Durum

PEP 634

Yapısal Desen Eşleştirme: Belirtim

[1]

PEP 635

Yapısal Desen Eşleştirme: Gerekçe ve Mantık

[1]

PEP 636

Yapısal Desen Eşleştirme: Öğretici

[1]

bpo-12782

Parantezli bağlam yöneticileri artık resmi olarak destekleniyor

Standart kütüphanedeki yeni özellikler

PEP 618

zip’e İsteğe Bağlı Uzunluk Denetimi Ekleme

Yorumlayıcı iyileştirmeleri

PEP 626

Hata ayıklama ve diğer araçlar için kesin satır numaraları

Yeni tip belirleme özellikleri

PEP 604

Birleşim tiplerinin X | Y olarak yazılmasına izin verme

PEP 613

Açık Tip Takma Adları

PEP 612

Parametre Belirtim Değişkenleri

Önemli kullanımdan kaldırmalar, çıkarmalar veya kısıtlamalar

PEP 644

OpenSSL 1.1.1 veya daha yenisini gerektirme

PEP 632

distutils modülünü kullanımdan kaldırma.

İlgili değil

PEP 623

PyUnicodeObject içindeki wstr üyesini kullanımdan kaldırma ve kaldırılmasına hazırlanma.

İlgili değil

PEP 624

Py_UNICODE kodlayıcı API’lerini kaldırma

İlgili değil

PEP 597

İsteğe bağlı EncodingWarning ekleme

Diğer Dil Değişiklikleri:

int tipinin, belirli bir tamsayının ikili açılımındaki birlerin sayısını döndüren yeni bir int.bit_count() metodu vardır; bu aynı zamanda nüfus sayımı (population count) olarak da bilinir.

dict.keys(), dict.values() ve dict.items() tarafından döndürülen görünümlerin artık hepsinde, orijinal sözlüğü saran bir types.MappingProxyType nesnesi veren bir mapping özniteliği bulunmaktadır.

PEP 618: zip() fonksiyonunun artık, tüm yinelenebilirlerin eşit uzunlukta olmasını zorunlu kılmak için kullanılan isteğe bağlı bir strict bayrağı vardır.

Tamsayı argüman alan yerleşik ve uzantı fonksiyonları artık Decimalleri, Fractionları ve yalnızca kayıpla tamsayıya dönüştürülebilen diğer nesneleri kabul etmemektedir (örneğin __int__() metodu olan ancak __index__() metodu olmayan nesneler).

object.__ipow__() NotImplemented döndürürse, operatör beklendiği gibi doğru bir şekilde object.__pow__() ve object.__rpow__() fonksiyonlarına geri dönecektir.

Atama ifadeleri artık küme değişmezleri ve küme anlamaları içinde, ayrıca dizi indekslerinde (ancak dilimlerde değil) parantezsiz olarak kullanılabilir.

Fonksiyonların artık, bir fonksiyon çalıştırıldığında yerleşik sembolleri aramak için __globals__['__builtins__'] içine bakmak yerine kullanılan yeni bir __builtins__ özniteliği vardır. Bu öznitelik, varsa __globals__["__builtins__"] ifadesinden, yoksa mevcut yerleşiklerden başlatılır.

İki yeni yerleşik fonksiyon – aiter() ve anext() – sırasıyla iter() ve next() fonksiyonlarının asenkron karşılıklarını sağlamak için eklenmiştir.

Statik metotlar (@staticmethod) ve sınıf metotları (@classmethod) artık metot özniteliklerini (__module__, __name__, __qualname__, __doc__, __annotations__) miras almaktadır ve yeni bir __wrapped__ özniteliğine sahiptir. Ayrıca, statik metotlar artık normal fonksiyonlar gibi çağrılabilir.

Karmaşık hedefler için açıklamalar (PEP 526 tarafından tanımlanan simple name hedefleri dışındaki her şey) artık from __future__ import annotations ile herhangi bir çalışma zamanı etkisine neden olmamaktadır.

Sınıf ve modül nesneleri artık talep üzerine tembelce boş açıklama sözlükleri oluşturmaktadır. Açıklama sözlükleri, geriye dönük uyumluluk için nesnenin __dict__ özelliğinde saklanır. Bu, __annotations__ ile çalışmaya yönelik en iyi uygulamaları iyileştirir.

yield, yield from, await veya adlandırılmış ifadelerden oluşan açıklamalar, yan etkileri nedeniyle artık from __future__ import annotations altında yasaktır.

Bağlanmamış değişkenlerin, super() ifadesinin ve sembol tablosunun işlenmesini değiştirebilecek diğer ifadelerin açıklama olarak kullanılması artık from __future__ import annotations altında etkisiz hale getirilmiştir.

Hem float tipinin hem de decimal.Decimal tipinin NaN değerlerinin karma değerleri (hash) artık nesne kimliğine bağlıdır. Daha önce, NaN değerleri birbirine eşit olmamasına rağmen her zaman 0 olarak karma değerine sahipti. Bu durum, birden fazla NaN içeren sözlükler ve kümeler oluştururken aşırı karma çakışmaları nedeniyle olası karesel çalışma zamanı davranışına neden oluyordu.

__debug__ sabiti silinirken artık bir SyntaxError (bir NameError yerine) ortaya çıkacaktır.

SyntaxError istisnaları artık end_lineno ve end_offset özniteliklerine sahiptir. Belirlenememeleri durumunda bunlar None olacaktır.

Yerleşik modüllerdeki değişiklikler:

asyncio

Eksik connect_accepted_socket() metodu eklendi.

array

array.array sınıfının index() metodunun artık isteğe bağlı start ve stop parametreleri vardır.

gc

gc.get_objects(), gc.get_referrers() ve gc.get_referents() için denetim kancaları (audit hook) ekleyin.

hashlib

hashlib modülü OpenSSL 1.1.1 veya daha yenisini gerektirir.

hashlib modülü OpenSSL 3.0.0 için ön destek sunmaktadır.

pbkdf2_hmac() fonksiyonunun saf Python yedeği (fallback) kullanımdan kaldırılmıştır. Gelecekte PBKDF2-HMAC yalnızca Python OpenSSL desteği ile derlendiğinde kullanılabilir olacaktır.

os

VxWorks RTOS için os.cpu_count() desteği ekleyin.

Linux üzerinde eventfd2 sistem çağrısını saran yeni bir os.eventfd() fonksiyonu ve ilgili yardımcılar ekleyin.

Çekirdek adres alanı ile kullanıcı adres alanı arasında kopyalama yapmadan iki dosya tanımlayıcısı arasında veri taşımaya olanak tanıyan, dosya tanımlayıcılarından birinin bir boruya (pipe) atıfta bulunması gereken os.splice() fonksiyonunu ekleyin.

macOS için O_EVTONLY, O_FSYNC, O_SYMLINK ve O_NOFOLLOW_ANY ekleyin.

platform

İşletim sistemi tanımlamasını freedesktop.org os-release standart dosyasından almak için platform.freedesktop_os_release() ekleyin.

socket

socket.timeout istisnası artık TimeoutError istisnasının bir takma adıdır.

IPPROTO_MPTCP ile MPTCP soketleri oluşturma seçeneği ekleyin.

Hizmet türü (ToS) veya DSCP/ECN alanlarını almak için IP_RECVTOS seçeneğini ekleyin.

ssl

ssl modülü OpenSSL 1.1.1 veya daha yenisini gerektirir.

ssl modülü OpenSSL 3.0.0 için ön destek ve yeni OP_IGNORE_UNEXPECTED_EOF seçeneğine sahiptir.

Kullanımdan kaldırılmış fonksiyonlar ve kullanımdan kaldırılmış sabitlerin kullanımı artık bir DeprecationWarning ile sonuçlanır. ssl.SSLContext.options özniteliğinde OP_NO_SSLv2 ve OP_NO_SSLv3 varsayılan olarak ayarlanmıştır ve bu nedenle bayrağın tekrar ayarlanması konusunda uyarı veremez.

ssl modülü artık daha güvenli varsayılan ayarlara sahiptir. İleri gizlilik (forward secrecy) veya SHA-1 MAC olmayan şifreler varsayılan olarak devre dışıdır. Güvenlik seviyesi 2, 112 bitten daha az güvenliğe sahip zayıf RSA, DH ve ECC anahtarlarını yasaklar. SSLContext varsayılan olarak minimum protokol sürümü olan TLS 1.2’ye ayarlanır. Ayarlar Hynek Schlawack’ın araştırmasına dayanmaktadır.

Kullanımdan kaldırılmış SSL 3.0, TLS 1.0 ve TLS 1.1 protokolleri artık resmi olarak desteklenmemektedir. Python bunları aktif olarak engellemez. Ancak OpenSSL derleme seçenekleri, dağıtım yapılandırmaları, sağlayıcı yamaları ve şifre paketleri başarılı bir el sıkışmayı (handshake) engelleyebilir.

ssl.get_server_certificate() fonksiyonuna bir timeout parametresi ekleyin.

ssl modülü yığın tiplerini (heap-type) ve çok aşamalı başlatmayı kullanır.

Yeni bir doğrulama bayrağı VERIFY_X509_PARTIAL_CHAIN eklenmiştir.

sys

sys.orig_argv özniteliğini ekleyin: Python yürütülebilir dosyasına aktarılan orijinal komut satırı argümanlarının listesi.

Standart kütüphane modül adlarının listesini içeren sys.stdlib_module_names özniteliğini ekleyin.

_thread

_thread.interrupt_main() artık simüle edilecek isteğe bağlı bir sinyal numarası alır (varsayılan hala signal.SIGINT).

Notlar