Logo van Python
**Python** is 'n hoëvlak-, oopbron-programmeertaal wat deur Guido van Rossum vrygestel is in 1991. Python se ontwerpsfilosofie is om so eenvoudig as moontlik te wees om te lees, en laat 'n programmeerder dus toe om 'n programmatiese funksie uit te voer met minder lyne kode as wat tipies moontlik sou wees in ander tale, bv. C. 'n Goeie voorbeeld van Python se klem op eenvoudigheid is die feit dat blokke kode nie tussen hakkies geskryf word nie, maar liewers staat maak op 'n sekere hoeveelheid spasies om blokke kode saam te groepeer.

Geskiedenis
-----------

Python het posgevat in die laat 1980's en die implementering daarvan deur Guido van Rossum het in Desember 1989 begin by die Sentrum vir Informatika en Wiskunde (CWI) in Nederland. Die taal was bedoel om 'n 'n verbetering van die ABC-taal te wees, wat sagteware-uitsonderings kan hanteer en kan werk met die Amoeba bedryfstelsel. Van Rossum is Python se hoofontwikkelaar en het steeds die grootste sê in die huidige ontwikkeling en vooruitgaan van Python. Die Python gemeenskap aanvaar sy besluite en het hom die titel gegee van *lewenslange welwillende diktator*.

Python 2.0 is vrygestel op 16 Oktober 2000 en het 'n verskeidenheid nuwe eienskappe gehad, insluitend verbeterde geheuebestuur (*garbage collector*) en ondersteuning vir Unicode. Na die vrystelling van die weergawe het die ontwikkelingsproses verander en is die gebruikersgemeenskap aktief ingelig en betrek.

Python 3.0 (populêre vroeë name sluit in Python 3000 en py3k) is na 'n lang toetsperiode op 3 Desember 2008 vrygestel. Dit het baie nuwe eienskappe aangebied, maar het nie die vorige weergawes van Python ondersteun nie. Die meerderheid van sy verbeterde eienskappe is dus geïmplimenteer op die meer bruikbare weergawes Python 2.6.x en 2.7.x

Filosofie van Python
--------------------

Die kernfilosofie van Python word opgesom in die artikel *The Zen of Python(PEP 20)* wat die volgende aforismes insluit:

* Beeldskoon is beter as lelik
* Eksplisiet is beter as implisiet
* Eenvoudig is beter as kompleks
* Kompleks is beter as ingewikkeld
* Leesbaarheid is belangrik

Python is ontwerp om hoogs uitbreibaar te wees, eerder as om die meerderheid gewenste funskionaliteit direk in die taal in te bou. Van Rossum se plan was juis om 'n programmeertaal met 'n klein kern van sleutelwoorde te ontwikkel wat ondersteun word deur 'n groot standaardbiblioteek en maklik uitbreibaar is. Hy het gevoel dit was deel van die probleme van ABC , wat die teenoorgestelde ontwerpstyl gevolg het.

Die sogenaamde Python metodiek van programmering verwerp uitbundige sintaks (soos gebruik deur die Perl taal) ten gunste van yler , minder deurmekaar stellings. In die woorde van Alex Martelli: "Om iets te beskryf as slim word *nie* geneem as 'n kompliment in die Python kultuur *nie.*"Verder verwerp Python filosofie die "meer as een manier om dit te doen" benadering wat Perl gebruik ten gunste van 'n "daar behoort een – en verkieslik net een – voor die hand liggende manier te wees om dit te doen" benadering.

Een van Python se doelwitte is dat gebruiker dit moet geniet om Python te gebruik. Voorbeelde en leermateriaal sal gereeld na *spam* en *eggs* verwys eerder as na die meer tradisionele *foo* en *bar.*

Die Pythongemeenskap het hul eie styl van programmering, wat hulle beskou as 'n minimalistiese en hoogsleesbare taal. Goeie Python kode is maklik om te verstaan en pas goed in met die taal self. Dit staan teenoor taal wat moeilik is om te verstaan of voel asof dit oorvertaal is van 'n ander programmeringstaal.

Sintaks
-------

Python is bedoel om 'n hoogsleesbare taal te wees en is baie na aan natuurlike taal. Dit maak minimale gebruik van leestekens en verkies om meer sleutelwoorde te gebruik. Python het ook minder sintaktiese uitsonderings en spesiale gevalle as 'n taal soos C (programmeertaal). Python volg die *Principle of Least Astonishment* wat impliseer dat kode behoort te doen wat jy van 'n natuurlike taal sou verwag.

### Inkeping

Python maak gebruik van inkeping (horisontale spasiëring) eerder as sleutelwoorde of krulhakies om die einde van blokke stellings aan te dui (byvoorbeeld die inhoud van 'n lus sal alles dieselfde hoeveelheid inkeping hê). Na sekere stellings moet daar verder ingekeep word (byvoorbeeld na 'n if-stelling). Die inkeping moet verminder word na die einde van die huidige blokkode. Die ingekeepte kode na 'n stelling word na verwys as daardie stelling se blok, byvoorbeeld na `if x > 5: print "Hello"` , sal `print "Hello"`die if-blok wees.

