Python

**Python** është një gjuhë programimi e nivelit të lartë dhe me qëllim të përgjithshëm . Filozofia e saj e dizajnit thekson lexueshmërinë e kodit me përdorimin e identimit të theksuar (hapësirave në fillim të rreshtave) .  Python kontrollohet në mënyrë dinamike sipas llojit dhe mblidhet nga mbeturinat . Ai mbështet paradigma të shumta programimi, duke përfshirë programimin e strukturuar (veçanërisht procedural ),atë të orientuar drejt objekteve dhe programimin funksional.

Guido van Rossum filloi të punonte në Python në fund të viteve 1980 si një pasardhës i gjuhës së programimit ABC . Python&nbsp;Versioni 3.0, i publikuar në vitin 2008, ishte një rishikim i madh dhe jo plotësisht i pajtueshëm me versionet e mëparshme. Duke filluar me Python 3.5,  aftësi dhe fjalë kyçe për shtypje iu shtuan gjuhës, duke lejuar shtypjen statike opsionale.   , Python Software Foundation mbështet Python 3.10, 3.11, 3.12, 3.13 dhe 3.14, duke ndjekur ciklin vjetor të publikimit të projektit dhe politikën pesëvjeçare të mbështetjes. Versionet e mëparshme në serinë 3.x kanë arritur në fund të jetës së tyre dhe nuk marrin më përditësime sigurie.

Python ka fituar përdorim të gjerë në komunitetin e të mësuarit makinerik .     Mësohet gjerësisht si një gjuhë hyrëse programimi .  Që nga viti 2003, Python është renditur vazhdimisht në dhjetë gjuhët më të njohura të programimit në Indeksin e Komunitetit të Programimit TIOBE, i cili rendit gjuhët bazuar në kërkimet në 24 platforma.

## Histori 
parapamje|311x311px|Dizajneri i Python, Guido van Rossum, në PyCon US 2024
Python u krijua në fund të viteve 1980  nga Guido van Rossum në Centrum Wiskunde &amp;amp; Informatica (CWI) në Holandë .  U projektua si pasardhës i gjuhës së programimit ABC, e cila u frymëzua nga SETL,  e aftë të trajtojë përjashtime dhe të ndërveprojë me sistemin operativ Amoeba .  Implementimi i Python filloi në dhjetor 1989.  Van Rossum e publikoi për herë të parë në vitin 1991 si Python 0.9.0.  Van Rossum mori përgjegjësinë e vetme për projektin, si zhvilluesi kryesor, deri më 12 korrik 2018, kur ai njoftoi "pushimin e tij të përhershëm" nga përgjegjësitë si " diktatori bamirës për jetë " i Python (BDFL); ky titull iu dha atij nga komuniteti i Python për të reflektuar angazhimin e tij afatgjatë si vendimmarrësi kryesor i projektit.  (Ai që atëherë ka dalë nga pensioni dhe është vetëtitulluar "BDFL-emeritus".) Në janar në vitin 2019, zhvilluesit aktivë të Python core zgjodhën një Këshill Drejtues prej pesë anëtarësh për të udhëhequr projektin.  

Emri *Python* rrjedh nga seriali britanik i komedisë ''Monty Python's Flying Circus*..  (Shih  .)

Python 2.0 u publikua më 16 tetor 2000, duke përfshirë shumë veçori të reja, të tilla si kuptimi i listave, mbledhja e mbeturinave që zbulon ciklet, numërimi i referencave dhe mbështetja për Unicode .  Fundi i jetës së Python 2.7 fillimisht ishte caktuar për vitin 2015 dhe më pas u shty për në vitin 2020 për shkak të shqetësimit se një pjesë e madhe e kodit ekzistues nuk mund të transferohej lehtësisht në Python 3.   Nuk merr më përditësime ose rregullime sigurie.   Ndërsa Python 2.7 dhe versionet më të vjetra nuk mbështeten zyrtarisht, një implementim tjetër jozyrtar i Python, PyPy, vazhdon të mbështesë Python 2, dmth., "2.7.18+" (plus 3.11), me plusin që nënkupton (të paktën disa) "përditësime sigurie të transferuara ". 

Python&nbsp;Versioni 3.0 u publikua më 3 dhjetor 2008 dhe ishte një rishikim i madh dhe jo plotësisht i pajtueshëm me versionet e mëparshme, me disa semantikë të re dhe sintaksë të ndryshuar. Python 2.7.18, i publikuar në vitin 2020, ishte publikimi i fundit i Python 2.  Disa publikime në serinë Python 3.x i kanë shtuar gjuhës sintaksë të re dhe kanë bërë disa ndryshime (të konsideruara shumë të vogla) të papajtueshme me versionet e mëparshme.

Qe prej Dhje, Python 3.14.2 është publikimi më i fundit i qëndrueshëm.Të gjitha versionet më të vjetra të serisë 3.x kanë marrë një përditësim sigurie deri te Python 3.9.24 dhe pastaj sërish me 3.9.25, versioni i fundit në serinë 3.9. Python 3.10 është, që nga nëntori 2025, dega më e vjetër që ende mbështetet. Python 3.15 ka një version alfa të publikuar, dhe Android ka një ekzekutues zyrtar të shkarkueshëm të disponueshëm për Python 3.14. Publikimet marrin dy vite mbështetje të plotë të ndjekura nga tre vite mbështetje sigurie.

## Filozofia dhe karakteristikat e dizajnit 
Python është një gjuhë programimi me shumë paradigma . Programimi i orientuar nga objektet dhe programimi i strukturuar mbështeten plotësisht, dhe shumë nga veçoritë e tyre mbështesin programimin funksional dhe programimin e orientuar nga aspektet - duke përfshirë metaprogramimin  dhe metaobjektet .  Shumë paradigma të tjera mbështeten nëpërmjet zgjerimeve, duke përfshirë dizajnin me kontratë   dhe programimin logjik .  Python shpesh quhet *'gjuhë ngjitëse'*  sepse është projektuar qëllimisht për të qenë në gjendje të integrojë komponentë të shkruar në gjuhë të tjera.

Python përdor shtypjen dinamike dhe një kombinim të numërimit të referencave dhe një mbledhësi të mbeturinave që zbulon ciklet për menaxhimin e kujtesës .  Ai përdor zgjidhjen dinamike të emrave ( lidhja e vonë ), e cila lidh emrat e metodave dhe variablave gjatë ekzekutimit të programit.

