Python (ohjelmointikieli)

Wikipedia
Loikkaa: valikkoon, hakuun
Tämä artikkeli käsittelee ohjelmointikieltä. Muita merkityksiä on täsmennyssivulla.
Python (ohjelmointikieli)
Python logo and wordmark.svg
Paradigma olio, proseduraalinen, funktionaalinen
Tyypitys vahva, dynaaminen
Yleinen suoritusmalli tulkattava
Muistinhallinta roskienkeruu
Julkaistu 1990
Kehittäjä Guido van Rossum
Vakaa versio 2.7.1, 3.1.3 (27. marraskuuta 2010 (2.7.1 ja 3.1.3))
Kehitysversio 3.2 beta 1
Merkittävimmät toteutukset CPython, Jython, IronPython, PyPy
Vaikutteet ABC, C, Haskell, Modula-3, Icon, Lisp, Perl, Smalltalk, Tcl
Vaikuttanut Ruby, Boo
Käyttöjärjestelmä alustariippumaton
Verkkosivu http://www.python.org
Uutisryhmä comp.lang.python

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.

Historia[muokkaa | muokkaa wikitekstiä]

Ensimmäinen versio Python-kielestä syntyi 1980-luvun loppupuolella. Alun perin kieli tehtiin jatkoksi ABC-ohjelmointikielelle[1] korjaamalla siinä havaittuja puutteita ja tuomalla sen piirteisiin mm. poikkeusten käsittelyn[2]. 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.[3].

Alkuperäisen 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 [4].

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ä.[5]

Kielen keskeiset piirteet[muokkaa | muokkaa wikitekstiä]

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[6].

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ä (engl. duck typing) 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.[7]

Esimerkkejä[muokkaa | muokkaa wikitekstiä]

Pythonia voi kokeilla helposti interaktiivisen tulkin avulla:

>>> print("Hello, world!")
Hello, world!
>>> 2*42 
84

Määritellään funktio ja kutsutaan sitä:

>>> def tuntipalkka(palkka, aika):
>>>     return palkka / aika
>>>
>>> tuntipalkka(210, 8)
26.25

Grafiikka[muokkaa | muokkaa wikitekstiä]

Pythonissa itsessään ei ole mahdollisuutta ladata kuvia tai muuta mediaa, mutta tämä onnistuu esimerkiksi Pygame-moduulin avulla.

Toteutukset[muokkaa | muokkaa wikitekstiä]

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 portattu myös Symbian S60 -alustalle [8] - lisäksi kielestä on kehitetty Maemo-alustaan optimoitu versio [9].

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.

Version 3.0 uudistukset[muokkaa | muokkaa wikitekstiä]

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:[10]

  • print-avainsanan korvaaminen print()-funktiolla
  • with-lause [11]
  • 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.

Lähteet[muokkaa | muokkaa wikitekstiä]

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]