Python (programmeertaal)

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.

Verwysings 

Programmeertale