Python (ohjelmointikieli)
Python on monipuolinen, tulkattava ohjelmointikieli. Pythonia pidetään helppona oppia sen yksinkertaisen syntaksin ja korkean tason tietorakenteiden takia. Monet suosittelevat sitä ensimmäiseksi ohjelmointikieleksi. Pythonia on usein verrattu sellaisiin kieliin kuin Perl, Java, Ruby, TCL, Scheme ja PHP.
Pythonia voi käyttää komentoriviltä ajettavissa skripteissä, joilla voidaan esimerkiksi käsitellä alfanumeerista dataa. Pythonia voi käyttää myös vaativassa ja tieteellisessä laskennassa (kirjastot NumPy ja SciPy). Pythonia käyttäen voi tuottaa kuvaajia (kirjasto matplotlib) sekä vuorovaikuttaa matlabin kanssa. Pythonille on saatavilla rajapintoja tietokantojen (MySQL, PostgreSQL, SQLite) käsittelyyn. Python on yleistynyt viime vuosien aikana verkkosivustojen ohjelmointikielenä ja Python-kielelle on saatavilla sekä minimaalisia että kehittyneitä kehitysympäristöjä (esim. Django). Pythonia voidaan ajaa palvelimella WSGI (Web Server Gateway Interface) -rajapinnan avulla, joka on viime aikoina kehitetty Pythonilla toteutettujen verkkosivustojen suorituskykyistä ajoa varten. Pythonia voi laajentaa C- ja C++-ohjelmointikielillä.[1] Toisaalta Pythonia voi sisällyttää C- ja C++-kielisiin ohjelmiin skriptikielenä. Pythonilla voi tehdä graafisia käyttöliittymiä mm. käyttämällä C++-kielellä kirjoitettua Qt-käyttöliittymäkirjastoa.[2]
Python on tulkattava kieli, jolla kirjoitetut ohjelmat ovat valmiita ajettaviksi välittömästi, kääntämättä niitä ensin. Tällä tavalla ohjelmoimisen ja testaamisen voi tehdä lyhyissä sykleissä ja nopeasti. Tulkattavuus kuitenkin tarkoittaa, että Python ei ole yhtä suorituskykyinen kuin käännettävillä kielillä kirjoitetut ohjelmat. Pythoniin sisältyy suuri joukko erilaisia kirjastoja ja Pythoniin voi myös liittää muiden tekemiä avoimen lähdekoodin kirjastoja, ja tällä tavalla kehitystyö Pythonia käyttäen voi olla nopeaa. Pythonista on sanottu, että sitä käyttäen ohjelmoija voi olla 10 kertaa tuottavampi kuin Javaa käyttäen ja 100 kertaa tuottavampi kuin C-kieltä käyttäen.[3]
Yksi merkittävimmistä Pythonilla tehdyistä ohjelmistoista on avoimen lähdekoodin yritysohjelmisto Odoo.[4]
Ensimmäinen versio Python-kielestä syntyi 1980-luvun loppupuolella. Alun perin kieli tehtiin jatkoksi ABC-ohjelmointikielelle[5] korjaamalla siinä havaittuja puutteita ja tuomalla sen piirteisiin mm. poikkeusten käsittelyn[6]. Kielen kehittäjä ja isä, Guido van Rossum, on pysynyt kielen kehityksessä koko sen historian ajan keskeisessä roolissa.
Python on alun perin nimetty brittiläisen komediaryhmä Monty Pythonin tunnetun Monty Pythonin lentävä sirkus -televisiosarjan mukaan. Python-nimi koettiin lisäksi tarpeeksi lyhyeksi, yksilöiväksi sekä sopivan mysteeriseksi. Kielen dokumentaation koodiesimerkeissäkin pyritään välttämään liiallista vakavuutta satunnaisilla viittauksilla ryhmän tuotantoon.[7].
Alkuperäisestä Python-kielestä jalostettu Python 2.0 julkaistiin 16. lokakuuta 2000. Kielen toinen täysversio sisälsi useita uusia ominaisuuksia, mukaan lukien täydellisen roskienkeruumekanismin ja Unicode-tuen. Suurin muutos tapahtui kuitenkin itse kielen kehitysprosessissa, jossa Python-yhteisölle annettiin vapaammat kädet osallistua mukaan kielen kehitykseen [8].
Kielestä ilmestyi joulukuussa 2008 uusi versio 3.0, joka toi mukanaan paljon uudistuksia. Näistä johtuen se on epäyhteensopiva versioiden 2.x ja vanhempien kanssa. Vanhoille versioille kirjoitetut ohjelmat eivät toimi suoraan versiossa 3.0. Siirtymän helpottamiseksi on toteutettu käännösohjelma (2to3), joka kääntää automaattisesti osan koodista kielen uudempaan versioon. Lisäksi useita kolmosversion keskeisiä ominaisuuksia on toteutettu rinnakkain kehitettyyn 2.6 versioon, mikä mahdollistaa niiden hyödyntämisen ilman uudempaan syntaksiin siirtymistä.[9]
Python-kieli tukee useita ohjelmointiparadigmoja; erityisesti sitä voi käyttää oliopohjaisena, proseduraalisena tai funktionaalisena ohjelmointikielenä. Yleisesti ottaen luonteenomaista Pythonille on pyrkimys selkeään ja luettavaan ohjelmakoodiin. Kauneuden ja yksinkertaisuuden tavoitteleminen ovat keskeinen osa kielen suunnittelufilosofiaa[10].
Tyyppijärjestelmältään Python on dynaamisesti tyypittävä ohjelmointikieli. Toisin kuin esimerkiksi C-kielestä tutussa staattisessa tyypityksessä, muuttujan tyyppiä ei tarvitse erikseen esitellä, vaan se määräytyy siihen tallennettavan objektin tyypin perusteella. Tästä seuraa se, että Python-kääntäjät eivät tee tyyppitarkistuksia käännösaikaisesti, vaan virheet aiheuttavat pääsääntöisesti ajonaikaisia poikkeuksia.
Dynaamista tyypitystä käytetään Python-ohjelmoinnissa usein hyväksi tekemällä ns. "ankkatyypitystä". Ankkatyypityksessä () objektin, esimerkiksi muuttujan, tyyppi määritetään ajonaikaisen tarkastelun perusteella sen kutsuvaiheessa. Tyyppivirheen sattuessa syntyy poikkeus, joka voidaan ottaa vastaan ja käsitellä. Näin ankkatyypityksellä voidaan toteuttaa olio-ohjelmoinnissa usein periyttämällä toteutettava polymorfinen korvaus ilman eksplisiittistä riippuvuutta valittuun tyyppiobjektiin.[11]
Pythonia voi kokeilla helposti interaktiivisen tulkin avulla:
Määritellään funktio ja kutsutaan sitä:
Pythonissa itsessään ei ole mahdollisuutta ladata kuvia tai muuta mediaa, mutta tämä onnistuu esimerkiksi Pygame-moduulin avulla.
Python-kielestä on tehty useita toteutuksia. Tunnetuimmat ovat C-ohjelmointikielellä tehty alkuperäinen (kielen määrittelevä) toteutus ja Java-ohjelmointikielellä tehty Jython. Muita toteutuksia ovat esimerkiksi IronPython .NET- ja Mono-alustoille sekä Python-kielellä itsellään uudelleentoteutettu PyPy. Mobiilialustoista Python on sovitettu myös Symbian S60 -alustalle [12] - lisäksi kielestä on kehitetty Maemo-alustaan optimoitu versio [13]. Sulautettujen järjestelmien ohjelmointiin on myös MicroPython.
Python-tulkki ja -kirjastot on kehitetty avoimen lähdekoodin projektina, ja niitä levitetään Pythonin oman lisenssin (Python Software Foundation License) alaisena, joka on yhteensopiva myös GPL-lisenssin kanssa. Pythonin lisenssi sallii lisäksi kaikenlaisen kaupallisen käytön ja jopa kaupallisen uudelleenlevittämisen.
Python-koodin tulkitseminen ja ajoa edeltävä optimointi saattavat joskus olla hitaita prosesseja, ja Pythonia ajetaankin useimmiten tavukoodina hieman Javan tapaan. Tämä vie ohjelman suorituksesta pois yhden hitaammista vaiheista, tulkkaamisen tavukoodiksi; tulkkaamattoman Python-skriptin ajaminen saattaa olla moninkertaisesti tavallisen C-kielisen ohjelman ajamista hitaampaa. Toisaalta suurimmat eroavuudet suorituskyvyssä liittyvät käytettyihin tietorakenteisiin ja algoritmeihin, joten Python-kielinen toteutus ei ole automaattisesti hitaampi. Lisäksi Pythoniin voi tehdä helpohkosti C-kielisiä laajennoksia, jos erityinen nopeus on tarpeen.
Joulukuussa 2008 ilmestynyt Pythonin versio 3.0 toi kieleen jonkin verran uudistuksia. Periaatteena sen kehityksessä oli vähentää ominaisuuksien rinnakkaisia toteutustapoja poistamalla vanhoja tapoja tehdä asiat. Tästä seuraa, ettei kielen uusin versio ole taaksepäin yhteensopiva, eivätkä 2-versioiden mukaiset ohjelmat siis välttämättä toimi sellaisenaan.
Muutoksia ovat muun muassa:[14]
print-avainsanan korvaaminen print()-funktiolla raw_input-funktion korvaaminen yksinkertaisempaan input-funktioon with-lause [15] Jako-operaattorin / toiminnan muuttaminen niin, että int/int palauttaa float-tyyppisen luvun. Vanhaa jakolaskuoperaattoria voidaan vielä käyttää kirjoittamalla //
Version 3 ja sen tuomien muutosten käyttöönottoa on pyritty tukemaan monella tavalla. Versiolla 2.5 voi ottaa jo käyttöön joitain uudistuksia komennolla from __future__ import *. Samoin versiolla 2.6 voidaan ottaa käyttöön kaikki version 3.0 tuomat uudistukset. Lisäksi Python 2.6:lla voidaan aktivoida varoitukset vanhanmallisen koodin käytöstä. Tämä helpottaa vanhanmallisen lähdekoodin muuttamista versiolle 3.0 sopivaksi. Lisäksi saatavilla on 2to3 käännöstyökalu, joka kääntää valtaosan 2-sarjan koodista 3-versioon.
Nvidian grafiikkapiirien CUDA-ohjelmointi on mahdollista Pythonilla. Tällä tavalla laskenta voidaan antaa grafiikkapiirin rinnakkain suoritettavaksi.[16]
Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{en icon}} instead.
* Luokka:Seulonnan keskeiset artikkelit