Python, son dört yılın üçünde TIOBE "Yılın Dili" ödülünü kazandı. Popüler programlama dili, 2022’nin ortasında da TIOBE endeksinin zirvesinde yer alıyor.
Python, Haziran 2022 TIOBE Endeksi’nin zirvesinde.
Python’un %12,74’lük puanı, “Python” anahtar kelimesinin tüm programlama ilgili arama motoru sorgularının yaklaşık %13’ünde göründüğü anlamına gelir. Başka bir deyişle, internetteki her 7. veya 8. programlama sorusu Python hakkında.
Günümüzde Python, veri bilimi ve yapay zekâdaki en büyük atılımlarla sıklıkla ilişkilendiriliyor. Kullanıcılar, sadeliğini, çok çeşitli yerleşik ve üçüncü taraf kütüphanelerini ve topluluğunu takdir ediyor.
3.11’in nihai kararlı sürümünün 3 Ekim 2022’de gelmesiyle birlikte, Python topluluğunu kayda değer hız artışı, daha iyi hata ayıklama ve hata mesajları ve standart kütüphanelere yönelik çok sayıda kullanım kolaylığı iyileştirmesi dahil olmak üzere bir dizi hoş güncelleme bekliyor.
Python 3.11’in Yeni Özellikleri Neler?
Python 3.11 değişiklik günlüğü, çoğunu fark etmeyeceğiniz kadar uzun bir hata düzeltmeleri, iyileştirmeler ve eklemeler listesi içeriyor. Ancak, kararlı sürümle birlikte Python iş akışınızı ciddi şekilde iyileştirebilecek birkaç kritik yeni özellik var. Bu yenilikler aşağıda özetlenmiştir.
1. Hız Artışı
Veri bilimcileri için heyecan verici ilk büyük değişiklik hız artışı—standart kıyaslama paketi, 3.10’a kıyasla yaklaşık %25 daha hızlı çalışıyor. Python dokümanları, 3.11’in bazı durumlarda %60’a kadar daha hızlı olabileceğini belirtiyor. İşte hız artışlarını kendiniz test etmek için kıyaslamayı nasıl çalıştıracağınız.
Python 3.10 ve 3.11’in hızlarını karşılaştırmak için bir Docker kurulumu gerekecektir. Docker Desktop’ın çalıştığından emin olduktan sonra, iki Python sürümüne ait iki imajı indirmek için terminalde şu iki komutu çalıştırın.
$ docker run -d python:3.10.4-bullseye
$ docker run -d python:3.11-rc-bullseyeAltyapı:
İndirilen imajlar Docker panonuzda görünmelidir; buradan çalıştırabilirsiniz.
Konteynerleri başlattıktan sonra, docker ps komutunu çalıştırarak konteyner kimliği, imaj, durum ve daha fazlası gibi ayrıntıları görebilirsiniz.
Çalışan konteynerler ayrıca panodaki Containers sekmesinde görünür; "Run/Stop"un yanındaki CLI düğmelerini de burada bulabilirsiniz. Her iki konteyner için de bu düğmelere tıklayarak konteynerlere bağlı iki terminal sekmesi açın.
Her iki sekmede de pip ile pyperformance paketini kurun. Ardından her konteyner terminalinde aşağıdaki komutları çalıştırın.
$ pyperformance run -r -o py310.jsone run -r -o py311.jsonAltyapı:
Bu komutlar, standart kütüphanelerden yaklaşık 60 Python fonksiyonu için kıyaslama testlerini çalıştırır ve JSON meta verileri üretir. Testlerin sıkı olmasını istediğimi belirtmek için isteğe bağlı olarak -r etiketini ekledim; bu da daha uzun sürer. Benim durumda her iki konteyner de AMD Ryzen 12 çekirdekli CPU’ya sahip bir Windows makinede çalışıyor.
Şimdi iki konteynerde iki JSON dosyamız var ve hız testine devam etmek için her ikisini de tek bir dizinde toplamamız gerekiyor. Bunun için, JSON dosyasını Python 3.11 konteynerinden 3.10’a kopyalamak üzere docker cp komutunu kullanacağız.
Bilgisayarınızdaki doğru yolu yansıtacak şekilde yolu güncelleyerek, ayrı bir terminal sekmesinde aşağıdaki komutları çalıştırın:
Benim durumda, crazy_snyder ve charming_proskuriakova, çalışan konteynerlerin kimlikleri. Artık her iki JSON dosyası da Python 3.10 konteynerinde. Kıyaslamayı tamamlamak ve sonuçları CSV olarak kaydetmek için aşağıdaki komutları çalıştırın.
Veri çerçevesindeki her satır, verilen Python fonksiyonunu çalıştırmanın her iki sürümde ne kadar sürdüğünü (milisaniye cinsinden) kaydeder. Hız artışlarının bir histogramını çizelim.
Grafikten, Python 3.11’deki fonksiyonların çoğunun yaklaşık 1,2 kat (%20) daha hızlı olduğu açıkça görülüyor. Bu tahmini ortalama ve medyanla da doğrulayabiliriz.
Performans artışları kâğıt üzerinde fark edilir olsa da, iyileştirmelerin somut etkisi kişiden kişiye değişecektir ve Python 3.11’in kararlı, nihai sürümü henüz yayımlanmadı. Kıyas testi, günlük işinizde çok kullanmayabileceğiniz saf Python fonksiyonlarını kullanır, ancak hem Python 3.10 hem de 3.11 için Docker kurulumu yapmak, kendi kullanım senaryolarınız için hız artışları hakkında fikir edinmenizi sağlayacaktır.
2. Daha İyi Hata Mesajları
Python 3.11’in bir diğer heyecan verici özelliği, hatanın tam konumunu işaret eden daha iyi hata mesajları. Yorumlanması zor bir hata mesajıyla biten 100 satırlık bir traceback döndürmek yerine, Python 3.11 hataya neden olan ifadeyi doğrudan gösteriyor.
Yukarıdaki örnekte, Python yorumlayıcısı, None değeri nedeniyle betiği çökerten x’i işaret ediyor. Mevcut Python sürümlerinde, ‘x’ özniteliğine sahip iki nesne olduğundan hata belirsiz olacaktı. Ancak 3.11’in hata işleme sistemi sorunlu ifadeyi açıkça gösteriyor.
Bu örnek, 3.11’in derin iç içe geçmiş bir sözlükteki hatayı nasıl tam olarak tespit ettiğini ve hatanın hangi anahtarla ilgili olduğunu net biçimde gösterebildiğini sergiliyor.
Aynı hassasiyeti karmaşık aritmetik ifadelerde de görebilirsiniz.
Güncellenmiş hata mesajları, özellikle betiklerde hata ayıklamakta zorlanan veri bilimciler için kesinlikle hoş bir yenilik.
3. İstisna Notları
“Açık, örtükten iyidir.”
Yukarıdaki cümle, Python’un 20 tasarım ilkesinden oluşan listesi olan Python’un Zen’inin ikinci satırıdır. Bu ilke, Python kodunun olabildiğince ifade gücü yüksek olması gerektiğini anlatır.
Bu tasarım kalıbını güçlendirmek için Python 3.11, istisna notlarını (PEP 678) sunuyor. Artık except bloklarınız içinde add_note() fonksiyonunu çağırıp bir hata yükselttiğinizde özel bir mesaj iletebilirsiniz.
import math
try:
math.sqrt(-1)except ValueError as e:
e.add_note("Negative value passed! Please try again.")raiseAltyapı:
Aşağıdaki gibi özel bir istisna sınıfı yazdıysanız, korumalı sınıf düzeyi öznitelik __notes__ içinde sınıfa birden fazla not ekleyebilirsiniz:
import math
classMyOwnError(Exception):# Should be a list of strings
__notes__ =["This is a custom error!"]try:
math.sqrt(-1)except:raise MyOwnErrorAltyapı:
Artık yorumlayıcı hatayla karşılaştığında, normal mesaj gövdesinin ardından özel mesajı da gösterecek.
Ayrıca, yeni ExceptionGroup sınıfıyla birlikte kullanılan except* bloğu ile istisnaları yükseltmek için yeni bir sözdizimi de var. PEP 654, bunu çeşitli senaryolarda ilgisiz birden fazla hatayı aynı anda yükseltmek için kullanabileceğinizi söylüyor. Bu durumların çoğu web soketleriyle çalışma, asyncio ile eşzamanlı programlama gibi gündelik veri bilimi işlerinde nadiren karşınıza çıkacak kadar niş; ancak ilginizi çekiyorsa yeni sözdizimi hakkında buradan bilgi edinebilirsiniz.
4. Yeni Tip Belirtimi: Self
Statik olarak tiplenen diller, kodunuzun okunabilirliğini ve hata ayıklanmasını kolaylaştırır. Değişkenlerin, fonksiyon girdilerinin ve çıktıların tam tipini tanımlamak, saatlerce sürecek hata ayıklama süresini kurtarabilir ve kodunuzu başkalarının okumasını kolaylaştırabilir. Tip notasyonları eklemek, modern IDE’lerin siz isimlerini yazarken fonksiyon tanımlarını göstermesini de sağlar; böylece fonksiyonlarınız başkalarınca daha kolay anlaşılır.
Bugüne kadar Python’daki güçlü typing modülü, kendisiyle ilgili örnekler döndüren sınıflar hariç, neredeyse her veri tipi için sınıflara sahipti. Mevcut Python sürümlerinde aşağıdaki örnek mümkün değildir:
from typing import Self
classLanguage:def__init__(self, name, version, release_date):
self.name = name
self.version = version
self.release_date = release_date
defchange_version(self, version)-> Self:
self.version = version
return Language(self.name, self.version, self.release_date)Altyapı:
Ancak Python 3.11, Self sınıfını tanıtıyor; eğer bir fonksiyonun dönüş değeri self ya da sınıfın yeni bir örneğiyse, bunu fonksiyon tanımına ekleyebilirsiniz.
5. Standart Kütüphanelerde İyileştirmeler
Standart kütüphanelerde birkaç başka kullanım kolaylığı iyileştirmesi de var. Öncelikle, math modülüne uzun zamandır beklenen iki fonksiyon eklendi.
>>>import math
>>> math.cbrt(9)# Find the cube-root of x2.080083823051904>>> math.cbrt(27)3.0000000000000004>>> math.exp2(5)# Raise 2 to the power of x32.0Altyapı:
Küp kök fonksiyonunun Python’a eklenmesinin 28 yıl almış olması oldukça şaşırtıcı; ama geç olsun güç olmasın.
fractions modülü de, string’lerden kesir oluşturmanıza olanak tanıyan yeni bir özellik ekledi:
>>>from fractions import Fraction
>>> Fraction("22/7")# New in Python 3.11
Fraction(22,7)>>> Fraction(numerator=22, denominator=7)
Fraction(22,7)>>> Fraction("3e-4")
Fraction(3,10000)>>> Fraction("-73/41")
Fraction(-73,41)>>> Fraction(3.1415)# Find the closest approximation to the given float
Fraction(7074029114692207,2251799813685248)Altyapı:
Görüldüğü gibi, fractions modülü belirli aritmetik işlemler için oldukça kullanışlı olabilir. Özellikle, verilen ondalık sayıyı en iyi yaklaştıran kesri bulabilmeniz hoşuma gidiyor. Bunu payda sınırı vererek bir adım daha ileri götürebilirsiniz:
>>>from math import pi
>>> Fraction(pi).limit_denominator(100000)
Fraction(312689,99532)Altyapı:
Ayrıca, TOML belgelerini ayrıştırmak için tomllib adında yeni bir modül var. TOML (Tom's Obvious Minimal Language), insan tarafından okunabilir yapılandırma dosyaları yazmak için popüler bir dosya biçimidir. İşte projenin ana sayfasından bir görsel:
Python 3.11’in geliştirmesi 5 Mayıs 2021’de başladı. O zamandan bu yana yedi alfa sürümü yayımlandı ve 8 Mayıs 2022’de ilk beta sürümüyle eşzamanlandı. Bu tarihten resmi sürüme kadar Python’a yeni özellik eklenmeyecek.
Nihai, kararlı sürüm; bu arada üç ek beta ve iki sürüm adayı sonrasında 3 Ekim 2022’de yayımlanacak. Python hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara göz atabilirsiniz.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Python, son dört yılın üçünde TIOBE "Yılın Dili" ödülünü kazandı. Popüler programlama dili, 2022’nin ortasında da TIOBE endeksinin zirvesinde yer alıyor.
Python, Haziran 2022 TIOBE Endeksi’nin zirvesinde.
Python’un %12,74’lük puanı, “Python” anahtar kelimesinin tüm programlama ilgili arama motoru sorgularının yaklaşık %13’ünde göründüğü anlamına gelir. Başka bir deyişle, internetteki her 7. veya 8. programlama sorusu Python hakkında.
Günümüzde Python, veri bilimi ve yapay zekâdaki en büyük atılımlarla sıklıkla ilişkilendiriliyor. Kullanıcılar, sadeliğini, çok çeşitli yerleşik ve üçüncü taraf kütüphanelerini ve topluluğunu takdir ediyor.
3.11’in nihai kararlı sürümünün 3 Ekim 2022’de gelmesiyle birlikte, Python topluluğunu kayda değer hız artışı, daha iyi hata ayıklama ve hata mesajları ve standart kütüphanelere yönelik çok sayıda kullanım kolaylığı iyileştirmesi dahil olmak üzere bir dizi hoş güncelleme bekliyor.
Python 3.11’in Yeni Özellikleri Neler?
Python 3.11 değişiklik günlüğü, çoğunu fark etmeyeceğiniz kadar uzun bir hata düzeltmeleri, iyileştirmeler ve eklemeler listesi içeriyor. Ancak, kararlı sürümle birlikte Python iş akışınızı ciddi şekilde iyileştirebilecek birkaç kritik yeni özellik var. Bu yenilikler aşağıda özetlenmiştir.
1. Hız Artışı
Veri bilimcileri için heyecan verici ilk büyük değişiklik hız artışı—standart kıyaslama paketi, 3.10’a kıyasla yaklaşık %25 daha hızlı çalışıyor. Python dokümanları, 3.11’in bazı durumlarda %60’a kadar daha hızlı olabileceğini belirtiyor. İşte hız artışlarını kendiniz test etmek için kıyaslamayı nasıl çalıştıracağınız.
Python 3.10 ve 3.11’in hızlarını karşılaştırmak için bir Docker kurulumu gerekecektir. Docker Desktop’ın çalıştığından emin olduktan sonra, iki Python sürümüne ait iki imajı indirmek için terminalde şu iki komutu çalıştırın.
İndirilen imajlar Docker panonuzda görünmelidir; buradan çalıştırabilirsiniz.
Konteynerleri başlattıktan sonra, docker ps komutunu çalıştırarak konteyner kimliği, imaj, durum ve daha fazlası gibi ayrıntıları görebilirsiniz.
Çalışan konteynerler ayrıca panodaki Containers sekmesinde görünür; "
Run/Stop"un yanındaki CLI düğmelerini de burada bulabilirsiniz. Her iki konteyner için de bu düğmelere tıklayarak konteynerlere bağlı iki terminal sekmesi açın.Her iki sekmede de
pipilepyperformancepaketini kurun. Ardından her konteyner terminalinde aşağıdaki komutları çalıştırın.Python 3.10 için
Python 3.11 için
Bu komutlar, standart kütüphanelerden yaklaşık 60 Python fonksiyonu için kıyaslama testlerini çalıştırır ve JSON meta verileri üretir. Testlerin sıkı olmasını istediğimi belirtmek için isteğe bağlı olarak
-retiketini ekledim; bu da daha uzun sürer. Benim durumda her iki konteyner de AMD Ryzen 12 çekirdekli CPU’ya sahip bir Windows makinede çalışıyor.Şimdi iki konteynerde iki JSON dosyamız var ve hız testine devam etmek için her ikisini de tek bir dizinde toplamamız gerekiyor. Bunun için, JSON dosyasını Python 3.11 konteynerinden 3.10’a kopyalamak üzere
docker cpkomutunu kullanacağız.Bilgisayarınızdaki doğru yolu yansıtacak şekilde yolu güncelleyerek, ayrı bir terminal sekmesinde aşağıdaki komutları çalıştırın:
Benim durumda,
crazy_snydervecharming_proskuriakova, çalışan konteynerlerin kimlikleri. Artık her iki JSON dosyası da Python 3.10 konteynerinde. Kıyaslamayı tamamlamak ve sonuçları CSV olarak kaydetmek için aşağıdaki komutları çalıştırın.Son olarak, CSV’yi Pandas ile yükleyip analiz edelim:
scimark_monte_carlomakochameleonfloatregex_effbotVeri çerçevesindeki her satır, verilen Python fonksiyonunu çalıştırmanın her iki sürümde ne kadar sürdüğünü (milisaniye cinsinden) kaydeder. Hız artışlarının bir histogramını çizelim.
Grafikten, Python 3.11’deki fonksiyonların çoğunun yaklaşık 1,2 kat (%20) daha hızlı olduğu açıkça görülüyor. Bu tahmini ortalama ve medyanla da doğrulayabiliriz.
Hız artışının %60’ı aştığı bir durum da var gibi görünüyor.
Ayrıca Python 3.10’un yeni sürümden daha hızlı olduğu dört vaka bulunuyor.
Performans artışları kâğıt üzerinde fark edilir olsa da, iyileştirmelerin somut etkisi kişiden kişiye değişecektir ve Python 3.11’in kararlı, nihai sürümü henüz yayımlanmadı. Kıyas testi, günlük işinizde çok kullanmayabileceğiniz saf Python fonksiyonlarını kullanır, ancak hem Python 3.10 hem de 3.11 için Docker kurulumu yapmak, kendi kullanım senaryolarınız için hız artışları hakkında fikir edinmenizi sağlayacaktır.
2. Daha İyi Hata Mesajları
Python 3.11’in bir diğer heyecan verici özelliği, hatanın tam konumunu işaret eden daha iyi hata mesajları. Yorumlanması zor bir hata mesajıyla biten 100 satırlık bir traceback döndürmek yerine, Python 3.11 hataya neden olan ifadeyi doğrudan gösteriyor.
Yukarıdaki örnekte, Python yorumlayıcısı, None değeri nedeniyle betiği çökerten x’i işaret ediyor. Mevcut Python sürümlerinde, ‘x’ özniteliğine sahip iki nesne olduğundan hata belirsiz olacaktı. Ancak 3.11’in hata işleme sistemi sorunlu ifadeyi açıkça gösteriyor.
Bu örnek, 3.11’in derin iç içe geçmiş bir sözlükteki hatayı nasıl tam olarak tespit ettiğini ve hatanın hangi anahtarla ilgili olduğunu net biçimde gösterebildiğini sergiliyor.
Aynı hassasiyeti karmaşık aritmetik ifadelerde de görebilirsiniz.
Güncellenmiş hata mesajları, özellikle betiklerde hata ayıklamakta zorlanan veri bilimciler için kesinlikle hoş bir yenilik.
3. İstisna Notları
“Açık, örtükten iyidir.”
Yukarıdaki cümle, Python’un 20 tasarım ilkesinden oluşan listesi olan Python’un Zen’inin ikinci satırıdır. Bu ilke, Python kodunun olabildiğince ifade gücü yüksek olması gerektiğini anlatır.
Bu tasarım kalıbını güçlendirmek için Python 3.11, istisna notlarını (PEP 678) sunuyor. Artık except bloklarınız içinde
add_note()fonksiyonunu çağırıp bir hata yükselttiğinizde özel bir mesaj iletebilirsiniz.Aşağıdaki gibi özel bir istisna sınıfı yazdıysanız, korumalı sınıf düzeyi öznitelik
__notes__içinde sınıfa birden fazla not ekleyebilirsiniz:Artık yorumlayıcı hatayla karşılaştığında, normal mesaj gövdesinin ardından özel mesajı da gösterecek.
Ayrıca, yeni ExceptionGroup sınıfıyla birlikte kullanılan except* bloğu ile istisnaları yükseltmek için yeni bir sözdizimi de var. PEP 654, bunu çeşitli senaryolarda ilgisiz birden fazla hatayı aynı anda yükseltmek için kullanabileceğinizi söylüyor. Bu durumların çoğu web soketleriyle çalışma,
asyncioile eşzamanlı programlama gibi gündelik veri bilimi işlerinde nadiren karşınıza çıkacak kadar niş; ancak ilginizi çekiyorsa yeni sözdizimi hakkında buradan bilgi edinebilirsiniz.4. Yeni Tip Belirtimi: Self
Statik olarak tiplenen diller, kodunuzun okunabilirliğini ve hata ayıklanmasını kolaylaştırır. Değişkenlerin, fonksiyon girdilerinin ve çıktıların tam tipini tanımlamak, saatlerce sürecek hata ayıklama süresini kurtarabilir ve kodunuzu başkalarının okumasını kolaylaştırabilir. Tip notasyonları eklemek, modern IDE’lerin siz isimlerini yazarken fonksiyon tanımlarını göstermesini de sağlar; böylece fonksiyonlarınız başkalarınca daha kolay anlaşılır.
Bugüne kadar Python’daki güçlü typing modülü, kendisiyle ilgili örnekler döndüren sınıflar hariç, neredeyse her veri tipi için sınıflara sahipti. Mevcut Python sürümlerinde aşağıdaki örnek mümkün değildir:
Ancak Python 3.11, Self sınıfını tanıtıyor; eğer bir fonksiyonun dönüş değeri self ya da sınıfın yeni bir örneğiyse, bunu fonksiyon tanımına ekleyebilirsiniz.
5. Standart Kütüphanelerde İyileştirmeler
Standart kütüphanelerde birkaç başka kullanım kolaylığı iyileştirmesi de var. Öncelikle, math modülüne uzun zamandır beklenen iki fonksiyon eklendi.
Küp kök fonksiyonunun Python’a eklenmesinin 28 yıl almış olması oldukça şaşırtıcı; ama geç olsun güç olmasın.
fractions modülü de, string’lerden kesir oluşturmanıza olanak tanıyan yeni bir özellik ekledi:
Görüldüğü gibi, fractions modülü belirli aritmetik işlemler için oldukça kullanışlı olabilir. Özellikle, verilen ondalık sayıyı en iyi yaklaştıran kesri bulabilmeniz hoşuma gidiyor. Bunu payda sınırı vererek bir adım daha ileri götürebilirsiniz:
Ayrıca, TOML belgelerini ayrıştırmak için
tomllibadında yeni bir modül var. TOML (Tom's Obvious Minimal Language), insan tarafından okunabilir yapılandırma dosyaları yazmak için popüler bir dosya biçimidir. İşte projenin ana sayfasından bir görsel:Python 3.11 Çıkış Tarihi
Python 3.11’in geliştirmesi 5 Mayıs 2021’de başladı. O zamandan bu yana yedi alfa sürümü yayımlandı ve 8 Mayıs 2022’de ilk beta sürümüyle eşzamanlandı. Bu tarihten resmi sürüme kadar Python’a yeni özellik eklenmeyecek.
Nihai, kararlı sürüm; bu arada üç ek beta ve iki sürüm adayı sonrasında 3 Ekim 2022’de yayımlanacak. Python hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara göz atabilirsiniz.