Dizajni i Python-it ofron njëfarë mbështetjeje për programimin funksional në "traditën Lisp ". Ai ka funksione ,  dhe  ;  përbërje të listave, fjalorë, bashkësi dhe shprehje gjeneratorësh .  Biblioteka standarde ka dy module ( itertools dhe functools ) që zbatojnë mjete funksionale të huazuara nga Haskell dhe Standard ML . 

Filozofia thelbësore e Python është përmbledhur në Zen of Python (PEP 20) e shkruar nga Tim Peters, i cili përfshin aforizma si këto: 

* Ekspliciti është më i mirë se impliciti.
* E thjeshta është më e mirë se e ndërlikuara.
* Lexueshmëria ka rëndësi.
* Rastet e veçanta nuk janë aq të veçanta sa të thyejnë rregullat.
* Megjithatë, praktika e mposht pastërtinë.
* Gabimet nuk duhet të kalojnë kurrë në heshtje.
* Përveç nëse heshtet në mënyrë të qartë.
* Duhet të ketë një - dhe preferohet vetëm një - mënyrë të qartë për ta bërë këtë.

Megjithatë, Python ka marrë kritika për shkeljen e këtyre parimeve dhe për shtimin e fryrjes së panevojshme të gjuhës.  Përgjigjet ndaj këtyre kritikave vënë në dukje se Zen i Python është një udhëzues dhe jo një rregull.  Shtimi i disa veçorive të reja kishte qenë i diskutueshëm: Guido van Rossum dha dorëheqjen si *Diktator Mirëdashës për Jetë'' pas konfliktit në lidhje me shtimin e operatorit të shprehjes së caktimit në   

Megjithatë, në vend që të ndërtonte të gjithë funksionalitetin në thelbin e tij, Python u dizajnua të ishte shumë i zgjerueshëm nëpërmjet moduleve. Ky modularitet kompakt e ka bërë atë veçanërisht të popullarizuar si një mjet për shtimin e ndërfaqeve të programueshme në aplikacionet ekzistuese. Vizioni i Van Rossum për një gjuhë me bërthamë të vogël kryesore me një bibliotekë të madhe standarde dhe një interpretues lehtësisht të zgjerueshëm buronte nga frustrimet e tij me ABC-në, e cila përfaqësonte qasjen e kundërt. 

Python pretendon se përpiqet për një sintaksë dhe gramatikë më të thjeshtë dhe më pak të mbingarkuar, ndërkohë që u jep zhvilluesve një zgjedhje në metodologjinë e tyre të kodimit. Python-it i mungojnë sythet do while, të cilat Rossum i konsideronte të dëmshme.  Në kontrast me moton e Perl -it " ka më shumë se një mënyrë për ta bërë këtë ", Python mbështet një qasje ku "duhet të ketë një - dhe preferohet vetëm një - mënyrë të dukshme për ta bërë atë".  Megjithatë, në praktikë, Python ofron shumë mënyra për të arritur një qëllim të caktuar. Ekzistojnë të paktën tre mënyra për të formatuar një literal vargu, pa asnjë siguri se cilën duhet të përdorë një programues.  Alex Martelli është një bashkëpunëtor në Python Software Foundation dhe autor librash Python; ai shkroi se "Të përshkruash diçka si 'të zgjuar' *nuk* konsiderohet kompliment në kulturën Python." 

Zhvilluesit e Python zakonisht i japin përparësi lexueshmërisë mbi performancën. Për shembull, ata refuzojnë korrigjime  për pjesët jo kritike të implementimit të referencës CPython që do të ofronin rritje të shpejtësisë që nuk justifikojnë koston e qartësisë dhe lexueshmërisë.  &#x5B; ''* &#x5D; Shpejtësia e ekzekutimit mund të përmirësohet duke zhvendosur funksione kritike për shpejtësinë në module zgjerimi të shkruara në gjuhë të tilla si C, ose duke përdorur një përpilues të saktë si PyPy . Gjithashtu, është e mundur të transpilohet në gjuhë të tjera. Megjithatë, kjo qasje ose nuk arrin shpejtësinë e pritur, pasi Python është një gjuhë shumë dinamike, ose vetëm një nëngrup i kufizuar i Python përpilohet (me ndryshime të vogla semantike të mundshme). 

Python është menduar të jetë një gjuhë argëtuese për t’u përdorur. Ky qëllim pasqyrohet në emër – një nderim për grupin britanik të komedisë Monty Python  – dhe në qasjet e këndshme ndaj disa udhëzuesve dhe materialeve referuese. Për shembull, disa shembuj kodi përdorin termat "spam" dhe "eggs" (në lidhje me një skeç të Monty Python ), në vend të termave tipikë "foo" dhe "bar" .  

Një neologjizëm i zakonshëm në komunitetin Python është *pythonic*, i cili ka një gamë të gjerë kuptimesh që lidhen me stilin e programit: Kodi Pythonic mund të përdorë mirë idiomat Python; të jetë natyral ose të tregojë rrjedhshmëri në gjuhë; ose të jetë në përputhje me filozofinë minimaliste të Python dhe theksin në lexueshmëri. 

## Sintaksa dhe semantika 
Python është menduar të jetë një gjuhë lehtësisht e lexueshme. Formatimi i tij është vizualisht i pastër dhe shpesh përdor fjalë kyçe në anglisht, ndërsa gjuhët e tjera përdorin shenja pikësimi. Ndryshe nga shumë gjuhë të tjera, ai nuk përdor kllapa të përdredhura për të ndarë blloqet, dhe pikëpresjet pas deklaratave lejohen, por përdoren rrallë. Ka më pak përjashtime sintaksore dhe raste të veçanta sesa C ose Pascal . 

### Indentimi 
Python përdor indentim e hapësirës së bardhë, në vend të kllapave të lakuara ose fjalëve kyçe, për të kufizuar blloqet . Një rritje në thellim vjen pas deklaratave të caktuara; një ulje në thellim shënon fundin e bllokut aktual.  Kështu, struktura vizuale e programit përfaqëson me saktësi strukturën e tij semantike.  Kjo veçori nganjëherë quhet rregulli i anës së jashtme . Disa gjuhë të tjera e përdorin thellimin në këtë mënyrë; por në shumicën e gjuhëve,indentimi nuk ka kuptim semantik. Madhësia e rekomanduar e indentimi është katër hapësira. 