### Stellings en beheer van programvloei

Python maak onder andere van die volgende stellings gebruik:

* Die `if`-stelling sal voorwaardelik 'n blokkode uitvoer, wat gebruik kan word saam met die `else` en `elif` stellings om meer ingewikkelde voorwaardes te skep
* Die `for`-stelling, wat iterasie oor sekere objekte toelaat. Dit sal dan elke element in die object aan 'n veranderlike heg vir gebruik in die herhaalde kode.
* Die `while`-stelling sal 'n blok kode uitvoer solank as wat sy voorwaarde as waar evalueer
* Die `try`-stelling laat mens toe om sagtewareuitsonderings te verhoed en dan met afsonderlike kode na die `except`-stelling te hanteer. Dit verseker ook dat alle kode in die `finally`-blok altyd sal hardloop ongeag hoe die blok verlaat word.
* Die `class`-stelling, wat 'n blok kode uitvoer en dan die gedefinieerde name heg daaraan. Hierdie word gebruik vir objekgeoriënteerde programmering.
* Die `def`-stelling definieer 'n funksie of metode
* Die `with` -stelling wat 'n sekere blok kode omsluit binne 'n sekere konteks (byvoorbeeld, dit kan kode bestuur tot 'n sekere leêr ingelees is en toegemaak is).
* Die `pass`-stelling wat gebruik word wanneer die program niks moet doen nie. Dit word benodig om leë blokke kode te skep.
* Die `assert`-stelling, wat gebruik word tydens ontfouting om te kyk vir sekere kondisies wat geldig moet wees
* Die `yield`-stelling wat 'n waarde teruggee vanaf 'n *generator* funksie.
* Die `import`-stelling, wat gebruik kan word om modules beskikbaar te maak in die huidige lêer
* Die `print`-stelling word gebruik om afvoer te lewer. Verander na die `print()`-funksie in Python 3.

### Uitdrukkings

Python gebruik uitdrukkings wat ooreenstem met soortgelyke tale soos C en Java, terwyl dit ook unieke uitdrukkings het.

* Optelling, aftrekking en vermenigvuldiging bly die selfde, maar deling se gedrag verskil(verwys na die Wiskunde afdeling). Python het ook die `**` operator om getalle tot 'n gewenste mag te verhef.
* Vanaf Python 3.5 word matriksvermenigvuldiging met die `@` operator ondersteun, teenoor C en Java wat dit as biblioteekfunksies bied. Vroeër weergawes van Python het ook metodes eerder as 'n operator gebruik.
* In Python sal `==` altyd die waardes van twee objekte vergelyk, terwyl in Java dit nommers se waarde vergelyk en objekte se verwysings vergelyk. Waarde vergelykings kan in Java op objekte uitgevoer word met die `equals()` metode terwyl Python gebruik maak van die `is` operator om objekte se verwysings te vergelyk.
* Python gebruik `and`, `or`, `not` vir boolse uitdrukkings eerder as die meer algemene `&&`, `||`, `!` wat in C en Java gebruik word.

### Wiskunde

Python het die standaard C wiskundige operators (`+`, `-`, `*`, `/`, `%`). Dit het ook die `**` operator om getalle tot 'n sekere mag te verhef , soos byvoorbeeld `5**3 == 125` en `9**0.5 == 3.0` , asook 'n matriks vermenigvuldiging operator `@` wat bygevoeg was in weergawe 3.5.

Hoe Python deling uitvoer het merkwaardig verander oor nuwe weergawes:

* Python 2.1 en vroeër weergawes gebruik C se deelmetodiek. Die `/` operator sal heelgetaldeling toepas as beide getalle heelgetalle is , en sal 'n float as antwoord gee andersins. Byvoorbeeld `7 / 3 == 2` maar `7.0 / 3.0 == 2.3333...`. Wanneer 'n heelgetal deur 'n ander een gedeel word, sal die antwoord af of opgerond word na nul toe, soos in die volgende voorbeelde: `7 / 3 == 2` en `-7 / 3 == -2` .
* Python 2.2 het heelgetaldeling verander of af te rond na die limiet van negatiewe oneindig m.a.w: `7 / 3 == 2` en `-7 / 3 == -3`. Daar was ook 'n laerafronding operator `//` bekendgestel. Enige program kan `__future__ import division` gebruik om Python 3.0 se reëls vir deling toe te gebruik in daardie program.
* Python 3.0 het `/` verander om altyd 'n float as antwoord te gee. Met betrekking tot Python , vir alle weergawes voor 3.0 is `/` *klassiekedeling* , in weergawe is `/` *regtedeling* en is `//` *vloerdeling.*

Python se metodiek om af te rond na negatief oneindigwyk af van die algemene metodiek gebruik deur meeste tale, maar stem better oor een met die werking van Python. Byoorbeeld, dit beteken dat die vergelyking `(a+b) // b == a // b + 1` altyd waar is. Dit beteken ook dat die vergelyking `b * (a // b) + a % b == a` geldig is vir beide positiewe en negatiewe oneindig. Om hierdie vergelyking geldig te hou beteken dit dat die resultaat van `a % b` in die half oop interval [0 , b) sal wees as b 'n positiewe heelgetal is en in die interval (b , 0] lê indien b negatief is.

Python bied die `round` funksie om 'n float af te rond na die naaste heelgetal. Wanneer die getal persies tussen twee heelgetalle is, sal weergawes voor 3 wegrond van nul as: `round(0.5)` is 1.0, `round(-0.5)` is −1.0. Python 3 rond af na die naaste ewegetal: `round(1.5)` is 2, `round(2.5)` is 2.

Python laat boolse uitdrukkings tot met meervoudige verhoudings in 'n manier wat soortgelyk is as die algemene gebruik in wiskunde. Byvoorbeeld, die uitdrukking `a < b < c` toets eers of `a` kleiner is as `b` en daarna of `b` kleiner is `c`. Tale wat vanaf C afgelei is sal die uitdrukking ander evalueer: in C sal `a < b` eers ge-evalueer word wat sal resulteer in 0 (onwaar) of 1(waar) en daardie resultaat sal dan vergelyk word met `c`.

Python het uitgebreide ingeboude ondersteuning om jou wiskunde aan te pas tot 'n arbitrêre hoeveelheid desimale plekke. Integers word omgeskakel vanaf die gewone vaste hoeveelheid desimale plekke integers( gewoonlik 32 or 64 bisse) na 'n aribitrêre hoeveelheid plekke, wat ooreenstem met die Python tipe `long` soos nodig. Hierdie getale word met 'n "L" geonderskei wanneer hulle as teks afgevoer word. Daar is ook 'n `Decimal` klas wat die gebruiker toelaat om arbitrêre hoeveelhede desimale plekke te gebruik saam met 'n verskeidenheid afrond metodes. Die `Fraction` tipe in die `fractions` module skep arbitrêre grotes vir rasionele getalle.

Weens Python se uitgebreide wiskundigebiblioteek word dit gereeld gebruik vir wetenskaplike doeleindes om te help met probleme soos data verwerking en manipuleering.

Biblioteke
----------

Python het 'n groot standaardbiblioteek, wat gereeld aangewys word as een van Python se sterk punte. Hierdie biblioteek bied funksies wat help met 'n verskeidenheid rekenaarprobleme. Hierdie groot biblioteek is deel van die Python-filosofie wat die gebruiker soveel as moontlik van die nodige hulp bied. Vir internetgebaseerde toepassings, word baie van die standaard formatte en protokolle (soos MIME en HTTP) geöndersteun. Daar word modules ingesluit om visuele gebruikerintervlakke te skep, sowel as databasisse, pseudolukrake getal kiessing, wiskunde met 'n arbitrêre hoeveelheid desimale plekke, manipuleering van standaarduitdrukkings en eenheidstoetsing.

Dele van die standaardbiblioteek word volgens spesifieke spesifikasies opgestel, byvoorbeeld die implementering van die Web Server Gateway Interface (WSGI), bekend as `wsgiref`, word beskryf deur PEP 333. maar meeste modules is nie so opgestel nie. Hulle word dan gespesifiseer volgens hul kode, interne dokumentasie en toetsprogramme (indien ingesluit).

Die standaardbilbioteek is nie nodig om Python te hardloop nie. Byvoorbeeld Blender 2.48 los meeste daarvan uit.

Sedert Januarie 2016, bied die Python Pakket Indeks (die amptelike bewaarplek vir derde-party Python sagteware) meer as 72000 pakkette wat 'n verskeidenheid funksionaliteit bied, insluitend:

* toetsraamwerke, gereedskap vir dokumentering, stelselbeheer , metodes om data van webbladsye te verkry
* visuele gebruikersintervlakke, databasisse, netwerkvermoëns en kommuniekasietegnieke.
* wetenskaplike bewerkings , teksverwerking en beeldverwerking

Naam
----

Python se naam is afgelei vanaf die televisiereeks Monty Python's Flying Circus, en daar is gereeld Monty Python verwysings in voorbeeldkode.

Die voorvoegsel *Py* word gebruik om te wys dat iets verwant is aan Python. Voorbeelde van die gebruik van hierdie voorvoegsel in die name van Python toepassings sluit in *PyGame* (wat soos die naam voorstel gebruik word om speeltjies te skep) , *PyS60* wat werk as 'n implementering van die *Symbian S60* bedryfstelsel , *PyQt* en *PyGTK* wat QT en GTK bind aan Python en *PyPy* 'n implementering van Python wat geskryf is in Python.