Soru sorulup cevaplandıktan sonra, Python'a tip ipuçları eklendi . Python'daki tip ipuçları tiplerin kontrol edilmesine izin verir, ancak statik olarak yazılan dillerden çok farklı bir şekilde. Python dilinde yaz ipuçları fonksiyonları ile ilişkili çalışma zamanı erişilebilir veri olarak fonksiyonları ile argümanlar beklenen türlerini ilişkilendirmek ve bu izin verir tipleri kontrol edilecek için. Tip ipucu sözdizimi örneği:
def foo(i: int):
return i
foo(5)
foo('oops')
Bu durumda foo('oops')
, argümanın açıklamalı türü olduğundan bir hatanın tetiklenmesini istiyoruz int
. Eklenen tür ipucu , komut dosyası normal olarak çalıştırıldığında bir hata oluşmasına neden olmaz . Ancak, diğer programların sorgulayabileceği ve tür hatalarını denetlemek için kullanabileceği beklenen türleri açıklayan işleve öznitelikler ekler.
Tür hatasını bulmak için kullanılabilecek bu diğer programlardan biri mypy
:
mypy script.py
script.py:12: error: Argument 1 to "foo" has incompatible type "str"; expected "int"
( mypy
Paket yöneticinizden yüklemeniz gerekebilir . CPython ile geldiğini düşünmüyorum, ancak bir miktar "resmiyet" var gibi görünüyor.)
Bu yolla yazım denetimi, statik olarak yazılan derlenmiş dillerde yazım denetiminden farklıdır. Python'da türler dinamik olduğu için, tür denetlemesi çalışma zamanında yapılmalıdır, bu da her fırsatta ısrar edersek - doğru programlarda bile - bir maliyet oluşturur. Açık tür denetimleri de gerekenden daha kısıtlayıcı olabilir ve gereksiz hatalara neden olabilir (örneğin, argümanın gerçekten tam olarak olması gerekiyor list
mu veya yeterli bir şey var mı?).
Açık tip denetiminin tersi, hataları daha erken yakalayabilmesi ve ördek yazımından daha net hata mesajları verebilmesidir. Ördek tipinin kesin gereklilikleri sadece harici belgelerle (umarım eksiksiz ve doğrudur) ifade edilebilir ve uyumsuz tiplerden kaynaklanan hatalar kaynaklandıkları yerden uzakta meydana gelebilir.
Python'un tip ipuçları, tiplerin belirtilebileceği ve kontrol edilebileceği bir uzlaşma sunmak içindir, ancak normal kod yürütme sırasında ek bir maliyet yoktur.
typing
Tipi ipuçları kullanılabilecek paket teklifler tip değişkenler belirli türleri gerektirmeden gerekli davranışları ifade etmek. Örneğin, bu davranışlara sahip herhangi bir türe duyulan ihtiyacı belirtmek için Iterable
ve gibi Callable
ipuçları içeren değişkenler içerir .
Tür ipuçları türleri kontrol etmenin en Pythonic yolu olsa da, türleri hiç kontrol etmemek ve ördek yazımına güvenmek genellikle daha da Pythonic'tir. Tip ipuçları nispeten yenidir ve jüri en Pythonic çözümü olduklarında hala açıktır. Nispeten tartışmalı fakat çok genel bir karşılaştırma: Tür ipuçları, uygulanabilecek, kodun daha erken ve daha kolay anlaşılabilecek hatalar üretmesine izin veren, ördek yazmanın yapamayacağı hataları yakalayabilen ve statik olarak (olağandışı bir şekilde) kontrol edilebilen bir belge biçimi sağlar ama yine de çalışma zamanının dışında). Öte yandan, ördek yazmak uzun zamandır Pythonic yoludur, statik yazmanın bilişsel yükünü dayatmaz, daha az ayrıntılıdır ve tüm uygulanabilir türleri ve sonra bazılarını kabul eder.