### Deklaratat dhe rrjedha e kontrollit 
Deklaratat e Python përfshijnë si në vijim:

* Deklarata e caktimit, duke përdorur një shenjë të vetme barazimi `=`
* Deklarata `if`, e cila ekzekuton me kusht një bllok kodi, së bashku me `else` dhe `elif` (një shkurtim i `else if` )
* Deklarata `for`, e cila iteron mbi një objekt *të iterueshëm*, duke kapur çdo element në një variabël për përdorim nga blloku i bashkangjitur; variabla nuk fshihet kur cikli përfundon.
* Deklarata `while`, e cila ekzekuton një bllok kodi për sa kohë që kushti boolean është i vërtetë
* Deklarata `try`, e cila lejon që përjashtimet e ngritura në bllokun e kodit të bashkangjitur të kapen dhe trajtohen nga deklaratat `except` (ose sintaksa e re `except*` në Python 3.11 për grupet e përjashtimeve);  deklarata `try` gjithashtu siguron që kodi i pastrimit në një bllok `finally` të ekzekutohet gjithmonë pavarësisht se si del blloku.
* Deklarata `raise`, e përdorur për të ngritur një përjashtim të specifikuar ose për të ri-ngrerë një përjashtim të kapur
* Deklarata e `class`, e cila ekzekuton një bllok kodi dhe ia bashkëngjit hapësirën e tij lokale të emrave një klase, për përdorim në programimin e orientuar nga objektet.
* Deklarata `def`, e cila përcakton një funksion ose metodë
* Deklarata `with`, e cila përfshin një bllok kodi brenda një menaxheri konteksti, duke lejuar sjellje të ngjashme me blerjen e burimeve si inicializim (RAII) dhe duke zëvendësuar një idiom të zakonshëm try/finally  Shembuj të një konteksti përfshijnë marrjen e një bllokimi përpara se të ekzekutohet një kod dhe më pas lirimin e bllokimit; ose hapjen dhe më pas mbylljen e një skedari.
* Deklarata `break`, e cila del nga një lak
* Deklarata `continue`, e cila anashkalon pjesën tjetër të iteracionit aktual dhe vazhdon me tjetrin
* Deklarata `del`, e cila heq një variabël—duke fshirë referencën nga emri në vlerë dhe duke prodhuar një gabim nëse variabli referohet përpara se të ripërcaktohet 
* Deklarata `pass`, që shërben si një NOP (domethënë, pa operacion), e cila është e nevojshme sintaksisht për të krijuar një bllok kodi bosh.
* Deklarata `assert`, e përdorur në debugging për të kontrolluar kushtet që duhet të zbatohen
* Deklarata `yield`, e cila kthen një vlerë nga një funksion gjenerues (dhe gjithashtu një operator); përdoret për të zbatuar korutinat
* Deklarata `return`, e përdorur për të kthyer një vlerë nga një funksion
* Deklaratat e `import` dhe `from`, të përdorura për të importuar module, funksionet ose variablat e të cilave mund të përdoren në programin aktual.
* Deklaratat `match` dhe `case`, analoge me një konstruksion deklarate switch, të cilat krahasojnë një shprehje me një ose më shumë raste si një masë e rrjedhës së kontrollit.

Deklarata e caktimit ( `=` ) lidh një emër si referencë me një objekt të veçantë, të alokuar dinamikisht. Variablat mund të kthehen më pas në çdo kohë te çdo objekti. Në Python, një emër variabli është një mbajtës reference gjenerik pa një lloj të dhënash fikse; megjithatë, ai gjithmonë i referohet *një'' objekti me një lloj. Kjo quhet tipizim dinamik - në kontrast me gjuhët e tipizuara statikisht, ku çdo variabël mund të përmbajë vetëm një vlerë të një lloji të caktuar.

Python nuk mbështet optimizimin e thirrjeve bishtore ose vazhdimet e klasit të parë ; sipas Van Rossum, gjuha nuk do ta mbështesë kurrë.   Megjithatë, mbështetje më e mirë për funksionalitetin e ngjashëm me korutinën ofrohet duke zgjeruar gjeneratorët e Python.  Para versionit 2.5, gjeneratorët ishin iteratorë dembelë ; të dhënat kalonin në një drejtim nga gjeneratori. Nga Python versioni 2.5 e tutje, është e mundur të kalohen të dhënat përsëri në një funksion gjenerues; dhe nga versioni 3.3, të dhënat mund të kalohen përmes niveleve të shumëfishta të pirgut. 

### Shprehjet 
Shprehjet e Python përfshijnë si në vijim:

