piton | ||
İlk sürüm tarihi | 20 Şubat 1991 | |
---|---|---|
paradigmalar | Amaç , zorunluluk ve işlevsel | |
Yazar | Guido van Rossum | |
geliştiriciler | Python Yazılım Vakfı | |
Son sürüm | 3.9.6 (28 Haziran 2021) | |
Sürüm geliştirme | 3.10.0b4 (10 Temmuz 2021) | |
Yazıyor | Güçlü , dinamik , ördek yazımı | |
Tarafından etkilenmiş | ABC , C , Eiffel , ICON , Modula-3 , Java , Perl , Smalltalk , Tcl | |
Etkilenen | Ruby , Harika , Boo , Julia | |
Uygulamalar | CPython , Jython , IronPython , PyPy | |
Yazılmış | CPython için C , Jython için Java , IronPython için C# ve PyPy için Python'un kendisinde | |
İşletim sistemi | Çoklu platform | |
Lisans |
Ücretsiz lisans : Python Yazılım Vakfı Lisansı |
|
İnternet sitesi | www.python.org | |
Dosya uzantısı | py, pyc, pyd, pyo, pyw, pyz ve pyi | |
Python (telaffuz edilen / p i . T ɔ / ), yorumlanan , çoklu paradigma ve platformlar arası bir programlama dilidir . Bu kullanılmasını destekler yapılandırılmış , fonksiyonel ve nesne yönelimli zorunlu programlama . It has güçlü dinamik yazarak , otomatik bellek yönetimi tarafından çöp toplama ve istisna yönetim sistemi ; bu nedenle Perl , Ruby , Scheme , Smalltalk ve Tcl'ye benzer .
Python dili altında yerleştirilir ücretsiz lisans için yakın BSD lisansı çoğunda ve eserleri bilgisayar platformları gelen, akıllı telefonlar için büyük bilgisayarlardan gelen, Windows'un için Unix özellikle birlikte GNU / Linux aracılığıyla MacOS , hatta Android , iOS ve ayrıca olabilir Java veya .NET'e çevrildi . Üst düzey araçlar ve kullanımı kolay bir sözdizimi sunarak programcıların üretkenliğini optimize etmek için tasarlanmıştır .
Ayrıca, düşük seviyeli mekanizmalardan açıkça ayrılan sözdiziminin, programlamanın temel kavramlarına kolay bir başlangıç yapılmasına izin verdiği bir dil bulan bazı pedagoglar tarafından da takdir edilmektedir .
Python, birçok bağlamda kullanılabilen ve özel kütüphaneler sayesinde her türlü kullanıma uyum sağlayan bir programlama dilidir . Bununla birlikte, özellikle , internetten hava durumunu alacak veya belirli tekrarlayan eylem dizilerini otomatikleştirmek için bilgisayar destekli tasarım yazılımına entegre edilecek bir komut dosyası gibi basit ama sıkıcı görevleri otomatikleştirmek için bir komut dosyası dili olarak kullanılır (bkz. Benimseme bölümü ). Ayrıca, daha düşük seviyeli bir dille optimize edilmeden önce işlevsel bir uygulamaya ihtiyaç duyulduğunda prototip geliştirme dili olarak da kullanılır. Özellikle bilim dünyasında yaygındır ve sayısal hesaplama için optimize edilmiş birçok kütüphaneye sahiptir .
Geç Gelen 1980'lerin , programcı Guido van Rossum edildi gelişiminde rol oynayan ABC programlama dili de Centrum voor Wiskunde tr Informatica içinde (CWI) Amsterdam , Hollanda . Daha sonra , sistem çağrılarının kullanıcı arabirimi olarak kullanılan Bourne kabuğuyla arabirim oluşturması zor olan Amoeba işletim sistemi ekibinde çalıştı . Daha sonra ABC'den ilham alan bir betik dilinin Amip için bir komut yorumlayıcısı olarak ilginç olabileceğine inanıyor .
In 1989 , sırasında bir hafta tatil yararlanarak Noel tatilleri , onun kullanılan kişisel bilgisayar dilinin ilk sürümünü yazmak için. Monty Python's Flying Circus adlı televizyon dizisinin hayranı olan bu proje Python'u vaftiz etmeye karar verir. Sözdizimi veya yüksek seviyeli türler gibi girintiler için esas olarak ABC'den, ayrıca istisna işleme , C dili ve UNIX araçları için Modula-3'ten ilham aldı .
Ertesi yıl, dil Amoeba proje ekibi tarafından benimsenmeye başlandı ve Guido çoğunlukla boş zamanlarında gelişmeye devam etti. İçindeŞubat 19910.9.0 numaralı ilk genel sürüm Usenet alt.sources forumunda yayınlanmıştır . CWI'de yayınlanan en son sürüm Python 1.2'dir.
In 1995 , Van Rossum de Python üzerine çalışmalarına devam etti CNRI (in) de Reston , ABD'nin o yazılımın farklı versiyonlarını piyasaya.
itibaren'Ağustos 1995Python ekibi üzerinde NCRI çalışmaktadır Kase bir web tarayıcısı kullanarak Tk . HotJava tarayıcısının Python eşdeğeridir ve uygulamaları güvenli bir ortamda çalıştırmanıza olanak tanır . Kasım ayında kullanıma sunulan ilk genel sürüm 0.2'dir. rexec , htmllib veya urllib gibi standart kitaplık için modüllerin geliştirilmesini sağlar . Sürüm 0.6, Grail'in son sürümü olacak ; şurada yayınlandıNisan 1999.
In 1999 , Herkes İçin Bilgisayar Programlama (CP4E) projesi CNRI arasında ortaklaşa başlatılan DARPA . Python'u bir programlama öğretim dili olarak kullanmakla ilgilidir . Bu girişim, IDLE geliştirme ortamının yaratılmasına yol açacaktır . Ancak, proje için DARPA tarafından finansman eksikliği ve birçok Python geliştiricisinin NCRI'dan (Guido van Rossum dahil) ayrılması nedeniyle, proje 2000 yılında sona erdi. Python 1.6, NCRI'de yayınlanan son sürümdü.
In 2000 , çekirdek Python geliştirme ekibi taşındı BeOpen.com oluşturmak üzere BeOpen PythonLabs takımı . Python 2.0, BeOpen.com'da yayınlanan tek sürümdür. Bu sürümden sonra, Guido Van Rossum ve diğer PythonLabs geliştiricileri Digital Creations'a (şimdi Zope Corporation olarak bilinir ) katıldı .
Andrew M. Kuchling'in yayınladığı Aralık 1999Dile karşı en sık dile getirilen şikayetleri sentezleyen Python Warts adlı bir metin . Bu belge, dilin gelecekteki gelişmeleri üzerinde kesin bir etkiye sahip olacaktır.
Python 2.1, Python 1.6.1 ve Python 2.0'ın türetilmiş bir sürümüdür. Lisansı Python Software Foundation License olarak yeniden adlandırıldı . Python 2.1 alpha'nın piyasaya sürülmesinden bu yana eklenen tüm kodlar , belgeler ve spesifikasyonlar, 2001 yılında kurulan ve Apache Software Foundation'dan sonra modellenen kar amacı gütmeyen Python Software Foundation'a (PSF) aittir .
Bazı dil kusurlarını düzeltmek (örneğin , iki tür sınıfla nesne yönelimli ) ve standart kitaplığını eski ve gereksiz öğelerinden temizlemek için Python, yeni ana sürüm olan Python 3.0'da geriye dönük uyumluluğu bozmayı seçti.aralık 2008. Bu sürümü hızlı bir şekilde sürüm 3.0'ın erken hatalarını düzelten bir sürüm 3.1 takip eder.
Python okunabilir bir dil olarak tasarlanmıştır. Görsel olarak temiz olmayı hedefler. Örneğin, C , Perl veya Pascal gibi birçok yapılandırılmış dilden daha az sözdizimsel yapıya sahiptir . Yorumlar çapraz karakter (#) ile belirtilir.
Bloklar ile tanımlanır girinti yerine olarak parantez C ya da C ++ ; ya begin ... endolduğu gibi Pascal veya Ruby . Girintiyi artırmak bir bloğun başlangıcını, girintiyi azaltmak ise mevcut bloğun sonunu işaretler. Geleneksel olarak (şu anda PEP8), girinti Python'da genellikle dört boşluktur.
C'de faktöriyel fonksiyon | Python'da faktöriyel fonksiyon |
---|---|
int factorielle(int n) { if (n < 2) { return 1; } else { return n * factorielle(n - 1); } } | def factorielle(n): if n < 2: return 1 else: return n * factorielle(n - 1) |
Not: Girinti, davranışını değiştirmeden C versiyonunda değiştirilebilir veya kaldırılabilir. Aynı şekilde Python işlevi de koşullu bir ifadeyle yazılabilir. Ancak doğru girinti, birkaç blok iç içe geçtiğinde hataların tespit edilmesini kolaylaştırır ve bu nedenle bu hataların ortadan kaldırılmasını kolaylaştırır. Bu nedenle programları C'de girintilemek tercih edilir. Kısa versiyon şu şekilde yazılır:
C'de faktöriyel fonksiyon | Python'da faktöriyel fonksiyon |
---|---|
int factorielle(int n) { return n < 2 ? 1 : n * factorielle(n - 1); } | def factorielle(n): return n * factorielle(n - 1) if n > 1 else 1 |
keyword.kwlistModül listesinde Python dili için ayrılmış anahtar sözcükler sağlanır keyword.
Python 2.7.5 anahtar kelimeler: and, as, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while, with, yield.
Python 3.0'dan itibaren printve execartık dil anahtar sözcükleri değil, modül işlevleridir builtins. Anahtar kelimelere eklenir: True, False, Noneve nonlocal. İlk üçü önceki sürümlerde zaten mevcuttu, ancak artık düzenlenemezler (önceden atama True = 1mümkündü). nonlocalPEP 3104 tarafından tanıtıldı ve başka bir işlevin içinde tanımlanan bir işlevde, daha yüksek düzeyde bir kapsam değişkenini değiştirmeye izin verir . Bundan önce, yalnızca işlev için yerel ve global (modül düzeyi) değişkenler değiştirilebilirdi. Bununla birlikte, nonlocaldaha yüksek bir kapsam düzeyine sahip bir değişkene atanan bir nesneyi, örneğin yöntemli bir listeyi değiştirmek , anahtar sözcüğü olmadan mümkündü ve hala mümkün append- bu, değişmeyen bir nesne için açıkça imkansızdır .
Temel tiplerPython'daki temel türler nispeten kapsamlı ve güçlüdür. Diğerleri arasında şunlar vardır:
Yinelenebilir nesneler foraşağıdaki gibi döngülenir :
for element in objet_iterable: traiter(element)Bir karakter dizisi için yineleme karakter karakter ilerler.
Kendi türlerinizi oluşturmak için temel türlerden sınıflar türetmek mümkündür. Dilin yineleme protokolünü kullanarak temel yinelenebilir öğeleri devralmadan kendi yinelenebilir nesne türlerinizi de oluşturabilirsiniz.
Fonksiyonel programlamaPython, işlevsel bir tarzda programlamaya izin verir . Ayrıca liste anlayışları vardır ve daha genel olarak anlayışlar jeneratörler, sözlükler veya setler üretebilir . Örneğin, 10'dan küçük doğal sayıların karelerinin listesini oluşturmak için şu ifadeyi kullanabiliriz:
liste = [x**2 for x in range(10)] # liste = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]Çift sayıların listesi :
liste = [entier for entier in range(10) if entier % 2 == 0] # liste = [0, 2, 4, 6, 8]Alfabenin harflerinden ASCII kodlarına geçiş tablosu :
{chr(n): n for n in range(65, 91)}Bir kelimedeki harf kümesi (kümeyi üretir {'r', 'c', 'd', 'b', 'a'}):
s = "abracadabra" {c for c in s}Bir kavrama, birden çok döngü ve filtreden oluşabilir ve aynı hesaplamayı talimatları kullanarak gerçekleştiren kodla bir yazışma vardır forve if :
Anlama | eşdeğer kod |
---|---|
[ i + j if i != j else 0 for i in range(n) if i % 2 != 0 for j in range(n) if j % 3 != 0 ] | a = [] for i in range(n): if i % 2 != 0: for j in range(n): if j % 3 != 0: a.append(i + j if i != j else 0) |
Sınırlı bir anonim işlev biçimi mümkündür:
lambda x: x + 2Lambda işlevleri satır içi olarak tanımlanabilir ve işlevsel ifadelerde bağımsız değişken olarak kullanılabilir:
filter(lambda x: x < 5, une_liste)a_list'in 5'ten küçük öğelerinden oluşan bir liste döndürür.
[x for x in une_liste if x < 5]Python lambdaları yalnızca ifadeleri kabul eder ve genelleştirilmiş anonim işlevler olarak kullanılamaz; ancak Python'da tüm işlevler nesnedir, bu nedenle diğer işlevlere argüman olarak iletilebilir ve gerektiğinde çağrılabilir. Aslında, def ile tanımlanan bir fonksiyon başka bir fonksiyonun içinde oluşturulabilir ve böylece yerel bir değişkende bir fonksiyon tanımı elde ederiz, örneğin:
def filtre_inferieur_a_5(une_liste): def mon_filtre(x): # variable locale mon_filtre return x < 5 return filter(mon_filtre, une_liste)Yerel bir işlev, onu oluşturan işlevin ortamını anahtar kelime sayesinde değiştirebilir nonlocal(bkz. Kapatma (IT) ):
def accum(pas): total = 0 def ajoute(n): nonlocal total total += n * pas return total return ajouteBu nedenle, her biri kendi toplamına atıfta bulunan birkaç akümülatör oluşturmak mümkündür. Özniteliği kullanarak yerel bir işlevin ortamına erişmek mümkündür __closure__.
nesne programlamaTüm temel türler, işlevler, sınıf örnekleri ( C++ ve Java dillerinin "klasik" nesneleri ) ve sınıfların kendileri (meta sınıfların örnekleridir) nesnelerdir.
Anahtar kelime ile bir sınıf tanımlanır class. Sınıfları Python destek birden çok devralma ; C++'da olduğu gibi statik aşırı yüklenme veya Java'da olduğu gibi kalıtımla ilgili kısıtlamalar yoktur (bir sınıf birkaç arabirim uygular ve tek bir sınıftan miras alır), ancak isteğe bağlı argümanların ve anahtar kelimeye göre mekanizması daha genel ve daha esnektir . Python'da, bir nesnenin niteliği bir örneğe veya sınıf değişkenine (çoğunlukla bir yöntem) başvurabilir. Bir niteliği dinamik olarak aşağıdaki işlevlerle okumak veya değiştirmek mümkündür:
İki basit sınıf örneği:
class Personne: def __init__(self, nom, prenom): self.nom = nom self.prenom = prenom def presenter(self): return self.nom + " " + self.prenom class Etudiant(Personne): def __init__(self, niveau, nom, prenom): Personne.__init__(self, nom, prenom) self.niveau = niveau def presenter(self): return self.niveau + " " + Personne.presenter(self) e = Etudiant("Licence INFO", "Dupontel", "Albert") assert e.nom == "Dupontel" Özel yöntemler ve operatörlerin tanımıPython, önceden tanımlanmış bir operatörler kümesini tanımlamak için zarif, nesne yönelimli bir mekanizma sağlar: herhangi bir Python nesnesine özel yöntemler olarak adlandırılanlar verilebilir.
İki alt çizgi ile başlayan ve biten bu yöntemler, nesne üzerinde bir operatör kullanıldığında çağrılır: +(method __add__), +=(method __iadd__), [](method __getitem__), ()(method __call__), vb. Gibi yöntemler __repr__ve __str__bir nesnenin etkileşimli yorumlayıcıdaki temsilini ve yazdırma işleviyle oluşturulmasını tanımlamanıza olanak tanır .
Olasılıklar çoktur ve dil belgelerinde açıklanmıştır.
Örneğin, iki boyutlu iki vektörün eklenmesini aşağıdaki sınıfla tanımlayabiliriz:
class Vector2D: def __init__(self, x, y): # On utilise un tuple pour stocker les coordonnées self.coords = (x, y) def __add__(self, other): # L'instruction a+b sera résolue comme a.__add__(b) # On construit un objet Vector2D à partir des coordonnées propres à l'objet, et à l'autre opérande return Vector2D(self.coords[0]+other.coords[0], self.coords[1]+other.coords[1]) def __repr__(self): # L'affichage de l'objet dans l'interpréteur return "Vector2D(%s, %s)" %self.coords a = Vector2D(1, 2) b = Vector2D(3, 4) print(a + b) # Vector2D(4, 6) jeneratörleryieldBir fonksiyonda kullanılan anahtar kelime , bu fonksiyonun bir üreteç olmasını mümkün kılar. Bu işlevin çağrılması , örneğin bir döngüde kullanılabilen üreteç türünde bir nesne döndürür for.
Her aramada, üreteç anahtar kelime ile karşılaşana kadar işlemesini gerçekleştirir yield, ifadenin değerini döndürür yieldve bir sonraki aramada akışına yield. Örneğin Fibonacci dizisini hesaplamak için şunu yazabiliriz:
def gen_fibonacci(): """Générateur de la suite de Fibonacci""" a, b = 0, 1 while True: yield a # Renvoie la valeur de "a", résultat de l'itération en cours a, b = b, a + b fi = gen_fibonacci() for i in range(20): print(next(fi))Modül itertools, jeneratörleri manipüle etmenizi sağlar. Örneğin, önceki oluşturucudan ilk 10 öğeyi çıkarmak için:
import itertools list(itertools.islice(gen_fibonacci(), 10)) # renvoie [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]Python 3.3'ten bu yana yield from, PEP 380'de görünen ve hesaplamayı bir alt oluşturucuya “temsil eden” sözdizimi sayesinde özyinelemeli bir işlevden bir üreteç üretmek mümkündür . Aşağıdaki örnek, n × n boyutunda bir satranç tahtasına uzatılan sekiz vezir probleminin çözümlerine karşılık gelen vezirlerin permütasyonlarını hesaplar .
def queens(n): a = list(range(n)) up = [True] * (2 * n - 1) down = [True] * (2 * n - 1) def sub(i): for k in range(i, n): j = a[k] p = i + j q = i - j + n - 1 if up[p] and down[q]: if i == n - 1: yield tuple(a) else: up[p] = down[q] = False a[i], a[k] = a[k], a[i] yield from sub(i + 1) up[p] = down[q] = True a[i], a[k] = a[k], a[i] yield from sub(0) sum(1 for a in queens(8)) # Nombre de solutions, renvoie 92Bir oluşturucu, bir liste döndüren bir işlevle aynı görünebilir, ancak tüm öğelerini içeren bir listeden farklı olarak , bir oluşturucu, öğelerini tek tek hesaplar .
Böylece test 36 in [n * n for n in range(10)], tam olarak hesaplanan liste üzerinde gerçekleştirilecek, oysa 36 in (n * n for n in range(10))bir jeneratör kullanan 'de, 36 bulunduğu anda karelerin hesaplanması durur. Bunu, örneğin ekranda bir görüntü gibi bir n * nyan etki üreten bir işlev çağrısı ile değiştirerek kendimizi buna ikna edebiliriz .
Sözlüklerin yoğun kullanımı sayesinde ( karma tablolarla geliştirilmiş ilişkisel kapsayıcı ), Python, dilin çeşitli nesnelerini keşfetmeyi ( introspection ) ve bazı durumlarda bunları değiştirmeyi ( şefaat ) mümkün kılar .
Yazarak derleme kontrol edilmez. Python , çalışma zamanında ördek yazmayı kullanır : bir nesnede çağrılan bir yöntem, bu nesnede bildirilen yöntemle aynı imzaya sahipse, ikinci yöntem yürütülür. Bu nedenle, bir nesne üzerinde var olmayan bir yöntemi çağırmak başarısız olur, yani söz konusu nesne doğru türde değildir. Statik yazmanın olmamasına rağmen, Python güçlü bir şekilde yazılır ve sessizce anlamlı bir forma dönüştürmeye çalışmak yerine anlamsız işlemleri (örneğin, bir dizeye sayı ekleme) yasaklar. Python, değişkenleri başka bir türe dönüştürmek için işlevler sağlar:
points = 3.2 # points est du type float print("Tu as " + points + " points !") # Génère une erreur de typage points = int(points) # points est maintenant du type int (entier), sa valeur est arrondie à l'unité inférieure (ici 3) print("Tu as " + points + " points !") # Génère une erreur de typage points = str(points) # points est maintenant du type str (chaîne de caractères) print("Tu as " + points + " points !") # Plus d'erreur de typage, affiche 'Tu as 3 points !'Python ayrıca , özellik API'sini veya dekoratörlerin tasarım desenini kullanan sınıf nitelikleri için statik bir yazma mekanizması sağlar .
Ek açıklamalar3.0 sürümünden bu yana Python, işlevlerdeki değişkenlerin açıklamasını sunar (PEP 3107'de sunulmuştur). Bu, hiçbir şey bu ek açıklamaları takip etmek zorunda olmadığından, statik bir yazma çözümü olarak hareket etmeden kodu daha okunabilir hale getirmeye izin verir.
def hello(name: str) -> str: return "Hello {} !".format(name) hello("Alice") # Appel suggéré par les annotations hello(True) # Appel non conforme mais tout à fait fonctionnelEk olarak, 3.5 sürümünden bu yana Python, yazma modülünü (PEP 484'te tanıtılmıştır) sunmaktadır.
from typing import List def split_string(string: str) -> List[str]: return string.split(" ") DerlemePylint, mypy veya PyChecker gibi araçlarla Python modüllerinin statik analizini yapmak mümkündür. Yürütme gerektirmeden, bu araçlar hataları veya kullanımdan kaldırılmış yapıları tespit eder. Örneğin, soyut bir sınıftan miras alan ve soyut yöntemleri veya bildirilmeden önce kullanılan değişkenleri veya yöntemin dışında bildirilen örnek niteliklerini yeniden tanımlamayan bir sınıf __init__.
Bir Python ara kodu ( bytecode ) oluşturmak da mümkündür .
PyInstaller gibi araçlar veya Unix , Windows ve macOS altında cx_Freeze, macOS altında py2app ve Windows altında py2exe gibi daha spesifik araçlar , bir Python programının, programı ve bir Python yorumlayıcısını içeren bir yürütülebilir dosya biçiminde "derlenmesine" izin verir.
Program daha hızlı çalışmaz (makine kodu olarak derlenmez), ancak bu, özellikle Python yorumlayıcısının kurulu olmadığı makinelerde dağıtımını büyük ölçüde basitleştirir.
Python'da her şey bir nesnedir , yani bir değişken dil tarafından işlenen tüm öğelere bir başvuru içerebilir : sayılar, yöntemler, modüller, vb. . Ancak, sürüm 2.2'den önce, sınıflar ve sınıf örnekleri özel bir nesne türüydü; bu, örneğin kendi alt sınıfınızı liste nesnesinden türetmenin imkansız olduğu anlamına geliyordu .
yöntemlerPython'un nesne modeli, Modula-3'ten esinlenmiştir. Bu ödünçlemeler arasında, geleneksel olarak self olarak adlandırılan mevcut nesnenin örneğini yöntemlerin ilk argümanı olarak bildirme zorunluluğu ve bu örneğin bir verisine bu yöntemin gövdesinde her erişmek istediğimizde. Bu uygulama, örneğin C ++ veya Java'dan gelen programcılar için doğal değildir, benliğin bolluğu genellikle kodun okunmasını engelleyen görsel bir kirlilik olarak eleştirilir. Aksine, açık benliğin geliştiricileri, üye verileri için adlandırma kurallarının kullanılmasından kaçındığına ve bir üst sınıf yöntemi çağırma veya üye verileri arasındaki belirsizliği giderme gibi görevleri basitleştirdiğine inanırlar.
Python üç tür yöntemi tanır:
Dil, kapsülleme için çok sınırlı bir desteğe sahiptir . Örneğin Java'da olduğu gibi protectedveya gibi anahtar kelimelerle erişilebilirlik denetimi yoktur private.
Python'un felsefesi, kapsüllemeyi bilgi gizlemeden kavramsal olarak ayırt etmektir. Bilgi maskeleme, hileli kullanımı önlemeyi amaçlar, bilgisayar güvenliği ile ilgili bir endişedir . Artık dilin en son sürümlerinde tutulmayan standart kitaplığın kale modülü , bir nesnenin niteliklerine erişimi sınırlı bir yürütme ortamı çerçevesinde kontrol etmeyi mümkün kıldı.
Kapsülleme bir yazılım geliştirme sorunudur. Python geliştiricilerinin sloganı, burada hepimiz rıza gösteren yetişkinleriz . Arabirimlerin genel kısımlarını sözleşmeler yazarak belirtmenin yeterli olduğunu ve bu sözleşmelere uymanın veya sorumluluklarını almanın nesnelerin kullanıcılarına bağlı olduğunu düşünüyorlar. Özel, özel üyelerin önüne bir alt çizgi eklemektir. Dil ayrıca, verinin adını tanımlandığı sınıfınkiyle otomatik olarak önekleyerek, ad çakışmalarını önlemek için çift alt çizgi kullanımına izin verir.
Fonksiyonun kullanımı, property()yöntemleri kullanarak, bir veri üyesine erişimleri engellemeyi amaçlayan özellikleri tanımlamayı mümkün kılar. Bu, örneğin C++'da yaygın olan erişimcileri sistematik olarak tanımlamayı ve verileri gizlemeyi gereksiz kılar .
MirasPython, çoklu kalıtımı destekler . 2.3 sürümünden bu yana , yöntem çözümleme sırasını ( MRO ) çözmek için Dylan dilinden türetilen C3 (en) algoritmasını kullanır . Önceki sürümler , bir elmas yadigarı durumunda sorunlara neden olan derin bir geçiş algoritması kullanıyordu .
Python, birçok farklı görev için uygun araçlar sağlayan geniş bir standart kitaplığa sahiptir . Standart kütüphanedeki modül sayısı, C veya Python ile yazılmış spesifik modüller ile arttırılabilir.
Standart kitaplık, desteklenen çok sayıda standart biçim ve protokolle ( MIME ve HTTP gibi ) İnternet kullanan uygulamalar yazmak için özellikle iyi tasarlanmıştır . Grafik arayüzler oluşturmak ve normal ifadeleri işlemek için modüller de sağlanmıştır. Python ayrıca kapsamlı test takımları oluşturmak için birim testi ( eski adıyla PyUnit sürüm 2.1'den önce) için bir çerçeve içerir . unittest
Her programcı Python kodu yazmak için kendi kurallarını benimseyebilse de, Guido van Rossum "PEP 8" olarak adlandırılan bir kılavuzu kullanıma sunmuştur. 2001 yılında yayınlanmıştır, hala dildeki değişikliklere uyum sağlamak için sürdürülmektedir. Google ayrıca bir kılavuz sunar.
Python, grafik arayüzlü yazılım oluşturmak için kullanılabilecek birkaç modüle sahiptir . En yaygın olanı Tkinter'dir . Bu modül birçok uygulama için uygundur ve çoğu durumda yeterli sayılabilir. Ancak, Python'u diğer yazılım kitaplıklarına (" araç takımı ") bağlayabilmek , daha fazla işlevsellik için, kullanılan işletim sistemiyle daha iyi entegrasyon için veya yalnızca Python'u favori kitaplığıyla kullanabilmek için başka modüller oluşturulmuştur . Gerçekten de, bazı programcılar Tkinter kullanımını diğer kütüphanelerden daha acı verici buluyor. Bu diğer modüller standart kitaplığın parçası değildir ve bu nedenle ayrı olarak edinilmelidir.
GUI kütüphanelerine erişim sağlayan ana modüller , Tk için Tkinter ve Pmw (Python megawidgets) , wxWidgets için wxPython , GTK+ için PyGTK , Qt için PyQt ve PySide ve son olarak FOX Toolkit için FxPy'dir . Bir uyarlaması da vardır SDL kütüphanesinde : Pygame , bir bağlayıcı bir SFML'de : PySFML yanı sıra Python için özellikle yazılmış bir kütüphane: pyglet (tr) .
IronPython platformunda Python'da Silverlight uygulamaları oluşturmak da mümkündür .
Guido van Rossum , Python'un baş yazarıdır ve Python'un daimi merkezi karar vericisi olarak rolü , “ Yaşam İçin Hayırsever Diktatör ” ( BDFL) unvanıyla mizahi bir şekilde tanınmaktadır . Dan beritemmuz 2018, Guido van Rossum BDFL rolünden kalıcı olarak tatilde olduğunu ilan etti. Ayrıca yönetmen dil konseyi adaylığını da iptal etti.kasım 2019.
CPython deposuna yazma erişimi olan ve python-dev posta listesini koordine eden çekirdek geliştiricilerden oluşan bir ekip ona yardım eder. Esas olarak temel dil ve kütüphane üzerinde çalışırlar. Bazen , SourceForge'un yerini alan Roundup hata yönetimi platformu aracılığıyla diğer Python geliştiricilerinden katkılar alırlar .
Üçüncü taraf kitaplıkların kullanıcıları veya geliştiricileri, çeşitli diğer kaynakları kullanır. Python ile ilgili ana genel medya, İngilizce konuşan Usenet forumu comp.lang.python'dur.
Monty Python'a yapılan imalar oldukça yaygındır. Python öğreticiler sıklıkla kelimeleri kullanmak , spam ve yumurta bir şekilde metasyntax değişkeni . Bu bir referanstır Monty Python Spam kroki iki patronları olan bir kartı kullanarak bir yemek sipariş girişiminde, SPAM marka konserve jambon hemen hemen her yemeğin içinde. Bu çizim ayrıca istenmeyen e-postayı belirtmek için referans olarak alınmıştır .
Birkaç şirket veya kuruluş, resmi web sitelerinde Python kullandıklarından bahseder:
Python aynı zamanda çok sayıda özgür yazılımın komut dilidir:
Ve ticari:
Python, özellikle Fransa'da orta ve yüksek öğretimde bir programlama dili olarak kullanılmaktadır. 2013'ten beri orada, Scilab ile aynı zamanda , ortak çekirdeğin (herkes için bilgisayar bilimi) bir parçası olarak hazırlık fen sınıflarındaki tüm öğrencilere öğretilmektedir . Önceden, bilgisayar bilimi eğitimi, öğretimin Caml veya Pascal dilinde olmasıyla, MP'deki bir seçenekle sınırlıydı . Bu seçenek hala var, ancak Pascal yarışmaların 2015 oturumundan terk edildi, bu yüzden bu öğretimde sadece Caml kaldı. Python dilindeki ilk yarışma testleri de 2015 oturumunun testleridir.
CPython adlı referans sürümünün yanı sıra ( C dilinde yazıldığı için ), Python dilini uygulayan başka sistemler de vardır:
Bu diğer sürümler, referans sürümü için C ile yazılmış tüm işlev kitaplığından veya en son dil gelişmelerinden mutlaka faydalanmaz.
Bazen belirli bir etki alanına ayrılmış çok sayıda paket içeren farklı dağıtımlar mevcuttur:
Bunlar Python dilinin farklı uygulamaları değildir : CPython'a dayanırlar, ancak önceden yüklenmiş bir dizi kitaplıkla birlikte gelirler.
Sürüm | Yayın tarihi | Desteğin sonu | Yeni gelenler |
---|---|---|---|
1.5 (.2) | 3 Ocak 1998 | 13 Nisan 1999 |
|
1.6 | 5 Eylül 2000 | Eylül 2000 |
|
2.0 | 16 Ekim 2000 | 22 Haziran 2001 |
|
2.1 | 15 Nisan 2001 | 9 Nisan 2002 |
|
2.2 | 21 Aralık 2001 | 30 Mayıs 2003 |
|
2.3 | 29 Haziran 2003 | 11 Mart 2008 | |
2.4 | 30 Kasım 2004 | 19 Aralık 2008 |
|
2.5 | 19 Eylül 2006 | 26 Mayıs 2011 |
|
2.6 | 1 st Ekim 2008 tarihinden bu | 24 Ağu 2010 (güvenlik güncellemeleri 29 Ekim 2013) |
|
2.7 | 3 Temmuz 2010 | 1 st Ocak 2020 |
|
3.0 | 3 Aralık 2008 | 13 Şubat 2009 |
Ayrıntılar için PEP 3100'e bakın |
3.1 | 27 Haziran 2009 | 12 Haziran 2011 (güvenlik güncellemeleri Haziran 2012) |
|
3.2 | 20 Şubat 2011 | 13 Mayıs 2013 (güvenlik güncellemeleri 20 Şubat 2016) |
|
3.3 | 29 Eylül 2012 | 8 Mart 2014 (güvenlik güncellemeleri 29 Eylül 2017) |
|
3.4 | 16 Mart 2014 | 9 Ağustos 2017 (güvenlik güncellemeleri 18 Mart 2019) |
|
3.5 | 13 Eylül 2015 | 8 Ağu 2017 (güvenlik güncellemeleri 13 Eylül 2020) |
|
3.6 | 23 aralık 2016 | 24 Aralık 2018 (güvenlik güncellemeleri aralık 2021) |
|
3.7 | 31 Ocak 2018 | 27 Haziran 2020 (güvenlik güncellemeleri Haziran 2023) |
|
3.8 | 14 Ekim 2019 | Nisan 2021 (güvenlik güncellemeleri Ekim 2024) |
|
3.9 | 5 Ekim 2020 | Mayıs 2022 (güvenlik güncellemeleri Ekim 2025) |
|
Python Geliştirme Önerileri (veya PEP: Python Geliştirme Önerisi ), Python'u iyileştirmenin yolu olması ve tüm değişikliklerinden önce gelmesi amaçlanan metinsel belgelerdir. Bir PEP, bir geliştirme yönelimi önerisidir (PEP süreci) , teknik bir tekliftir (Standart İzleme PEP) veya basit bir tavsiyedir ( Bilgilendirici PEP ). En iyi bilinen PEP, kod stili kılavuzu için PEP 8'dir.
2009'da, Python'un 3. sürümüdür ve sürüm 2'nin (proje başlangıçta "Python 3000" veya "Py3K" olarak adlandırılıyordu) giderek yerini alan, zayıflıklarını ortadan kaldırmak için sürüm 2.x ile geriye dönük uyumluluk olmadan. dil. Projenin kılavuzu, "eski yöntemleri kaldırarak Python fazlalığını azaltmak" idi. İlk alfa sürümü olan Python 3.0a1, tarihinde yayınlandı.31 Ağustos 2007, ve planlanan değişiklikleri detaylandıran bir PEP'in yanı sıra programcılara Python 2 veya 3 seçimlerinde rehberlik edecek bir sayfa var.
Lise öğrencilerine yönelik ( Casio , NumWorks , Texas Instruments ... dahil) ve Python 3'te Python çalışmalarını destekleyen hesap makineleri. Bu hesap makineleri, kişisel bilgisayarlarla program alışverişi yapabilir .
FelsefePython 3, önceki sürümlerinde olduğu gibi aynı felsefeyle geliştirildi, bu nedenle Python'un felsefesine yapılan herhangi bir referans, sürüm 3 için de geçerli olacaktı.Ancak, dil bir dizi gereksiz yöntem biriktirdi. Dilin ve modüllerin artıklık kaldırmak çıkarmaya çalışan, Python 3 Python kılavuz “Optimal hem tek yöntem olmalıdır izler ve her şey için doğal”.
Python 3, çok paradigmalı bir dil olmaya devam ediyor. Programcılar yine de nesne yönelimi, yapılandırılmış programlama, işlevsel programlama ve diğer paradigmalar arasında seçim yapma hakkına sahip olacaklar; Python 3, printPython 2'den farklı olarak parantez kullanılmasını gerektirmesine rağmen, 2.x sürümlerinden daha doğal bir şekilde kullanılmak üzere tasarlanmıştır .
Planlama ve uyumlulukPython 3.0'ın ilk alfa sürümü olan Python 3.0a1, tarihinde yayınlandı. 31 Ağustos 2007. Python'un 2.x ve 3.x sürümleri, Python 3.x'ten içe aktarılan bazı özellikler de dahil olmak üzere, 2.x serisinin öncelikli olarak uyumluluk için kalacağı çeşitli geliştirme döngüleri için paralel olarak piyasaya sürülecek. PEP 3000, bir sürümün yayın süreci hakkında daha fazla bilgi içerir.
Gibi Perl 6 , Python 3.0 sonları geriye dönük uyumluluk (geriye dönük uyumluluk). 2.x serisi için yazılan kodun kullanımı Python 3.0 ile garanti edilmez. İkincisi, Unicode'a tam geçiş ve bu nedenle dizeler ve "bayt" nesneler arasında gerekli bir ayrım gibi temel değişiklikleri getirir. Sözlük benzeri nesnelerde belirli yöntemlerle ilişkili dinamik yazım , Python 2.x'ten Python 3.0'a sorunsuz bir geçişi çok zor hale getirir . "2to3" adlı bir araç, 2.x sürümlerinin çoğunu 3.x sürümlerine çevirir ve özel yorumlar ve uyarılar ile sonlandırma gerektiren kod alanlarını belirtir. Ön sürümde 2to3, doğru bir çeviri elde etmede açıkçası başarılı görünüyor. Python 3.x Python 2.x ait bir geçiş parçası olarak, PEP 3000 değişiklikler için bir temel olarak orijinal kodu tutmak önerir ve çevirisini 2to3 kullanılarak 3.x platformu için.
Python 2.6, Python 3'e geçiş için olası geçiş sorunlarının farkında olması gereken bir "ihtiyati" modun yanı sıra bir geriye dönük uyumluluk başlangıcı sağlar.
2.5 veya 2.6 sürümlerinde Android ve iPhone için uygun Python sürümleri vardır . Mevcut iOS Firar üzerinde iOS "kurulum araçları" na ve Android sayesinde sayesinde SL4A hatta küçük yapma imkanı veren grafiksel arayüzleri "android" modülünde sayesinde ve hangi göndermenizi sağlar SMS kamerada anahtara, ya Telefonu titretmek için Sonraki birkaç satır, bunun nasıl yapılacağını gösterir:
droid = android.Android() # client lié au serveur local lancé par l'application SL4A # pour contrôler un téléphone distant à l'adresse 192.168.0.5, avec SL4A lancé sur le port 9887 # il suffit de faire : android.Android('192.168.0.5', 9887) droid.vibrate(2.5) # fait vibrer le téléphone (local ou distant) pendant 2.5 secondesBlackberry terminallerinde bir Python limanı piyasaya sürüldüHaziran 2012İçin BlackBerry OS 10 sistemde . Daha hafif versiyonu piyasaya çıktıEylül 2012, "BlackBerry-Tart" olarak adlandırılan, İngilizce kelimelerle oynanan bir oyun nedeniyle: " a" tart " geleneksel " elmalı turta "ya atıfta bulunarak " turta " " dan daha hafiftir . Python 3.2.2'ye dayanmaktadır.