Python 3.8

Python 3.8.0 (kararlı sürüm), 14 Ekim 2019’da yayınlandı. 3.8 için özellikler PEP 569 içinde tanımlanmıştır ve değişikliklerin ayrıntılı bir açıklamasına Python 3.8’de Yenilikler içinden ulaşılabilir

Özellikler

Durum

PEP 570

Yalnızca konumsal argümanlar

PEP 572

Atama İfadeleri

Tamamlandı

PEP 574

Bant dışı verilerle Pickle protokolü 5

PEP 578

Çalışma zamanı denetim kancaları

PEP 587

Python Başlatma Yapılandırması

PEP 590

Vectorcall: CPython için hızlı bir çağırma protokolü

Çeşitli

f-string’ler, kendi kendini belgeleyen ifadeler ve hata ayıklama için = işaretini destekler

Tamamlandı

Diğer Dil Değişiklikleri:

Uygulamadaki bir sorun nedeniyle finally yan tümcesinde bir continue ifadesi geçersizdi. Python 3.8’de bu kısıtlama kaldırıldı

Tamamlandı

bool, int ve fractions.Fraction türleri artık float ile decimal.Decimal içinde bulunana benzer bir as_integer_ratio() metoduna sahiptir

int, float ve complex kurucuları artık, kullanılabilir olması durumunda ve ilgili __int__(), __float__() veya __complex__() metodu kullanılamıyorsa __index__() özel metodunu kullanır

Düzenli ifadelerde N{name} kaçışları için destek eklendi

Dict ve dictview’lar artık reversed() kullanılarak ters ekleme sırasında yinelenebilir

Fonksiyon çağrılarındaki anahtar sözcük adları için izin verilen söz dizimi daha da kısıtlandı. Özellikle, f((keyword)=arg) artık izin verilmez

yield ve return ifadelerinde genelleştirilmiş yinelenebilir paket açma artık çevreleyen parantezler gerektirmez

[(10, 20) (30, 40)] gibi bir kodda virgül atlandığında, derleyici yararlı bir öneriyle birlikte bir SyntaxWarning görüntüler

datetime.date veya datetime.datetime alt sınıfları ile datetime.timedelta nesneleri arasındaki aritmetik işlemler artık temel sınıf yerine alt sınıfın bir örneğini döndürür

Python yorumlayıcısı Ctrl-C (SIGINT) ile kesildiğinde ve elde edilen KeyboardInterrupt istisnası yakalanmadığında, Python işlemi artık bir SIGINT sinyali aracılığıyla veya çağıran işlemin bir Ctrl-C nedeniyle sonlandığını tespit edebileceği doğru çıkış koduyla çıkar

Bazı gelişmiş programlama stilleri, mevcut bir fonksiyon için types.CodeType nesnesinin güncellenmesini gerektirir

Tamsayılar için, pow() fonksiyonunun üç argümanlı biçimi, tabanın modüle göre aralarında asal olduğu durumda artık üssün negatif olmasına izin verir

Dict kavramaları, anahtarın önce ve değerin ikinci olarak hesaplanması için dict sabit değerleriyle eşitlendi

object.__reduce__() metodu artık iki ila altı öğe uzunluğunda bir demet döndürebilir

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

asyncio

asyncio.run(), geçici API’den kararlı API’ye yükseldi

Tamamlandı

python -m asyncio çalıştırmak, yerel olarak eşzamansız bir REPL başlatır

asyncio.CancelledError istisnası artık Exception yerine BaseException sınıfından miras alır ve artık concurrent.futures.CancelledError sınıfından miras almaz

Tamamlandı

Bir asyncio.Task içindeki sarmalanmış eşyordamı almak için asyncio.Task.get_coro() eklendi

Asyncio görevleri artık, ya asyncio.create_task() veya create_task() olay döngüsü metoduna name anahtar sözcük argümanı aktarılarak ya da görev nesnesinde set_name() metodu çağrılarak adlandırılabilir

asyncio.loop.create_connection() için Happy Eyeballs desteği eklendi. Davranışı belirtmek için iki yeni parametre eklendi: happy_eyeballs_delay ve interleave.

gc

get_objects() artık, nesnelerin alınacağı bir kuşağı belirten isteğe bağlı bir generation parametresi alabilir. (Ancak, gc yerleşik olsa da, get_objects() fonksiyonunun MicroPython için uygulanmadığını unutmayın)

math

İki nokta arasındaki Öklid uzaklığını hesaplamak için yeni math.dist() fonksiyonu eklendi

math.hypot() fonksiyonu birden çok boyutu işleyecek şekilde genişletildi

Bir “start” değeri (varsayılan: 1) ile bir sayı yinelenebiliri çarpımını döndüren, sum() fonksiyonuna benzer yeni bir fonksiyon olan math.prod() eklendi

İki yeni birleşimsel fonksiyon math.perm() ve math.comb() eklendi

Kayan noktaya dönüştürmeden doğru tamsayı kareköklerini hesaplamak için yeni bir fonksiyon olan math.isqrt() eklendi

math.factorial() fonksiyonu artık int benzeri olmayan argümanları kabul etmez

Tamamlandı

sys

“Yükseltilemeyen istisnaların” nasıl işleneceğini denetlemek için geçersiz kılınabilen yeni sys.unraisablehook() fonksiyonu eklendi