* Operatorët `+`, `-` dhe `*` për mbledhje, zbritje dhe shumëzim matematikor janë të ngjashëm me gjuhë të tjera, por sjellja e ndarjes (division) ndryshon. Në Python ka dy lloje ndarjeje: **ndarja e dyshemesë (floor division ose integer division)** `//` dhe **ndarja me pikë lundruese (floating-point division)** `/`. Python përdor operatorin `**` për fuqizim (exponentiation).
* Python përdor operatorin `+` për **bashkimin e vargjeve (string concatenation)**. Gjuha përdor operatorin `*` për të **përsëritur një varg** një numër të caktuar herësh.
* Operatori infiks `@` është menduar të përdoret nga biblioteka të tilla si **NumPy** për **shumëzimin e matricave**.
* Sintaksa `:=`, e quajtur **“walrus operator”**, u prezantua në Python 3.8. Ky operator cakton vlera variablave si pjesë e një shprehjeje më të madhe.
* Në Python, `==` krahasohet dy objekte sipas vlerës. Operatorit `is` mund t’i përdoret për të krahasuar identitetet e objekteve (krahasim sipas referencës), dhe krahasimet mund të lidhen së bashku — për shembull: a .
* Python përdor `and`, `or` dhe `not` si operatorë boolean.
* Python ka një lloj shprehjeje të quajtur **list comprehension**, dhe një shprehje më të përgjithshme të quajtur **generator expression**.
* **Funksionet anonime** implementohen duke përdorur **lambda expressions**; megjithatë, çdo trup funksioni mund të përmbajë vetëm një shprehje.
* Shprehjet kondicionale shkruhen si `x if c else y`. (Kjo është ndryshe nga operatori `c ? x : y` i zakonshëm në shumë gjuhë të tjera, ku rendi i operandëve ndryshon.)
* Python bën dallim midis **listave (lists)** dhe **tuple-ve (tuples)**. Listat shkruhen si `[1, 2, 3]`, janë të ndryshueshme, dhe nuk mund të përdoren si çelësa të fjalorëve , pasi çelësat në Python duhet të jenë të pandryshueshëm. Tuple-t shkruhen si `(1, 2, 3)`, janë të pandryshueshme dhe mund të përdoren si çelësa të fjalorëve, për sa kohë që të gjitha elementet e tuple janë të pandryshueshme. Operatorit `+` mund t’i përdoret për të bashkuar dy tuple, gjë që nuk ndryshon direkt përmbajtjen e tyre, por prodhon një tuple të ri që përmban elementët e të dyve. Për shembull, duke marrë variablin `t` që fillimisht është `(1, 2, 3)`, ekzekutimi i `t = t + (4, 5)` së pari llogarit `t + (4, 5)`, që jep `(1, 2, 3, 4, 5)`; ky rezultat pastaj caktohet prapë tek `t` — duke “ndryshuar efektivisht përmbajtjen” e `t` duke respektuar natyrën e pandryshueshme të objekteve tuple. Kllapat janë opsionale për tuple në kontekste të qarta.
* Python ka **ndarje të sekuencave (sequence unpacking)** ku shumë shprehje, secila duke llogaritur në diçka që mund të caktohet (p.sh., një variabël ose një pronë e shkruhetshme), lidhen si kur formohet një literal tuple; si një tërësi, rezultatet vendosen në anën e majtë të shenjës së barazimit në një deklaratë caktimi. Kjo deklaratë pret një objekt të përsëritshëm (iterable) në anën e djathtë të barazimit që të prodhojë të njëjtin numër vlerash si shprehjet e shkruhetshme në anën e majtë; gjatë iterimit, deklarata cakton secilën nga vlerat e prodhuara në të djathtë tek shprehja përkatëse në të majtë.
* Python ka një operator **“string format”** `%` që funksionon në mënyrë analoge me formatin `printf` në gjuhën C — p.sh., `"spam=%s eggs=%d" % ("blah", 2)` jep `"spam=blah eggs=2"`. Në Python 2.6+ dhe 3+, ky operator u plotësua me metodën `format()` të klasës `str`, p.sh., `"spam={0} eggs={1}".format("blah", 2)`.     Python 3.6 shtoi **f-strings**:              {{Code|1=spam = "blah"; eggs = 2; f'spam={spam} eggs={eggs}'|2=python}}.
* Vargjet (strings) në Python mund të bashkohen duke i “shtuar” me operatorin `+` (i njëjti si për numrat e plotë dhe flotantët); p.sh., `"spam" + "eggs"` jep `"spameggs"`. Nëse vargjet përmbajnë numra, ato bashkohen si vargje dhe jo si numra, p.sh., `"2" + "2"` jep `"22"`.
* Python mbështet literalë vargjesh në disa mënyra:
** Të kufizuara me thonjëza të vetme ose të dyfishta; thonjëzat e vetme dhe të dyfishta kanë funksionalitet të barabartë (ndryshe nga shell-et e Unix, Perl dhe gjuhët e ndikuara nga Perl). Të dy përdorin shenjën `\` si karakter escape. **Interpolimi i vargjeve** u bë i disponueshëm në Python 3.6 si **“formatted string literals”**.
** **Triple-quoted**, dmth. fillojnë dhe mbarojnë me tre thonjëza të vetme ose të dyfishta; mund të zgjaten në shumë linja dhe funksionojnë si here-documents në shell, Perl dhe Ruby.
** **Raw strings**, të shënuara duke shtuar prefiksin `r` para literalit të vargut. Sekuencat escape nuk interpretohen; prandaj raw strings janë të dobishme ku ka shumë backslash, si në shprehje të rregullta (regex) ose rrugë stili Windows.(Krahaso "`@`-quoting" ne C#.)
* Python ka shprehje për **indeksim dhe prerje të array-ve (array slicing)** në lista, të cilat shkruhen si `a[key]`, `a[start:stop]` ose `a[start:stop:step]`. Indekset fillojnë nga zero, dhe indekset negative janë relative ndaj fundit. Pjesët (slices) marrin elementët nga indeksi fillestar deri tek indeksi përfundimtar, por **pa përfshirë** atë të fundit. Parametri i tretë opsional, i quajtur **step ose stride**, lejon që elementët të anashkalohen ose të kthehen në rend të kundërt. Indekset e pjesëve mund të lihen bosh — p.sh., `a[:]` jep një kopje të tërë listës. Çdo element i një slice është një **kopje e shpejtë (shallow copy)**.

Në Python, një dallim midis shprehjeve dhe deklaratave zbatohet në mënyrë të ngurtë, në kontrast me gjuhë të tilla si Common Lisp, Scheme ose Ruby . Ky dallim çon në dyfishimin e disa funksionaliteteve, për shembull:

* Kuptimet e listës kundrejt cikleve `for`
* Shprehjet kushtëzuese kundrejt blloqeve `if`
* Funksionet e integruara `eval()` kundrejt `exec()` (në Python 2, `exec` është një deklaratë); funksioni i parë është për shprehje, ndërsa i dyti është për deklarata

Një deklaratë nuk mund të jetë pjesë e një shprehjeje; për shkak të këtij kufizimi, shprehje të tilla si kuptimet e list dhe `dict` (dhe shprehjet lambda) nuk mund të përmbajnë deklarata. Si një rast i veçantë, një deklaratë caktimi si a = 1 nuk mund të jetë pjesë e shprehjes kushtëzuese të një deklarate kushtëzuese.

### Shkrimi 
parapamje|Hierarkia standarde e tipit në Python 3
Python përdor tipizimin duck, dhe ka objekte të tipizuara, por emra variablash të patipizuara. Kufizimet e tipit nuk kontrollohen në kohën e përcaktimit; përkundrazi, operacionet në një objekt mund të dështojnë në kohën e përdorimit, duke treguar se objekti nuk është i një lloji të përshtatshëm. Pavarësisht se është i tipizuar dinamikisht, Python është i tipizuar fort, duke ndaluar operacionet që janë të përcaktuara dobët (p.sh., shtimi i një numri dhe një vargu) në vend që të përpiqet t'i interpretojë ato në heshtje.

Python u lejon programuesve të përcaktojnë llojet e tyre duke përdorur klasat, më shpesh për programim të orientuar nga objektet . Instancat e reja të klasave ndërtohen duke thirrur klasën, për shembull,  ose  ); klasat janë instanca tëmetaklasë `type` (i cili është një instancë e vetvetes), duke lejuar kështu metaprogramimin dhe reflektimin .

Përpara versionit 3.0, Python kishte dy lloje klasash, të dyja duke përdorur të njëjtën sintaksë: *stili i vjetër* dhe *stili i ri* . Versionet aktuale të Python mbështesin vetëm semantikën e stilit të ri.

Python mbështet shënime opsionale të tipit .   Këto shënime nuk imponohen nga gjuha, por mund të përdoren nga mjete të jashtme si **mypy** për të kapur gabimet. Python përfshin një modul `typing` që përfshin disa emra tipi për shënime tipi.   Gjithashtu, Mypy mbështet një kompilues Python të quajtur mypyc, i cili shfrytëzon shënimet e tipit për optimizim. 

### Operacione aritmetike 
Python përfshin simbole konvencionale për operatorët aritmetikë ( `+`, `-`, `*`, `/` ), operatorin e pjesëtimit të katit `//` dhe operatorin modulo `%` . (Me operatorin modulo, një mbetje mund të jetë negative, p.sh., `4 % -3 == -2` .) Gjithashtu, Python ofron simbolin `**` për eksponencim, p.sh. `5**3 == 125` dhe `9**0.5 == 3.0` . Gjithashtu, ofron operatorin e shumëzimit të matricës `@` .  Këta operatorë funksionojnë si në matematikën tradicionale; me të njëjtat rregulla përparësie, operatorët infiks `+` dhe `-` mund të jenë gjithashtu unarë, për të përfaqësuar përkatësisht numra pozitivë dhe negativë.

