PYTHON 3.7’DEKI YENILIKLER

Python 3.7 veri işleme, komut dosyası derleme ve çöp toplama için optimizasyonlar ve daha hızlı asenkron G / Ç için yeni sınıflar ekliyor


Karmaşık görevleri basitleştirmeyi amaçlayan en son sürüm olan Python 3.7, beta sürüm aşamasına resmi olarak girdi. Python 3.7’in son sürümü Haziran 2018’de yayınlanacak ancak bu noktadan itibaren Python 3.7 sürümüne hiçbir yeni özellik eklenmeyecek.

Python 3.7’nin en önemli eklemeleri ve geliştirmeleri şunları içerir:

  • Sınıflardaki verilerle çalışılırken hazır hale getirilmiş olanları indiren veri sınıfları.
  • Jeneratörlerdeki istisnaların ele alınmasıyla geriye dönük olarak uyumsuz bir değişiklik.
  • Tercüman için bir “gelişim modu”.
  • Nanosaniye çözünürlüklü zaman nesneleri.
  • Ortamda varsayılan olarak UTF-8 kodlamayı kullanan UTF-8 modu.
  • Hata ayıklayıcıyı tetiklemek için yeni bir dahili.

Python veri sınıfları

Python yapılandırılmış veriyi değiştirmek için hızlı ve kullanışlı bir yol olarak çok geniş ve yaygın olarak bilinir. Python, verileri yapılandırmak ve ortak davranışları bu verilerin örneklerine eklemek için sınıflar sağlar; ancak, birçok başlatıcıyı içeren sınıflar, onları örneklendirmek için çok sayıda genelleştirmeye ihtiyaç duymaktadır. Örneğin:

class User():
     def __init__(self, name, user_id, just_joined=True): 
        self.name = name 
        self.id = user_id 
        self.just_joined = just_joined

Bu tür sınıf örneklemesini otomatikleştirmek için Python 3.7 dataclasses, PEP 557’de açıklandığı gibi yeni bir modül tanıtır . Yukarıdaki davranışın daha basit bir şekilde yeniden üretilmesini sağlayan bir dekoratör sağlar:

@dataclass class User(): 
    name: str  
   user_id: int   
  just_joined: bool=True

Ortaya çıkan sınıf, düzenli bir Python sınıfı gibi çalışır. Ayrıca “donmuş” veya değişmez belirli alanları beyan ve otomatik (veya elle geçersiz) özel yöntemlerin oluşturulmasını özelliklerine gibi olabilir __hash__ya __repr__.

Python jeneratör özel durum işleme

PEP 479’da özetlendiği gibi şimdi bir süredir işlerde olan bir değişiklik, StopIterationbir Python jeneratörü tarafından ortaya çıkarılan bir istisnanın ayıklanmasını kolaylaştırmak üzere tasarlanmıştır . Daha önce bir jeneratörün, StopIterationbaşka bir problemle karşılaştığı zaman, bunun yerine yinelenmesi gereken şeylerin bittiğinden daha kolay olması çok kolay oldu . Bu, izlenmesi zor olan bir böcek sınıfını yarattı.

Python 3.7 ile bir üreticinin bir StopIterationistisna oluşturması durumunda, StopIterationistisna istisna olarak çevrilir, RuntimeErrorböylece uygulamanın yığın kareleri boyunca sessizce kabarcıklanmaz. Bu, jeneratör davranışlarını nasıl ele aldığına dair çok fazla sezgisel olmayan bazı programların bir RuntimeErrorPython 3.7 yazması anlamına gelmektedir. Python 3.6’da, bu davranış bir kullanımdan kaldırılma uyarısı üretti; Python 3.7’de tam bir hata üretir.

Hızlı bir düzeltme, jeneratörün dışına yayılmadan önce try/exceptyakalamak için bir blok kullanmaktır  StopIteration. Daha iyi bir çözüm, jeneratörlerin nasıl inşa edildiğini yeniden düşünmektir-örneğin, returnelle kaldırmak yerine bir jeneratörü sonlandırmak için bir bildirim  kullanmak StopIteration.  Mevcut kodda bunun nasıl düzeltileceği ve yeni kodla korunması için daha fazla bilgi için PEP 469’a bakın .

Python geliştirme modu

Python yorumlayıcısı için yeni bir komut satırı anahtarı -X, geliştiricinin tercüman için bir dizi düşük düzey seçeneği belirlemesine izin verir. Python 3.7 ile bu seçenek -X dev“geliştirme modu” nu etkinleştirir, normalde performans üzerinde büyük bir etkisi olan, ancak hata ayıklama işlemi sırasında bir geliştirici için yararlı olan bir sürü çalışma zamanı denetimi.

Etkinleştirilen seçenekler -X devşunları içerir:

  • asyncioModül için hata ayıklama modu . Bu, hata ayıklama veya nedeni zor olan asenkron işlemler için daha ayrıntılı günlüğe kaydetme ve özel durum işleme sağlar.
  • Bellek ayırıcıları için kanca hata ayıklama . Bu, CPython uzantılarını yazanlar için yararlıdır. CPython’un dahili olarak belleği nasıl ayırdığı ve boşaldığı konusunda daha açık çalışma zamanı kontrolleri sağlar.
  • faulthandlerModülün etkinleştirilmesi , böylece bir geri yüklemenin çökmesinden sonra daima geri çekilmesi sağlanır.

Nanosaniye çözünürlüklü Python zaman fonksiyonları

