Pyton | ||
Data pierwszej wersji | 20 lutego 1991 | |
---|---|---|
Paradygmaty | Cel , imperatyw i funkcjonalność | |
Autor | Guido van Rossum | |
Deweloperzy | Python Software Foundation | |
Ostatnia wersja | 3.9.6 (28 czerwca 2021) | |
Wersja rozwojowa | 3.10.0b4 (10 lipca 2021) | |
Pisanie na maszynie | Silny , dynamiczny , kaczka wpisywanie | |
Wpływem | ABC , C , Eiffel , ICON , Modula-3 , Java , Perl , Smalltalk , Tcl | |
Pod wpływem | Rubin , Groovy , Boo , Julia, | |
Realizacje | Cpython , Jython , IronPython , PyPy | |
Napisane w | C dla CPython, Java dla Jythona, C # dla IronPython oraz w samym Pythonie dla PyPy | |
System operacyjny | Wieloplatformowy | |
Licencja |
Darmowa licencja : Python Software Foundation License Foundation |
|
Stronie internetowej | www.python.org | |
Rozszerzenie pliku | py, pyc, pyd, pyo, pyw, pyz i pyi | |
Python (wymawiane / p ja . T ɔ / ) to język programowania interpretowany , multi- paradygmat i cross-platform . Promuje ustrukturyzowane , funkcjonalne i obiektowe programowanie imperatywne . Posiada silne dynamiczne typowanie , automatyczne zarządzanie pamięcią przez wyrzucanie śmieci i system zarządzania wyjątkami ; jest więc podobny do Perla , Ruby , Scheme , Smalltalk i Tcl .
Język Python jest objęty wolną licencją zbliżoną do licencji BSD i działa na większości platform komputerowych , od smartfonów po komputery mainframe , od Windows do Unixa ze szczególnym uwzględnieniem GNU / Linux przez macOS , a nawet Androida , iOS , a także może być przetłumaczone na Java lub .NET . Został zaprojektowany, aby zoptymalizować produktywność programistów, oferując narzędzia wysokiego poziomu i łatwą w użyciu składnię .
Doceniają to także niektórzy pedagodzy, którzy odnajdują w nim język, w którym składnia, wyraźnie oddzielona od mechanizmów niskopoziomowych , pozwala na łatwe wprowadzenie do podstawowych pojęć programowania.
Python to język programowania, który może być używany w wielu kontekstach i dostosowywany do każdego rodzaju użytkowania dzięki specjalistycznym bibliotekom . Jest jednak szczególnie używany jako język skryptowy do automatyzacji prostych, ale żmudnych zadań, takich jak skrypt , który pobierałby informacje o pogodzie z Internetu lub integrowałby się z oprogramowaniem do projektowania wspomaganego komputerowo w celu zautomatyzowania pewnych sekwencji powtarzających się czynności ( zob. sekcja Przyjęcie ). Jest również używany jako prototypowy język programowania, gdy potrzebna jest funkcjonalna aplikacja przed jej optymalizacją za pomocą języka niższego poziomu. Jest szczególnie rozpowszechniony w świecie naukowym i posiada wiele bibliotek zoptymalizowanych pod kątem obliczeń numerycznych .
W późnych latach 1980 , programista Guido van Rossum był zaangażowany w rozwój ABC języka programowania w Centrum voor Wiskunde en Informatica (CWI) w Amsterdamie , w Holandii . Następnie pracował w zespole ds. systemu operacyjnego Amoeba , którego wywołania systemowe trudno było połączyć z powłoką Bourne'a używaną jako interfejs użytkownika . Następnie wierzy, że język skryptowy inspirowany ABC może być interesujący jako tłumacz poleceń dla Ameby.
W 1989 roku , korzystając z tygodniowego urlopu podczas świąt Bożego Narodzenia , napisał na swoim komputerze pierwszą wersję języka. Fan serialu telewizyjnego Latający Cyrk Monty Pythona , postanawia ochrzcić ten projekt Pythonem. Inspirował się głównie ABC, na przykład do wcięć, takich jak składnia czy typy wysokopoziomowe, ale także Modula-3 do obsługi wyjątków , języka C i narzędzi UNIX .
W następnym roku język zaczął być przyjmowany przez zespół projektowy Amoeba, a Guido nadal rozwijał się głównie w wolnym czasie. WLuty 1991, pierwsza publiczna wersja, oznaczona numerem 0.9.0, została opublikowana na forum Usenet alt.sources . Najnowsza wersja wydana w CWI to Python 1.2.
W 1995 roku Van Rossum kontynuował pracę nad Pythonem w CNRI (in) w Reston w Stanach Zjednoczonych , gdzie wydał kilka wersji oprogramowania.
Z'Sierpień 1995Zespół Python pracuje w NCRI na Graala przeglądarka internetowa przy użyciu Tk . Jest to odpowiednik w Pythonie przeglądarki HotJava , pozwalający na uruchamianie apletów w bezpiecznym środowisku. Pierwsza publiczna wersja, dostępna w listopadzie, to 0.2. Kieruje rozwojem modułów dla standardowej biblioteki, takiej jak rexec , htmllib czy urllib . Wersja 0.6 będzie ostatnią z Graala ; jest opublikowany wKwiecień 1999.
W 1999 r. wspólnie CNRI i DARPA uruchomiły projekt Programowanie Komputerowe dla Wszystkich (CP4E) . Chodzi o użycie Pythona jako języka nauczania programowania . Ta inicjatywa doprowadzi do stworzenia środowiska programistycznego IDLE . Jednak ze względu na brak funduszy na projekt przez DARPA i odejście wielu programistów Pythona z NCRI (w tym Guido van Rossum), projekt wymarł w 2000 roku. Python 1.6 był ostatnią wersją wydaną w NCRI.
W 2000 roku , rdzeń zespół programistów Python przeniesiony do BeOpen.com do utworzenia BeOpen PythonLabs zespołu . Python 2.0 to jedyna wersja wydana na BeOpen.com. Po tym wydaniu Guido Van Rossum i pozostali programiści PythonLabs dołączyli do Digital Creations (obecnie znanej jako Zope Corporation ).
Andrew M. Kuchling publikuje w grudzień 1999tekst o nazwie Python Warts , który syntetyzuje najczęstsze skargi na język. Dokument ten będzie miał określony wpływ na przyszły rozwój języka.
Python 2.1 jest pochodną wersją Pythona 1.6.1 i Pythona 2.0. Jego licencja została przemianowana na Python Software Foundation License . Każdy kod , dokumentacja i specyfikacja dodane od czasu wydania Pythona 2.1 alpha są własnością Python Software Foundation (PSF), organizacji non-profit założonej w 2001 roku, wzorowanej na Apache Software Foundation .
Aby naprawić pewne wady językowe (np. obiektowe z dwoma typami klas ) i oczyścić standardową bibliotekę z jej przestarzałych i nadmiarowych elementów, Python zdecydował się złamać wsteczną kompatybilność w nowej głównej wersji, Python 3.0, opublikowanej wgrudzień 2008. Po tej wersji szybko pojawia się wersja 3.1, która koryguje wczesne błędy wersji 3.0.
Python został zaprojektowany jako czytelny język. Ma być wizualnie czysty. Na przykład ma mniej konstrukcji składniowych niż wiele języków strukturalnych, takich jak C , Perl lub Pascal . Komentarze są oznaczone krzyżykiem (#).
Te bloki są określone przez wgłębienie zamiast klamrowe C lub C ++ ; lub begin ... endjak w Pascalu lub Ruby . Zwiększenie wcięcia oznacza początek bloku, a zmniejszenie wcięcia oznacza koniec bieżącego bloku. Zgodnie z konwencją (obecnie PEP8), wcięcie w Pythonie to zwykle cztery spacje.
Funkcja silni w C | Funkcja silnia w Pythonie |
---|---|
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) |
Uwaga: wcięcie można zmienić lub usunąć w wersji C bez zmiany jego zachowania. Podobnie funkcję Pythona można napisać za pomocą wyrażenia warunkowego. Jednak prawidłowe wcięcie ułatwia wykrywanie błędów, gdy kilka bloków jest zagnieżdżonych, a zatem ułatwia eliminację tych błędów. Dlatego lepiej jest wcinać programy w C. Krótka wersja byłaby napisana w następujący sposób:
Funkcja silni w C | Funkcja silnia w Pythonie |
---|---|
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 |
Zastrzeżone słowa kluczowe języka Python znajdują się na liście keyword.kwlistmodułów keyword.
Słowa kluczowe Pythona 2.7.5 to: 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.
Od Pythona 3.0 printi execnie są już słowami kluczowymi języka, ale funkcjami modułu builtins. Dodaje się do słów kluczowych: True, False, Nonei nonlocal. Pierwsze trzy były już obecne w poprzednich wersjach, ale nie można ich już edytować (wcześniej True = 1było możliwe przypisanie ). nonlocalzostał wprowadzony przez PEP 3104 i pozwala, w funkcji zdefiniowanej wewnątrz innej funkcji, modyfikować zmienną o wyższym poziomie zasięgu . Wcześniej modyfikowalne były tylko zmienne lokalne funkcji i globalne (na poziomie modułu). Możliwe było jednak i nadal jest bez słowa kluczowego nonlocalmodyfikowanie obiektu przypisanego do zmiennej o wyższym poziomie zasięgu, np. listy z metodą append- jest to oczywiście niemożliwe dla obiektu niezmiennego .
Podstawowe typy BasicPodstawowe typy w Pythonie są stosunkowo obszerne i potężne. Są to m.in.:
Obiekty iterowalne są zapętlone forw następujący sposób:
for element in objet_iterable: traiter(element)W przypadku ciągu znaków iteracja przebiega znak po znaku.
Możliwe jest wyprowadzanie klas z typów bazowych w celu tworzenia własnych typów. Można również tworzyć własne typy obiektów iterowalnych bez dziedziczenia podstawowych obiektów iteracyjnych za pomocą protokołu iteracji języka.
Programowanie funkcjonalnePython umożliwia programowanie w stylu funkcjonalnym . Posiada również rozumienia list , a bardziej ogólnie rozumienia mogą tworzyć generatory, słowniki lub zestawy . Na przykład, aby zbudować listę kwadratów liczb naturalnych mniejszych niż 10, możemy użyć wyrażenia:
liste = [x**2 for x in range(10)] # liste = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]Lista liczb parzystych :
liste = [entier for entier in range(10) if entier % 2 == 0] # liste = [0, 2, 4, 6, 8]Tabela przejścia od liter alfabetu do ich kodu ASCII :
{chr(n): n for n in range(65, 91)}Zestaw liter w słowie (tworzy zestaw {'r', 'c', 'd', 'b', 'a'}):
s = "abracadabra" {c for c in s}Zrozumienie może składać się z wielu pętli i filtrów, a istnieje korespondencja z kodem wykonującym te same obliczenia za pomocą instrukcji fori if :
Zrozumienie | Równoważny 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) |
Możliwa jest ograniczona forma funkcji anonimowej :
lambda x: x + 2Funkcje lambda mogą być definiowane inline i używane jako argumenty w wyrażeniach funkcyjnych:
filter(lambda x: x < 5, une_liste)zwróci listę złożoną z elementów a_list mniejszych niż 5. Ten sam wynik można uzyskać za pomocą
[x for x in une_liste if x < 5]Lambdy Pythona dopuszczają tylko wyrażenia i nie mogą być używane jako uogólnione funkcje anonimowe; ale w Pythonie wszystkie funkcje są obiektami, więc mogą być przekazywane jako argumenty do innych funkcji i wywoływane w razie potrzeby. Rzeczywiście, funkcję zdefiniowaną za pomocą def można utworzyć wewnątrz innej funkcji i w ten sposób uzyskujemy definicję funkcji w zmiennej lokalnej, na przykład:
def filtre_inferieur_a_5(une_liste): def mon_filtre(x): # variable locale mon_filtre return x < 5 return filter(mon_filtre, une_liste)Funkcja lokalna może modyfikować środowisko funkcji, która ją utworzyła, dzięki słowu kluczowemu nonlocal(patrz Shutdown (IT) ):
def accum(pas): total = 0 def ajoute(n): nonlocal total total += n * pas return total return ajouteW ten sposób możliwe jest stworzenie kilku akumulatorów, z których każdy odnosi się do własnej sumy. Możliwe jest uzyskanie dostępu do środowiska funkcji lokalnej za pomocą atrybutu __closure__.
Programowanie obiektoweWszystkie typy bazowe, funkcje, instancje klas („klasyczne” obiekty języków C++ i Java ) oraz same klasy (będące instancjami metaklas) są obiektami.
Klasę definiuje się za pomocą słowa kluczowego class. Do klas Python obsługuje wielokrotnego dziedziczenia ; nie ma statycznego przeciążenia jak w C++, ani ograniczeń w dziedziczeniu jak w Javie (klasa implementuje kilka interfejsów i dziedziczy z jednej klasy) ale mechanizm opcjonalnych argumentów i by słowa kluczowego jest bardziej ogólny i bardziej elastyczny . W Pythonie atrybut obiektu może odwoływać się do instancji lub zmiennej klasy (najczęściej do metody). Możliwe jest dynamiczne odczytywanie lub modyfikowanie atrybutu za pomocą funkcji:
Przykład dwóch prostych klas:
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" Specjalne metody i definicja operatorówPython zapewnia elegancki, zorientowany obiektowo mechanizm definiowania predefiniowanego zestawu operatorów: każdemu obiektowi Pythona można przypisać tak zwane metody specjalne.
Te metody, zaczynające się i kończące dwoma podkreślnikami , są wywoływane podczas używania operatora na obiekcie: +(method __add__), +=(method __iadd__), [](method __getitem__), ()(method __call__) itd. Metody takie jak __repr__i __str__pozwalają zdefiniować reprezentację obiektu w interakcyjnym interpreterze i jego renderowanie za pomocą funkcji print .
Możliwości są liczne i są opisane w dokumentacji językowej.
Na przykład możemy zdefiniować dodawanie dwóch dwuwymiarowych wektorów o następującej klasie:
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) GeneratorySłowo kluczowe yieldużywane w funkcji umożliwia uczynienie tej funkcji generatorem. Wywołanie tej funkcji zwraca obiekt typu generator , którego można użyć forna przykład w loop .
Przy każdym wywołaniu generator wykonuje swoje przetwarzanie, dopóki nie napotka słowa kluczowego yield, zwróci wartość wyrażenia yield, a przy następnym wywołaniu wznawia przepływ tuż po yield. Na przykład, aby obliczyć ciąg Fibonacciego , możemy napisać:
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))Moduł itertoolspozwala na manipulowanie generatorami. Na przykład, aby wyodrębnić pierwsze 10 elementów z poprzedniego generatora:
import itertools list(itertools.islice(gen_fibonacci(), 10)) # renvoie [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]Od Pythona 3.3 możliwe jest wytworzenie generatora z funkcji rekurencyjnej, dzięki składni yield from, która pojawiła się w PEP 380 i która „deleguje” obliczenia do podgeneratora. Poniższy przykład oblicza permutacje hetmanów odpowiadające rozwiązaniom problemu ośmiu hetmanów rozciągniętych na szachownicę o wymiarach n × n.
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 92Konstruktor może wyglądać tak samo, jak funkcja zwracająca listę, ale w przeciwieństwie do listy zawierającej wszystkie jej elementy, konstruktor oblicza jej elementy jeden po drugim .
Zatem test 36 in [n * n for n in range(10)]zostanie przeprowadzony na liście obliczonej w całości, podczas gdy w 36 in (n * n for n in range(10)), który korzysta z generatora, obliczanie kwadratów zatrzymuje się, gdy tylko zostanie znalezione 36. Możemy się o tym przekonać, zastępując to n * nwywołaniem funkcji wywołującym efekt krawędzi , np. wyświetlenie na ekranie.
Dzięki intensywnemu wykorzystaniu słowników (kontener asocjacyjny opracowany za pomocą tablic mieszających ), Python umożliwia eksplorację różnych obiektów języka ( introspekcję ) oraz w niektórych przypadkach ich modyfikację ( wstawiennictwo ).
Wpisywanie nie jest zaznaczone na kompilacji. Python używa pisania kaczką : w czasie wykonywania, jeśli metoda wywołana na obiekcie ma taki sam podpis jak metoda zadeklarowana na tym obiekcie, wykonywana jest ta druga metoda. Dlatego wywołanie metody, która nie istnieje na obiekcie, zakończy się niepowodzeniem, co oznacza, że dany obiekt nie jest właściwego typu. Pomimo braku statycznego typowania, Python jest silnie typizowany, zabraniając bezsensownych operacji (na przykład dodawania liczby do łańcucha) zamiast po cichu próbować przekonwertować go na sensowną formę. Python udostępnia funkcje do przekształcania zmiennych na inny typ:
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 udostępnia również statyczne typowanie mechanizm dla klasy atrybutów za pomocą cechę API lub dekoratorzy wzorzec projektowy .
AdnotacjeOd wersji 3.0 Python oferuje adnotacje zmiennych w funkcjach (wprowadzone w PEP 3107). Pozwala to uczynić kod bardziej czytelnym bez działania jako statyczne rozwiązanie do typowania, ponieważ nic nie zobowiązuje do podążania za tymi adnotacjami.
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 fonctionnelDodatkowo od wersji 3.5 Python oferuje moduł typowania (wprowadzony w PEP 484).
from typing import List def split_string(string: str) -> List[str]: return string.split(" ") KompilacjaMożliwe jest wykonanie statycznej analizy modułów Pythona za pomocą narzędzi takich jak Pylint, mypy czy PyChecker. Nie wymagając wykonania, narzędzia te wykrywają wady lub przestarzałe konstrukcje. Na przykład klasa, która dziedziczy po klasie abstrakcyjnej i która nie redefiniuje metod abstrakcyjnych lub zmiennych używanych przed zadeklarowaniem lub atrybutów instancji zadeklarowanych poza metodą __init__.
Możliwe jest również wygenerowanie kodu pośredniego Pythona ( bytecode ).
Narzędzia takie jak PyInstaller lub inne bardziej szczegółowe, takie jak cx_Freeze pod Unix , Windows i macOS , py2app pod macOS i py2exe pod Windows pozwalają "kompilować" program Pythona w postaci pliku wykonywalnego składającego się z programu i interpretera Pythona.
Program nie działa szybciej (nie jest kompilowany jako kod maszynowy), ale to znacznie upraszcza jego dystrybucję, szczególnie na maszynach, na których nie jest zainstalowany interpreter Pythona.
W Pythonie wszystko jest obiektem , w tym sensie, że zmienna może zawierać odniesienie do wszystkich elementów obsługiwanych przez język: liczb, metod, modułów itp. . Jednak przed wersją 2.2 klasy i instancje klas były specjalnym typem obiektu, co oznaczało, że na przykład niemożliwe było wyprowadzenie własnej podklasy z obiektu listy .
MetodyModel obiektowy Pythona jest inspirowany modelem Modula-3. Wśród tych zapożyczeń jest obowiązek deklarowania instancji bieżącego obiektu, umownie nazywanej self , jako pierwszego argumentu metod i za każdym razem, gdy chcemy uzyskać dostęp do danych tej instancji w ciele tej metody. Ta praktyka nie jest naturalna dla programistów wywodzących się np. z C++ czy Javy, ponieważ nadmiar siebie jest często krytykowany jako wizualne zanieczyszczenie, które utrudnia czytanie kodu. Wręcz przeciwnie, promotorzy jawnego ja wierzą, że unika ono stosowania konwencji nazewnictwa dla danych składowych i upraszcza zadania, takie jak wywoływanie metody nadklasy lub rozwiązywanie ujednoznacznienia między danymi składowymi.
Python rozpoznaje trzy rodzaje metod:
Język ma bardzo ograniczone wsparcie dla enkapsulacji . Nie ma, jak na przykład w Javie, kontroli dostępności za pomocą słów kluczowych, takich jak protectedlub private.
Filozofią Pythona jest koncepcyjne odróżnienie enkapsulacji od ukrywania informacji. Maskowanie informacji ma na celu zapobieganie nieuczciwemu użyciu, jest to troska o bezpieczeństwo komputera . Moduł bastion biblioteki standardowej, który nie jest już utrzymywany w najnowszych wersjach języka, umożliwił tym samym kontrolę dostępu do atrybutów obiektu w ramach ograniczonego środowiska wykonawczego.
Enkapsulacja to kwestia rozwoju oprogramowania. Slogan deweloperów Pythona brzmi: wszyscy wyrażamy zgodę na dorosłych . Uważają, że wystarczy wskazać, w formie konwencji, publiczne części interfejsów i że to od użytkowników obiektów zależy przestrzeganie tych konwencji lub wzięcie na siebie odpowiedzialności. Zwyczajem jest poprzedzenie prywatnych członków podkreśleniem. Język pozwala również na użycie podwójnego podkreślenia, aby uniknąć kolizji nazw, automatycznie poprzedzając nazwę danych nazwą klasy, w której jest zdefiniowana.
Zastosowanie funkcji property()umożliwia zdefiniowanie właściwości, które mają na celu przechwycenie za pomocą metod dostępu do składowej danych. To sprawia, że nie trzeba systematycznie definiować akcesorów i ukrywać danych, co jest powszechne na przykład w C++.
DziedzictwoPython obsługuje dziedziczenie wielokrotne . Od wersji 2.3 wykorzystuje algorytm C3 (en) , wywodzący się z języka Dylan , do rozwiązywania kolejności rozwiązywania metod ( MRO ). Poprzednie wersje wykorzystywały algorytm głębokiego przechodzenia, który powodował problemy w przypadku diamentowej pamiątki .
Python posiada dużą bibliotekę standardową , zapewniającą narzędzia odpowiednie do wielu różnorodnych zadań. Liczbę modułów w bibliotece standardowej można zwiększyć za pomocą określonych modułów napisanych w C lub Pythonie.
Biblioteka standardowa jest szczególnie dobrze zaprojektowana do pisania aplikacji korzystających z Internetu, z dużą liczbą obsługiwanych standardowych formatów i protokołów (takich jak MIME i HTTP ). Dostępne są również moduły do tworzenia interfejsów graficznych i manipulowania wyrażeniami regularnymi . Python zawiera również framework do testów jednostkowych ( unittestwcześniej PyUnit przed wersją 2.1) do tworzenia zestawów kompleksowych testów.
Chociaż każdy programista może przyjąć własne konwencje pisania kodu w Pythonie, Guido van Rossum udostępnił przewodnik, zwany „PEP 8”. Opublikowany w 2001 roku, jest nadal utrzymywany w celu dostosowania go do zmian w języku. Google oferuje również przewodnik.
Python ma kilka dostępnych modułów do tworzenia oprogramowania z interfejsem graficznym . Najczęstszym jest Tkinter . Ten moduł nadaje się do wielu zastosowań i w większości przypadków może być uznany za wystarczający. Jednak inne moduły zostały stworzone, aby móc połączyć Pythona z innymi bibliotekami oprogramowania (" zestaw narzędzi "), aby uzyskać więcej funkcji, dla lepszej integracji z używanym systemem operacyjnym lub po prostu aby móc używać Pythona z jego ulubioną biblioteką. Rzeczywiście, niektórzy programiści uważają, że korzystanie z Tkintera jest bardziej bolesne niż innych bibliotek. Te inne moduły nie są częścią standardowej biblioteki i dlatego należy je nabyć osobno.
Głównymi modułami zapewniającymi dostęp do bibliotek GUI są Tkinter i Pmw (megawidgety Pythona) dla Tk , wxPython dla wxWidgets , PyGTK dla GTK + , PyQt i PySide dla Qt , i wreszcie FxPy dla FOX Toolkit . Istnieje również adaptacja SDL biblioteki : Pygame , o wiązanie z SFML : PySFML, a także biblioteka napisana specjalnie dla Pythona: pyglet (en) .
Możliwe jest również tworzenie aplikacji Silverlight w Pythonie na platformie IronPython .
Guido van Rossum jest głównym autorem Pythona, a jego rola jako stałego głównego decydenta Pythona jest humorystycznie potwierdzona tytułem „ Dobroczynnego dyktatora dla życia ” ( BDFL). Odlipiec 2018, Guido van Rossum zadeklarował, że jest na stałym urlopie od swojej roli BDFL. Odwołał również swoją kandydaturę do kierowniczej rady językowej wlistopad 2019.
Jest wspomagany przez zespół głównych programistów, którzy mają dostęp do zapisu w repozytorium CPython i koordynują na liście dyskusyjnej python-dev. Pracują głównie nad podstawowym językiem i biblioteką. Od czasu do czasu otrzymują wkład od innych programistów Pythona za pośrednictwem platformy zarządzania błędami Roundup , która zastąpiła SourceForge .
Użytkownicy lub programiści bibliotek innych firm korzystają z wielu innych zasobów. Główne media ogólne dotyczące Pythona to anglojęzyczne forum Usenetu comp.lang.python.
Aluzje do Monty Pythona są dość powszechne. Samouczki Pythona często używają słów spam i jajka jako zmiennych metaskładniowych . Jest to odniesienie do tej Monty Python Spam szkicu , gdzie dwóch patronów próbować zamówić posiłek przy użyciu karty, która ma SPAM marki szynka konserwowa w praktycznie każdej potrawy. Ten szkic został również wzięty jako odniesienie do oznaczenia niechcianej poczty e-mail .
Kilka firm lub organizacji wspomina na swojej oficjalnej stronie internetowej, że używa Pythona:
Python jest także językiem poleceń dla dużej liczby wolnego oprogramowania:
Oraz komercyjne:
Python jest używany jako język programowania w szkolnictwie średnim i wyższym, zwłaszcza we Francji. Od 2013 r. jest tam nauczany, równolegle z Scilabem , wszystkich uczniów na zajęciach przygotowawczych z przedmiotów ścisłych w ramach wspólnego rdzenia (informatyka dla wszystkich). Wcześniej edukacja informatyczna ograniczała się do jednej opcji w MP, gdzie nauczanie odbywało się w języku Caml lub Pascal . Ta opcja nadal istnieje, ale Pascal został porzucony z sesji konkursów w 2015 roku, więc tylko Caml pozostaje w tym nauczaniu. Pierwsze testy konkursowe z języka Python to także te z sesji 2015.
Oprócz wersji referencyjnej o nazwie CPython (ponieważ napisanej w języku C ) istnieją inne systemy implementujące język Python:
Te inne wersje niekoniecznie korzystają z całej biblioteki funkcji napisanych w C dla wersji referencyjnej, ani z najnowszych zmian językowych.
Dostępne są różne dystrybucje, które czasami zawierają wiele pakietów dedykowanych danej domenie:
Nie są to różne implementacje języka Python: są oparte na CPythonie, ale zawierają wiele preinstalowanych bibliotek.
Wersja | Data wydania | Koniec wsparcia | Nowości |
---|---|---|---|
1,5 (.2) | 3 stycznia 1998 | 13 kwietnia 1999 r. |
|
1,6 | 5 września 2000 r. | wrzesień 2000 |
|
2,0 | 16 października 2000 | 22 czerwca 2001 |
|
2,1 | 15 kwietnia 2001 | 9 kwietnia 2002 r. |
|
2.2 | 21 grudnia 2001 | 30 maja 2003 r. |
|
2,3 | 29 czerwca 2003 r. | 11 marca 2008 | |
2,4 | 30 listopada 2004 r. | 19 grudnia 2008 |
|
2,5 | 19 września 2006 | 26 maja 2011 |
|
2,6 | 1 st październik +2.008 | 24 sierpnia 2010 (aktualizacje zabezpieczeń do 29 października 2013 r.) |
|
2,7 | 3 lipca 2010 | 1 st styczeń 2020 |
|
3,0 | 3 grudnia 2008 | 13 lutego 2009 |
Zobacz PEP 3100 szczegóły |
3.1 | 27 czerwca 2009 | 12 czerwca 2011 (aktualizacje zabezpieczeń do czerwiec 2012) |
|
3.2 | 20 lutego 2011 | 13 maja 2013 r. (aktualizacje zabezpieczeń do 20 lutego 2016) |
|
3,3 | 29 września 2012 | 8 marca 2014 r. (aktualizacje zabezpieczeń do 29 września 2017 r.) |
|
3.4 | 16 marca 2014 r. | 9 sierpnia 2017 r. (aktualizacje zabezpieczeń do 18 marca 2019 r.) |
|
3,5 | 13 września 2015 r. | 8 sierpnia 2017 r. (aktualizacje zabezpieczeń do 13 września 2020 r.) |
|
3,6 | 23 grudnia 2016 | 24 grudnia 2018 r. (aktualizacje zabezpieczeń do grudzień 2021) |
|
3,7 | 31 stycznia 2018 | 27 czerwca 2020 r. (aktualizacje zabezpieczeń do czerwiec 2023) |
|
3,8 | 14 października 2019 r. | Kwiecień 2021 (aktualizacje zabezpieczeń do Październik 2024) |
|
3,9 | 5 października 2020 r. | maj 2022 (aktualizacje zabezpieczeń do Październik 2025) |
|
Propozycje ulepszeń Pythona (lub PEP: Propozycja ulepszeń Pythona ) to dokumenty tekstowe, które mają być ścieżką do ulepszania Pythona i poprzedzać wszystkie jego modyfikacje. PEP jest propozycją orientacji rozwojowej (proces PEP) , propozycją techniczną (standardowa ścieżka PEP) lub prostą rekomendacją ( informacyjny PEP ). Najbardziej znanym PEP jest PEP 8 ze względu na przewodnik po stylu kodu.
W 2009 roku jest to wersja 3 Pythona, która coraz częściej zastępuje wersję 2 (pierwotnie projekt nosił nazwę „Python 3000” lub „Py3K”), bez wstecznej kompatybilności z serią wersji 2.x, w celu wyeliminowania słabości język. Wytyczną projektu było „ograniczenie nadmiarowości Pythona poprzez usunięcie przestarzałych metod”. Python 3.0a1, pierwsza wersja alfa, została wydana w dniu31 sierpnia 2007, i jest PEP, który szczegółowo opisuje planowane zmiany, a także strona prowadząca programistów w wyborze Pythona 2 lub 3.
Kalkulatory przeznaczone dla uczniów szkół średnich (m.in. Casio , NumWorks , Texas Instruments ...) i wspierające pracę Pythona w Pythonie 3. Kalkulatory te mogą wymieniać programy z komputerami osobistymi .
FilozofiaPython 3 został opracowany zgodnie z tą samą filozofią, co we wcześniejszych wersjach, więc wszelkie odniesienia do filozofii Pythona miałyby zastosowanie również do wersji 3. Jednak język ostatecznie zgromadził wiele zbędnych metod. Dążąc do usunięcia nadmiarowości w języku i jego modułach, Python 3 kieruje się wytyczną Pythona „Powinna istnieć tylko jedna metoda, która jest zarówno optymalna, jak i naturalna dla wszystkiego”.
Python 3 pozostaje językiem wieloparadygmatycznym. Programiści nadal będą mieli wybór między orientacją obiektową, programowaniem strukturalnym, programowaniem funkcjonalnym i innymi paradygmatami; Python 3 ma być używany bardziej naturalnie niż w wersjach 2.x, chociaż printwymaga użycia nawiasów w przeciwieństwie do Pythona 2.
Planowanie i kompatybilnośćPython 3.0a1, pierwsza wersja alfa Pythona 3.0, została wydana w dniu 31 sierpnia 2007. Wersje 2.x i 3.x Pythona będą wydawane równolegle przez kilka cykli rozwojowych, podczas których seria 2.x pozostanie głównie ze względu na kompatybilność, w tym niektóre funkcje zaimportowane z Pythona 3.x. PEP 3000 zawiera więcej informacji o procesie wydawania wersji.
Podobnie jak Perl 6 , Python 3.0 łamie kompatybilność wsteczną (kompatybilność wsteczną). Użycie kodu napisanego dla serii 2.x nie jest gwarantowane w Pythonie 3.0. Ta ostatnia wprowadza fundamentalne zmiany, takie jak całkowite przejście na Unicode i z tego powodu konieczne rozróżnienie między ciągami i obiektami „bytes”. Dynamiczne pisanie związane z niektórymi metodami na obiektach podobnych do słowników sprawia, że płynne przejście z Pythona 2.x do Pythona 3.0 jest bardzo trudne. Narzędzie o nazwie „2to3” tłumaczy większość wersji 2.x na wersje 3.x i wskazuje obszary kodu wymagające zakończenia specjalnymi komentarzami i ostrzeżeniami. W wersji wstępnej 2to3 wydaje się szczerze odnosić sukcesy w poprawnym tłumaczeniu. W ramach migracji z Pythona 2.x do Pythona 3.x, PEP 3000 zaleca zachowanie oryginalnego kodu jako podstawy do modyfikacji i przetłumaczenie go na platformę 3.x przy użyciu 2to3.
Python 2.6 zapewnia początek kompatybilności wstecznej, a także tryb „ostrożny”, który powinien zwiększyć świadomość potencjalnych problemów z przejściem na Python 3.
Istnieją wersje Pythona odpowiednie dla Androida i iPhone'a w wersji 2.5 lub 2.6. Dostępny w iOS Jailbreak na iOS dzięki „narzędziom konfiguracyjnym”, a na Androidzie dzięki SL4A, który daje nawet możliwość tworzenia małych interfejsów graficznych dzięki modułowi „android” i który umożliwia wysyłanie SMS-ów , aby włączyć kamerę, lub wibrować telefon. Następne kilka wierszy pokazuje, jak to zrobić:
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 secondesPort Pythona na terminale Blackberry został wydany wczerwiec 2012, dla systemu BlackBerry OS 10. Lżejsza wersja została wydana wwrzesień 2012, zwany "BlackBerry-Tart", ze względu na grę słów w języku angielskim: " a" tarta "jest lżejsza niż "ciasta" w odniesieniu do tradycyjnej " szarlotki ". Opiera się na Pythonie 3.2.2.