Pjesëtimi midis numrave të plotë prodhon rezultate me presje dhjetore. Sjellja e pjesëtimit ka ndryshuar ndjeshëm me kalimin e kohës: 

* Versioni aktual i Python (domethënë, që nga versioni 3.0) e ndryshoi operatorin `/` për të përfaqësuar gjithmonë pjesëtimin me presje dhjetore, p.sh.,  .
* U prezantua operatori i ndarjes së katit `//`, që do të thotë se `7//3 == 2`, `-7//3 == -3`, `7.5//3 == 2.0` dhe `-7.5//3 == -3.0` . Për Python 2.7, shtimi i  deklarata lejon një moduli në Python 2.7 të përdorë rregullat e Python 3.x për pjesëtimin (shih më sipër).

Në termat e Python, operatori `/` përfaqëson *pjesëtimin e vërtetë* (ose thjesht *pjesëtimin* ), ndërsa operatori `//` përfaqëson *pjesëtimin e katit.* Përpara versionit 3.0, operatori `/` përfaqëson *pjesëtimin klasik* . 

Rrumbullakosja drejt pafundësisë negative, megjithëse një metodë e ndryshme nga ajo në shumicën e gjuhëve, i shton qëndrueshmëri Python-it. Për shembull, kjo rrumbullakosje nënkupton që ekuacioni  është gjithmonë i vërtetë. Gjithashtu, rrumbullaksimi nënkupton që ekuacioni  është i vlefshëm si për vlerat pozitive ashtu edhe për ato negative të `a` . Siç pritej, rezultati i `a%b` qëndron në intervalin gjysmë të hapur [0, *b* ), ku `b` është një numër i plotë pozitiv; megjithatë, ruajtja e vlefshmërisë së ekuacionit kërkon që rezultati të qëndrojë në intervalin ( *b*, 0] kur `b` është negativ. 

Python ofron një funksion `round` për rrumbullaksimin e një numri me float në numrin e plotë më të afërt. Për thyerjen e barazimit, Python 3 përdor metodën " *round-to-even"* : `round(1.5)` dhe `round(2.5)` të dyja prodhojnë `2` .Versionet e Python para 3 përdornin metodën " round-away-from-zero" : `round(0.5)` është `1.0`, dhe `round(-0.5)` është `−1.0` . 

Python lejon që shprehjet booleane që përmbajnë marrëdhënie të shumëfishta barazie të jenë në përputhje me përdorimin e përgjithshëm në matematikë. Për shembull, shprehja a  teston nëse `a` është më e vogël se `b` dhe `b` është më e vogël se `c` .  Gjuhët e nxjerra nga C e interpretojnë këtë shprehje ndryshe: në C, shprehja së pari do të vlerësonte a , duke rezultuar në 0 ose 1, dhe ky rezultat më pas do të krahasohej me `c` . 

Python përdor aritmetikë me saktësi arbitrare për të gjitha operacionet me numra të plotë. Lloji/klasa `Decimal` në modulin `decimal` ofron numra decimalë me presje dhjetore me një saktësi arbitrare të paracaktuar me disa mënyra rrumbullakesimi.  Klasa `Fraction` në modulin `fractions` ofron saktësi arbitrare për numrat racionalë . 

Për shkak të bibliotekës së gjerë të matematikës së Python dhe bibliotekës së palës së tretë NumPy, gjuha përdoret shpesh për skriptim shkencor në detyra të tilla si përpunimi dhe manipulimi i të dhënave numerike.  

### Sintaksa e funksionit 
Funksionet krijohen në Python duke përdorur fjalën kyçe `def` . Një funksion përcaktohet në mënyrë të ngjashme me mënyrën se si thirret, duke dhënë së pari emrin e funksionit dhe më pas parametrat e kërkuar. Ja një shembull i një funksioni që printon të dhënat e tij hyrëse:
```python3
def printer(input1, input2 = "tashmë aty"):
  print(input1)
  print(input2)
  
printer("Përshëndetje")
  
# Shembull i daljes:
# përshëndetje
# tashmë aty
```
Për të caktuar një vlerë të paracaktuar për një parametër funksioni në rast se nuk jepet asnjë vlerë aktuale në kohën e ekzekutimit, sintaksa e përcaktimit të variablave mund të përdoret brenda kokës së funksionit.

