Python (ohjelmointikieli)
|
|
|
|---|---|
| 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.
Sisällysluettelo |
Historia [muokkaa]
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]
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]
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]
Pythonissa itsessään ei ole mahdollisuutta ladata kuvia tai muuta mediaa, mutta tämä onnistuu esimerkiksi Pygame-moduulin avulla.
Toteutukset [muokkaa]
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]
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 korvaaminenprint()-funktiollawith-lause [11]- Jako-operaattorin
/toiminnan muuttaminen niin, ettäint/intpalauttaafloat-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]
- ↑ http://mail.python.org/pipermail/python-dev/2000-August/008881.html
- ↑ http://www.python.org/doc/faq/general/#why-was-python-created-in-the-first-place
- ↑ http://www.python.org/doc/faq/general/#why-is-it-called-python
- ↑ http://www.amk.ca/python/2.0/
- ↑ http://www.python.org/dev/peps/pep-3000/
- ↑ http://www.python.org/dev/peps/pep-0020
- ↑ http://docs.python.org/glossary.html#term-duck-typing
- ↑ http://opensource.nokia.com/projects/pythonfors60/
- ↑ http://pymaemo.garage.maemo.org/
- ↑ http://docs.python.org/3.0/whatsnew/3.0.html
- ↑ http://www.python.org/dev/peps/pep-0343/
Aiheesta muualla [muokkaa]
- Python-kielen kotisivu (englanniksi)
- Suomenkielinen Python-opas (122ss.)
- Oppaan uudempi painos (122ss.)
- Suomenkielinen Python-grafiikkaohjelmointiopas (92ss.)
- Suomenkielinen Python-opas graafisten käyttöliittymien toteuttamisesta (50ss.)
- Ohjelmointiputka: Python-opas
- Mureakuha: Python-opas
- Python 3 ohjelmointiopas
| Tuotantokäytössä |
Ada • APL • AWK • Assembly • C • C++ • C# • COBOL • Delphi • Eiffel • Fortran • Java • JavaScript • Lua • Lisp • Objective-C • Pascal • Perl • PHP • PostScript • Python • Ruby • Smalltalk • TCL • Visual Basic |
|---|---|
| Akateemiset | |
| Historialliset |
ALGOL • BASIC • Modula-3 • MUMPS • Plankalkül • PL/I • Simula |
Sivulta puuttuu