Python 3.7’de yeni bir zaman sınıfı fonksiyonları nanosaniye hassaslığı ile zaman değerlerini döndürür. Python yorumlanmış bir dil olmasına rağmen, Python çekirdek geliştiricisi Victor Stinner , nanosaniye doğruluğuyla zamanı bildirme davası açtı . En büyük sebep, veritabanları gibi diğer programlar tarafından kaydedilen zaman değerlerini dönüştürmekle uğraşırken kesinlik kaybetmemektir.

Yeni zaman fonksiyonları son eki kullanır _ns. Örneğin, bir nanosaniye versiyonu time.process_time()olan time.process_time_ns(). Tüm zaman işlevlerinin nanosaniye eşdeğeri olmadığını, bazılarının ondan fayda görmediğini unutmayın.

Python UTF-8 modu

Python dizeleri ve metinleri kolaylıkla işlemek için uzun zamandır UTF-8’i desteklemiştir. Ancak çevredeki ortamdaki yerel ayar hala bazen ASCII’dir, yerel olarak UTF-8 değildir ve yerel ayarları tespit etme mekanizmaları her zaman güvenilir değildir.

Python 3.7, -Xkomut satırı anahtarı aracılığıyla etkinleştirilen , UTF-8’in ortam tarafından sağlanan yerel ayar olduğunu varsayan “UTF-8 modu” nu ekler . POSIX yerel ayarlarında, varsayılan olarak UTF-8 modu etkinleştirilir, ancak geriye doğru uyumluluğu engellemek için varsayılan olarak başka yerlerde devre dışı bırakılmıştır. Varsayılan olarak UTF-8 modu açık olarak denemeye değer; ancak, Python ve çevredeki çevre arasındaki tüm etkileşimlerin UTF-8 kullandığından emin oluncaya kadar üretimde etkinleştirilmemelidir  .

Dahili  breakpoint() fonksiyon

Python, dahili hata ayıklayıcıyla birlikte gelir; ancak üçüncü taraf hata ayıklama araçlarına da bağlanabilir; ancak Python’un dahili hata ayıklama API’sı ile konuşabildikleri sürece. Yine de, Python’un şimdiye kadar sahip olmadığı şey, programlayıcı olarak bir Python uygulaması içinden hata ayıklayıcıyı tetikleyecek standart bir yöntemdir.

Python 3.7 breakpoint(), çağrıldığında hata ayıklayıcıya geçilmesine neden olan yerleşik bir işlev ekler . Söz konusu hata ayıklayıcının, Python’un kendi pdb’si olması gerekmiyor; daha önce seçtiğiniz hata ayıklayıcı olarak ayarlanmış olan herhangi bir hata ayıklayıcı olabilir. Daha önce, hata ayıklayıcı, daha ayrıntılı kod için yapılan elle, daha sonra çağrıldığında ayarlanmış olurdu. breakpoint()hata ayıklayıcıyı tek bir komutla çağırmayı ve hata ayıklayıcıyı kurmadan ve çağırmadan temiz bir ayrım yapmamayı mümkün kılar.

Diğer yeni Python 3.7 özellikleri

Pek çok değişiklik Python 3.7’ye indi. Python’un en son sürümüyle çalışırken karşılaşmanız muhtemel diğer bazıları:

İş parçacığı – yerel depolama desteği için C API

Konu özel depolama (TSS) API tarif PEP 539 , eski yerel depolama (TLS) API Konu yerini alır. CPython’u özelleştiren ya da tercümanın dahili API’lerini kullanan CPython uzantıları yazanların bunun farkında olması gerekir.

Modül öznitelik erişimi özelleştirme

Bir Python programında bir modül oluşturduğunuzda, artık bu modülün örnekleri üzerindeki özellik erişiminin davranışını özelleştirebilirsiniz. Bunu, __getattr__bir sınıf için olduğu gibi modülde bir yöntem oluşturarak yapabilirsiniz  . Bu şekilde, varolmayan işlevler veya modül içindeki yöntemler gibi istekler, engellenebilir, işaretlenebilir veya proxy edilebilir.

Python importlibkaynakları

importlibModül artık “kaynaklar” veya böyle bir veri dosyası olarak bir Python uygulaması ile sevk ikili eserler okumak için kullanılabilir. Bu şekilde, bir geliştirici bu dosyalara importlibsoyutlamalar yoluyla erişebilir; bu nedenle .zip dosyasında veya sistemin herhangi bir yerindeki bir dizinde saklanıp saklanmadığı önemli değildir.

Başlık altındaki optimizasyonlar

Birçok bireysel işlem artık daha hızlı:

  • Yeni opcode sayesinde yöntem çağrıları% 20’ye kadar çıkabiliyor . (Python işlem kodlarını doğrudan işleyen bir kod yazmadığınız sürece bunun etkilerinden endişelenmeniz gerekmez.)
  • Normal ifadelerde büyük / küçük harfe duyarlı olmayan eşleme , bazen 20 kat daha hızlı olur.
  • Kaynak kodundaki bazı sabitler artık daha verimli bir şekilde optimize edilmiştir .

Python 3.7’deki yeniliklerin tamamının özeti için Python Software Foundation,  tüm ayrıntıları kapsayan bir belge yayınladı . Son dakika değişikliklerini eklemek için Python 3.7’in resmi sürümüne güncellenecektir.

Python 3.7’yi indirin

Python 3.7 hala beta aşamasında iken, Python Software Foundation’ın yayın öncesi indirme sayfasından edinebilirsiniz .

[zombify_post]

İçeriği Beğendin mi?
  • Fascinated
  • Happy
  • Sad
  • Angry
  • Bored
  • Afraid

Yorumlar 0

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

PYTHON 3.7’DEKI YENILIKLER