## Shembuj kodi 
Programi "Përshëndetje, Botë!" :
```python
print('Përshëndetje, Botë!')
```
Program për të llogaritur faktorialin e një numri të plotë jo-negativ:
```python
text = input('Shkruaj një numër, dhe faktoriali i tij do të shtypet: ')
n = int(text)

if n &#x5B; ''* &#x5D;

Shell-e të tjerë, duke përfshirë IDLE dhe IPython, shtojnë aftësi shtesë si përmirësim të plotësimit automatik, ruajtjes së gjendjes së sesionit dhe nxjerrjes në pah të sintaksës .  

IDE-të standarde të desktopit përfshijnë PyCharm, Spyder dhe Visual Studio Code  ; ekzistojnë IDE të bazuara në shfletues web, siç janë mjediset e mëposhtme:

* Jupyter Notebooks, një platformë informatike interaktive me burim të hapur; 
* PythonAnywhere, një IDE e bazuar në shfletues dhe një mjedis hostimi; dhe
* Canopy, një IDE komerciale nga Enthought që thekson informatikën shkencore .  

## Implementime 
### Implementimi i referencës 
CPython është implementimi referues i Python. Ky implementim është shkruar në C, duke përmbushur standardin C11  që nga versioni 3.11. Versionet më të vjetra përdorin standardin C89 me disa veçori të zgjedhura të C99, por zgjerimet e palëve të treta nuk kufizohen vetëm në versionet më të vjetra të C - p.sh., ato mund të implementohen duke përdorur C11 ose C++.   CPython kompilon programet Python në një bytekod të ndërmjetëm,  i cili më pas ekzekutohet nga një makinë virtuale .  CPython shpërndahet me një bibliotekë të madhe standarde të shkruar në një kombinim të C dhe Python-it vendas.

CPython është i disponueshëm për shumë platforma, duke përfshirë Windows dhe shumicën e sistemeve moderne të ngjashme me Unix, duke përfshirë macOS (dhe Apple M1 Mac, që nga Python)&nbsp;3.9.1, duke përdorur një instalues eksperimental). Duke filluar me Python 3.9, instaluesi i Python dështon qëllimisht të instalohet në Windows 7 dhe 8;   Windows XP mbështetej deri në Python 3.5, me mbështetje jozyrtare për VMS .  Lëvizshmëria e platformës ishte një nga prioritetet më të hershme të Python.  Gjatë zhvillimit të Python 1 dhe 2, madje mbështeteshin edhe OS/2 dhe Solaris ;  që nga ajo kohë, mbështetja është hequr për shumë platforma.

Të gjitha versionet aktuale të Python (që nga versioni 3.7) mbështesin vetëm sisteme operative që kanë shumë fijezime, dhe deri tani nuk mbështesin aq shumë sisteme operative (duke hequr shumë të vjetruara) sesa në të kaluarën.

### Kufizimet e implementimit të referencës 
* Përdorimi i energjisë së Python me CPython për kodin tipik të shkruar është shumë më i keq se ai i C me një faktor prej 75.88. 
* Rendimenti i Python me CPython për kodin tipik të shkruar është më i keq se ai i C me një faktor prej 71.9.  megjithatë ekzistojnë implementime që janë të afta të kompilojnë vërtet Python. Implementimet alternative përfshijnë si në vijim:

* PyPy është një interpretues më i shpejtë dhe në përputhje me Python. 2.7 dhe 3.10.   Kompiluesi “just-in-time” i PyPy shpesh përmirëson shpejtësinë ndjeshëm në krahasim me CPython, por PyPy nuk mbështet disa librari të shkruara në C.  PyPy ofron mbështetje për arkitekturën e grupit të udhëzimeve RISC-V .
* Codon është një implementim me një kompilues paraprak (AOT), i cili kompilon një gjuhë të tipizuar statikisht si Python, "sintaksa dhe semantika e së cilës janë pothuajse identike me ato të Python, ka disa dallime të dukshme"  Për shembull, Codon përdor numra të plotë makine 64-bit për shpejtësi, jo në mënyrë arbitrare si me Python; Zhvilluesit e Codon pretendojnë se përshpejtimet mbi CPython janë zakonisht në rendin e dhjetë deri në njëqind herë. Codon kompilohet në kod makine (nëpërmjet LLVM ) dhe mbështet shumëfillëzimin nativ.  Codon gjithashtu mund të kompilohet në module zgjerimi Python që mund të importohen dhe përdoren nga Python.
* MicroPython dhe CircuitPython janë Python 3 variante të optimizuara për mikrokontrollues, duke përfshirë Lego Mindstorms EV3 . 
* Pyston është një variant i kohës së ekzekutimit të Python që përdor kompilimin "just-in-time" për të përshpejtuar ekzekutimin e programeve Python. 
* Cinder është një degëzim i CPython 3.8 i orientuar drejt performancës që përmban një numër optimizimesh, duke përfshirë ruajtjen në memorje të kodit byte, vlerësimin e shpejtë të korutinave, një JIT metodë-në-kohë dhe një përpilues eksperimental të kodit byte. 
* Gjuha e informatikës së integruar Snek    "është e frymëzuar nga Python, por nuk është Python. Është e mundur të shkruhen programe Snek që funksionojnë në një sistem të plotë Python, por shumica e programeve Python nuk do të funksionojnë në Snek."  Snek është i pajtueshëm me mikrokontrolluesit AVR 8-bitësh siç është Arduino i bazuar në ATmega 328P, si dhe me mikrokontrolluesit më të mëdhenj që janë të pajtueshëm me MicroPython . Snek është një gjuhë imperative që (ndryshe nga Python) lë jashtë programimin e orientuar nga objektet . Snek mbështet vetëm një lloj të dhënash numerike, i cili përmban precizion të vetëm 32-bitësh (i ngjashëm me numrat JavaScript, megjithëse më të vegjël).

### Implementime të pambështetura 
Python pa stack është një degëzim i rëndësishëm i CPython që implementon mikrofibra . Ky implementim përdor stivën e thirrjeve ndryshe, duke lejuar kështu programe masivisht të njëkohshme. PyPy gjithashtu ofron një version pa stack. 

Janë zhvilluar kompilues Python të momentit, por tani nuk mbështeten:

* Google filloi një projekt të quajtur Unladen Swallow në vitin 2009: ky projekt synonte të përshpejtonte interpretuesin e Python pesëfish duke përdorur LLVM dhe të përmirësonte aftësinë e shumëfishimit për shkallëzimin në mijëra bërthama,  ndërsa implementimet tipike janë të kufizuara nga bllokimi global i interpretuesit .
* Psyco është një kompilues i specializuar "just-in-time" që nuk prodhohet më, i cili integrohet me CPython dhe transformon kodin e bajtit në kod makine gjatë kohës së ekzekutimit. Kodi i emetuar është i specializuar për lloje të caktuara të të dhënave dhe është më i shpejtë se kodi standard Python. Psyco nuk e mbështet Python 2.7 ose më i ri.
* PyS60 ishte një Python 2 interpretues për telefonat celularë Seria 60, i cili u publikua nga Nokia në vitin 2005. Interpretuesi zbatoi shumë module nga biblioteka standarde e Python, si dhe module shtesë për integrimin me sistemin operativ Symbian . Nokia N900 gjithashtu mbështet Python përmes bibliotekës së widget-eve GTK, duke lejuar që programet të shkruhen dhe të ekzekutohen në pajisjen e synuar. 

### Transpilerë në gjuhë të tjera 
Ekzistojnë disa kompilues/ transpilues për gjuhë objektesh të nivelit të lartë; gjuha burimore është Python i pakufizuar, një nëngrup i Python-it ose një gjuhë e ngjashme me Python-in:

* Brython  dhe Transcrypt   kompilojnë Python në JavaScript .
* Cython kompilon një superbashkësi të Python në C. Kodi që rezulton mund të përdoret me Python nëpërmjet thirrjeve të drejtpërdrejta të API-t në nivel C në interpretuesin Python.
* PyJL kompilon/transpilon një nëngrup të Python në "kod burimor Julia të lexueshëm nga njeriu, të mirëmbajtur dhe me performancë të lartë".  Pavarësisht pretendimeve të zhvilluesve për performancë, kjo nuk është e mundur për kodin *arbitrar'' Python; domethënë, kompilimi në një gjuhë ose kod makine më të shpejtë dihet se është i pamundur në rastin e përgjithshëm. Semantika e Python mund të ndryshohet potencialisht, por në shumë raste përshpejtimi është i mundur me pak ose aspak ndryshime në kodin Python. Kodi burimor Julia më i shpejtë mund të përdoret më pas nga Python ose të kompilohet në kod makine.
* Nuitka kompilon Python në C.  Ky kompilues punon me Python 3.4 deri në 3.13 (dhe 2.6 dhe 2.7) për platformat kryesore të mbështetura nga Python (dhe Windows 7 ose edhe Windows XP) dhe për Android. Zhvilluesit e kompiluesve pretendojnë mbështetje të plotë për Python 3.10, mbështetje të pjesshme për Python 3.11 dhe 3.12, dhe mbështetje eksperimentale për Python 3.13. Nuitka mbështet macOS duke përfshirë versionet e bazuara në Apple Silicon. Kompiluesi është pa pagesë, megjithëse ka shtesa komerciale (p.sh., për fshehjen e kodit burimor).
* Numba është një kompilues JIT që përdoret nga Python; kompiluesi përkthen një nëngrup të kodit Python dhe NumPy në kod të shpejtë makine. Ky mjet aktivizohet duke shtuar një dekorues në kodin përkatës Python.
* Pythran kompilon një nëngrup të Python&nbsp;3 në C++ ( C++11 ). 
* RPython mund të kompilohet në C dhe përdoret për të ndërtuar interpretuesin PyPy për Python.
* Transpileri Python → 11l → C++  kompilon një nëngrup të Python-it&nbsp;3 në C++ ( C++17 ).

Ekzistojnë gjithashtu përpilues të specializuar:

* MyHDL është një gjuhë përshkrimi hardueri (HDL) e bazuar në Python që konverton kodin MyHDL në kod Verilog ose VHDL .

Ekzistonin disa projekte më të vjetra, si dhe kompilues që nuk ishin projektuar për përdorim me Python 3.x dhe sintaksën përkatëse:

* Grumpy i Google-it e zëvendëson Python-in 2 për të shkuar .    Publikimi i fundit ishte në vitin 2017.
* IronPython lejon ekzekutimin e Python 2.7 programe me .NET Common Language Runtime .  Një version alfa (i lëshuar në vitin 2021) është i disponueshëm për "Python 3.4, megjithëse mund të përfshihen veçori dhe sjellje nga versionet e mëvonshme." 
* Jython kompilon Python 2.7 në kodin bajtesh Java, duke lejuar përdorimin e librarive Java nga një program Python. 
* Pyrex (i publikuar për herë të fundit në 2010) dhe Shed Skin (i publikuar për herë të fundit në 2013) kompilohen përkatësisht në C dhe C++.

### Performanca 
Një krahasim i performancës midis implementimeve të ndryshme të Python, duke përdorur një ngarkesë pune jo-numerike (kombinatoriale), u prezantua në EuroSciPy '13. Përveç kësaj, performanca e Python në krahasim me gjuhët e tjera të programimit është krahasuar me The Computer Language Benchmarks Game . 

Ekzistojnë disa qasje për optimizimin e performancës së Python, pavarësisht ngadalësisë së natyrshme të një gjuhe të interpretuar . Këto qasje përfshijnë strategjitë ose mjetet e mëposhtme:

* Kompilimi në kohë : Kompilimi dinamik i pjesëve të një programi Python gjatë ekzekutimit të programit. Kjo teknikë përdoret në biblioteka të tilla si Numba dhe PyPy .
* Kompilimi statik : Ndonjëherë, kodi Python mund të kompilohet në kod makine diku para ekzekutimit. Një shembull i kësaj qasje është Cython, i cili kompilon Python në C.
* Konkurrenca dhe paralelizmi : Detyra të shumëfishta mund të ekzekutohen njëkohësisht. Python përmban module të tilla si `multiprocessing` për të mbështetur këtë formë të paralelizmit. Për më tepër, kjo qasje ndihmon në kapërcimin e kufizimeve të Global Interpreter Lock (GIL) në detyrat e CPU-së.
* Struktura efikase të të dhënave : Performanca mund të përmirësohet gjithashtu duke përdorur lloje të të dhënave të tilla si `Set` për testet e anëtarësisë ose `deque` nga `collections` për operacionet e radhës .
* Rritjet në performancë mund të vërehen duke përdorur librari të tilla si NumPy . Shumica e librarive Python me performancë të lartë përdorin C ose Fortran në vend të interpretuesit Python. 

## Zhvillimi i Gjuhës 
Zhvillimi i Python kryhet kryesisht përmes procesit *të Propozimit të Përmirësimit të Python* (PEP); ky proces është mekanizmi kryesor për të propozuar veçori të reja kryesore, për të mbledhur kontributin e komunitetit mbi çështjet dhe për të dokumentuar vendimet e dizajnit të Python.  Stili i kodimit Python trajtohet në PEP.&nbsp;8.  PEP-të e shquara shqyrtohen dhe komentohen nga komuniteti i Python dhe këshilli drejtues. 

Përmirësimi i gjuhës korrespondon me zhvillimin e implementimit të referencës CPython. Lista e postimeve python-dev është forumi kryesor për zhvillimin e gjuhës. Çështje specifike u diskutuan fillimisht në gjurmuesin e gabimeve Roundup të organizuar nga fondacioni.  Në vitin 2022, të gjitha çështjet dhe diskutimet u migruan në GitHub .  Zhvillimi fillimisht u zhvillua në një depo të vetë-organizuar të kodit burimor që ekzekutonte Mercurial, derisa Python u zhvendos në GitHub në janar 2017. 

Versionet publike të CPython kanë tre lloje, të cilat dallohen nga ajo pjesë e numrit të versionit që rritet:

* *Versione të papajtueshme me versionet e prapambetura*, ku kodi pritet të prishet dhe duhet të portohet manualisht. Pjesa e parë e numrit të versionit rritet. Këto lëshime ndodhin rrallë - versioni 3.0 u lëshua 8 vjet pas versionit 2.0. Sipas Guido van Rossum, një version 4.0 ndoshta nuk do të ekzistojë kurrë. 
* *Versionet kryesore ose "me karakteristika"* janë kryesisht të pajtueshme me versionin e mëparshëm, por prezantojnë karakteristika të reja. Pjesa e dytë e numrit të versionit rritet. Duke filluar me Python 3.9, këto publikime pritet të ndodhin çdo vit.   Çdo version kryesor mbështetet nga rregullime të gabimeve për disa vite pas publikimit të tij. 
* *Versionet e korrigjimit të gabimeve*,  të cilat nuk prezantojnë veçori të reja, ndodhin afërsisht çdo tre muaj; këto versione bëhen kur një numër i mjaftueshëm gabimesh janë korrigjuar që nga versioni i fundit. Dobësitë e sigurisë gjithashtu korrigjohen në këto versione. Pjesa e tretë dhe e fundit e numrit të versionit rritet. 

Shumë versione alfa, beta dhe kandidatë për lëshime lëshohen gjithashtu si parapamje dhe për testim para lëshimeve përfundimtare. Edhe pse ekziston një orar i përafërt për lëshimet, ato shpesh vonohen nëse kodi nuk është ende gati. Ekipi i zhvillimit të Python monitoron gjendjen e kodit duke ekzekutuar një suitë të madhe testimi njësie gjatë zhvillimit. 

Konferenca kryesore akademike mbi Python është PyCon . Gjithashtu, ekzistojnë programe të veçanta mentorimi për Python, të tilla si PyLadies .

## Emërtimi 
Emri i Python është frymëzuar nga grupi britanik i komedisë Monty Python, të cilin krijuesi i Python, Guido van Rossum, e shijoi gjatë zhvillimit të gjuhës. Referencat e Monty Python shfaqen shpesh në kodin dhe kulturën Python;  për shembull, variablat metasintaksore të përdorura shpesh në literaturën Python janë *spam* dhe *eggs*, në vend të *foo* dhe *bar* tradicionale. Gjithashtu, dokumentacioni zyrtar i Python përmban referenca të ndryshme për rutinat e Monty Python.   Përdoruesit e Python ndonjëherë quhen "Pythonistas". 

## Gjuhët e ndikuara nga Python 
* Cobra ka një dokument *Mirënjohjeje* që e rendit Python-in të parin midis gjuhëve që kanë ndikuar. 
* ECMAScript dhe JavaScript huazuan iteratorë dhe gjeneratorë nga Python. 
* Go është projektuar për "shpejtësi pune në një gjuhë dinamike si Python". 
* Julia u krijua për të qenë "po aq e përdorshme për programim të përgjithshëm sa Python". 
* Mojo është pothuajse   një mbibashkësi e Python-it. 
* GDScript është ndikuar fuqimisht nga Python. 
* Groovy, Boo, CoffeeScript, F#, Nim, Ring,  Ruby,  Swift,  dhe V  janë ndikuar gjithashtu.

## Shih edhe 
* Lista e librave të programimit Python
* pip (menaxher paketash)
* Pydoc
* NumPy
* SciPy
* Jupiter
* Pytorch
* Kitoni
* CPython
* Mojo
* Pygame
* PyQt
* PyGTK
* PyPy
* PyCon
* Google ColabIDE online pa konfigurim që ekzekuton Python

## Shënime 
**a.** ^ Që nga versioni 3.5, por ato këshilla injorohen, përveçse me mjete jozyrtare.

**b.^**

* **Niveli 1 (Tier 1):** Linux 64-bit, macOS; Windows 8.1 64- dhe 32-bit dhe më të vonshme me versione më të vjetra të Python-it.
* **Niveli 2 (Tier 2):** P.sh. WebAssembly 32-bit (WASI).
* **Niveli 3 (Tier 3):** Android 64-bit, iOS, FreeBSD, dhe Raspberry Pi OS (32-bit).  Jozyrtare (ose dihet që kanë funksionuar): variante të tjera Unix-like/BSD dhe disa platforma të tjera.

**c.** ^ `del` në Python nuk sillet në të njëjtën mënyrë si `delete` në gjuhë si C++, ku ai përdoret për të thirrur destruktorin dhe për të liruar memorien e heap-it.

### Referime 
* 
* 
* 
* 

## Lexime të mëtejshme 
* 
* 
* 
* 

## Lidhje të jashtme 
* Python documentation
* The Python Tutorial