Python (programlingvo)

El Vikipedio, la libera enciklopedio
Python
Logobildo de Python
Logobildo de Python
objektema programlingvo • dinamika programlingvo • funkcia programlingvo • manuskripta programlingvo • multparadigma programlingvo • ordonema programlingvo • interpretata programlingvoaltnivela programlingvoprogramlingvo • rultempa sistemo • off-side rule language • strikta programlingvo
Paradigmo: Objektema, funkcia, imperativa
Paradigmo(j): funkcia programado • objektema programado • dinamika programado • ordonema programado • multparadigma programado
Aperis en: 1991
Aŭtoro(j): Guido van Rossum
Tipa sistemo: dinamika, forta
Ĉefaj realigoj: CPython, IronPython, Jython, Python for S60, PyPy
Programlingva(j) dialekto(j): Cython, RPython, Stackless Python
Kreita sub la influo de: ABC, ALGOL 68, C, C++, Haskell, Icon, Java, LISP, Modula-3, Perl
Havas influon sur: Boo, Cobra, D, Falcon, Groovy, JavaScript, Ruby
Permesilo(j): angle Python Software Foundation License
Retejo: angle python.org
vdr

Python, foje Esperantigite Pitono, estas interpreta, interaktiva programlingvo, ofte uzata kaj kreita de Guido Van Rossum kaj distribuata sub libera permesilo. Ĝi estas nomita laŭ la brita televidserio Monty Python's Flying Circus. Ĝi estas ofte komparata al Tcl, Perl, SchemeJava, kaj lastatempe al Ruby.

Jen simpla ekzemplo de Pitona programo:

# Ekscii pri la primeco de nombro
import math

line = raw_input('Enmetu nombron por provi:')

y = int(line)
x = int(math.sqrt(y))
while x > 1:
    if y % x == 0:
        print '%s ne estas prima (ĝi divideblas de %s)' % (y, x)
        break
    x -= 1
else:
    print '%s estas prima' % y

Filozofio[redakti | redakti fonton]

Pitono estas multaparadigma lingvo, kiel C++ kaj malkiel Smalltalk. Ĉi tio signifas ke, anstataŭ devigi programistojn adopti unu specifan stilon de programado, ĝi permesas kelkajn. Estas subtenataj objektema kaj strukturema programado, kaj ankaŭ funkcia programado. Ĝi estas dinamike datentipo-regata kaj uzas senrubigon por prizorgi memoron kaj evitas referencan sintakson.

Kvankam popularigita kvazaŭ kontrasto de Perl, Pitono havas multajn similaĵojn al tiu lingvo. Tamen, la prilaborantoj de Pitono kontraŭstaras la flekseblegan sintakson de Perl kaj favoras pli konserveman (kaj, laŭ ili, pli legeblan) sintakson. Kvankam (same kiel Perl) Pitono estas foje klasigata kiel skripta lingvo, ĝi jam estis uzata por krei multajn grandajn projektojn, ekzemple: aplika servo Zope kaj sistemo de dosiera distribuo Mojo Nation.

Datumaj tipoj kaj strukturoj[redakti | redakti fonton]

Pitono havas vastan rangon de bazaj datumaj tipoj. Kune kun normalaj entjera kaj frakcia matematiko, ĝi senĝene subtenas aritmetikon de grandaj nombroj kaj kompleksaj nombroj.

Ĝi subtenas la kutiman aron de operacioj sur ĉenoj, sed havas unu escepton: ĉenoj en Pitono estas neŝangeblaj objektoj, do iu ĉena operacio kiu alilingve ŝanĝus string-objekton (ekzemple, anstataŭigo de literoj) en Pitono simple redonos novan ĉenon (same kiel en Java).

Datumtipa sistemo[redakti | redakti fonton]

En Pitono valoroj, ne variaĵoj, portas datumtipon -- tio signifas, ke Pitono estas lingvo dinamika pri tipoj, kiel Lisp kaj malkiel Java.

Inter tipodinamikaj lingvoj, Pitono estas mezgrade tip-regata. Ĝi estas nek tiel malstrikta kiel Perl, nek tiel strikta kiel Caml. Implicita konvertado estas difinita por nombraj datumtipoj, tiel ke oni povas valide multobligi kompleksan nombron per longa entjera nombro (ekzemple) sen eksplika datumtipigo. Tamen, malkiel en Perl, estas neniu implicita konvertado inter, ekzemple, nombroj kaj ĉenoj; nombro estas nevalida argumento al operacio sur ĉeno.

Kunmetaj datumtipoj[redakti | redakti fonton]

Pitono ankaŭ havas kelkajn kunmetajn datumtipojn, i.a. listojn, opojn kaj vortarojn. Listoj, opoj kaj ĉenoj estas sinsekvaĵoj kaj havas inter si multajn samajn metodojn: oni povas iteracii tra la literoj de ĉeno same facile kiel tra la eroj de listo. Listoj estas pludaŭrigeblaj tabeloj, sed opoj estas de fiksita longeco kaj neŝanĝeblaj.

La celo de ĉi tiom da neŝangebleco temas pri vortaroj, datumtipo konata aliloke kiel hakettabelojasociaj tabeloj. Por prezervi koherecon sub referenca paso, la ŝlosiloj de vortaro devas esti de neŝangebla datumtipo. Vortaraj valoroj, aliflanke, povas esti de iu ajn datumtipo.

Objekta sistemo[redakti | redakti fonton]

La datumtipa sistemo de Pitono estas bone integrigita kun la klasa sistemo. Kvankam la bazaj datumtipoj ne estas precize klasoj, klaso povas heredi de datumtipo. Tial eblas pludaŭrigi ĉenojn kaj vortarojn ... kaj eĉ entjerajn nombrojn, se oni volas. Pitono ankaŭ subtenas multoblan heredon.

La lingvo subtenas vastan introspekton de datumtipoj kaj klasoj. Datumtipoj povas esti legataj kaj komparataj -- ja, ĉar kiel Smalltalk, datumtipoj estas mem datumtipo. La atribuaĵoj de objekto povas esti elprenitaj kiel vortaro.

Sintakso[redakti | redakti fonton]

Pitono estis formita por esti tre legebla. Ĝi havas simplan vidan aranĝon, uzas anglalingvajn vortojn ofte kie aliaj lingvoj uzas punkciumon, kaj havas rimarkinde malpli da sintaksaj konstruoj ol multaj strukturaj lingvoj, ekz. C, PerlPascal.

Ekzemple, Pitono havas nur du strukturajn iteraciajn formojn -- "for", kiu iteracias erojn de listo aŭ iteracianto (kiel "foreach" en Perl); kaj "while", kiu iteracias tiel longe kiel veras Bulea esprimo. Tial mankas al ĝi C-stila kompleksa "for," "do...while", kaj la "until" de Perl, kvankam kompreneble oni povas esprimi egalajn aferojn. Same, ĝi havas nur "if...elif...else" por branĉigo, neniun "switch" aŭ etikeditan "goto".

"La Blankspaca Afero"[redakti | redakti fonton]

Unu nekutima eco de la sintakso de Pitono estas la metodo uzata por limigi programajn blokojn. Foje nomata "la blankspaca afero", ĝi estas unu eco de Piton-sintakso, pri kiu multaj programistoj neniam Piton-programintaj jam aŭdis, ĉar ĝi estas unika inter nunaj disvastigitaj lingvoj.

En lingvoj, kiuj uzas la blokan strukturon fine hereditajn de Algol, i.a. Pascal, C, kaj Perl -- blokoj da kodo estas limigitaj per vinkuloj aŭ ŝlosilvortoj. (C kaj Perl uzas { }; Pascal uzas "begin" kaj "end".) En ĉiuj ĉi lingvoj, tamen, programistoj foje krommarĝenas la kodon ene de bloko, por vide disigi ĝin de la ĉirkaŭa kodo.

Pitono anstataŭprenas propraĵon de la malpli konata lingvo Occam -- anstataŭ de punkciumo aŭ ŝlosilvortoj, ĝi uzas krommarĝenon mem por indiki la daŭron de bloko. Mallonga ekzemplo klarigos ĉi tion. Jen estas C- kaj Piton-funkcioj, kiuj faras la saman aferon -- komputas la faktorialon de entjera nombro.

C:

int factorial(int x) {
    if (x == 0) {
        return(1);
    } else {
        return(x * factorial(x-1));
    }
}

Python:

def factorial(x):
    if x == 0:
        return 1
    else:
        return x * factorial(x - 1)

Iuj programistoj alkutimiĝintaj al Algol-stilaj lingvoj, en kiuj blankspaco estas semantike malplena, komence pensas, ke ĉi tio estas konfuza. Iuj jam faris nekomplimentajn komparojn al la laŭkolona stilo uzata ĉe truokartaj Fortran-sistemoj: iam, estas grandega progreso havi "liberformajn" lingvojn, en kiu nur simboloj gravis kaj ne ties pozicio sur la linio.

Tamen al Piton-programistoj "la blankspaca afero" estas simple ellaboraĵo de normalaĵo, kiun programistoj per Algol-stilaj lingvoj ĉiukaze jam sekvas.

Funkcia programado[redakti | redakti fonton]

Kiel ĉi-supre menciite, alia forto de Pitono estas la havebleco de funkciaj sintaksaj eroj. Kiel oni povas antaŭvidi, ĉi tiuj ege faciligas labori je listoj kaj aliaj kunmetaĵoj. Unu tia konstruo estas la lista komprenumo, enkondukita de la funkcia lingvo Haskell, kiel vidata jene kalkulante la unuajn kvin eksponentumojn de du:

 nombroj = [1, 2, 3, 4, 5]
 eksponentumoj_de_du = [ 2 ** n for n in nombroj ]

Pro tio, ke Pitono permesas, ke funkcioj estu argumentoj, ankaŭ eblas esprimi eĉ pli subtilajn funkciajn konstruojn, ekz. la pludaŭrigon.

La ŝlosilvorto "lambda" de Pitono eble misdirektus iujn fanatikulojn de funkcia programado. Lambdo-blokoj en Pitono rajtas enhavi nur esprimojn, ne asertojn. Tial, ili ne estas la plej ĝenerala maniero, per kiu reliveri ĉe funkcio. Anstataŭe la kutima afero por fari estas simple difini kaj reliveri ĉe funkcio uzante lokregionan nomon, kiel en la jena ekzemploj de simpla sekca funkcio:

def add_and_print_maker(x):

    def temp(y):
        print "%d + %d = %d" % (x, y, x + y)

    return temp

Traktado de esceptoj[redakti | redakti fonton]

Pitono subtenas (kaj vaste uzas) traktadon de esceptoj por provi pri eraraj kondiĉoj. Fakte, eĉ eblas kapti la escepton kaŭzitan de sintaksa eraro.

Esceptoj permesas pli koncizan kaj dependeblan traktadon de eraroj ol multaj aliaj manieroj de raporti erarajn aŭ esceptajn okazojn. Esceptoj estas fadensekuraj; ili ne havas la emon malordigi kodon tiel, kiel provado por reliveritaj eraro-kodoj en C; kaj ili povas facile leviĝi tra la voka stako, kiam eraro estas raportenda al pli alta nivelo de la programo.

La stilo de Pitono postulas uzi esceptojn, kiam ajn povas aperi erara kondiĉo. Ja, anstataŭ provi aliron al dosiero aŭ resurso antaŭ uzi ĝin, estas kutime en Pitono simple provi uzi ĝin -- kaptante la escepton se aliro ne estas permesata.

Norma biblioteko[redakti | redakti fonton]

Pitono havas grandan norman bibliotekon (angle: Standard library), kiu igas ĝin taŭga por multaj taskoj. Povas esti aldonitaj al la moduloj de la norma biblioteko specialaj moduloj kreitaj en C aŭ Pitono. La norma biblioteko estas aparte tre taŭga por krei interretajn aplikojn, kaj subtenas grandan kvanton da normaj aranĝoj kaj protokoloj (ekz. MIME kaj HTTP). Moduloj por krei bildajn uzantinterfacojn, konekti al rilatumaj datumbazoj, kaj manipuli regulesprimojn estas ankaŭ parto de la norma biblioteko.

La norma biblioteko estas unu el la plej grandaj fortoj de Pitono. La plejparto de ĝi estas kongrua trans sistemoj, kio signifas, ke eĉ tre specialigitaj Piton-programoj povas funkcii ĉe Unikso, Mac OS, kaj Vindozo senŝanĝe.

Aliaj propraĵoj[redakti | redakti fonton]

Kiel Lisp, kaj malkiel Perl, la Piton-interpretilo ankaŭ subtenas interaktivan reĝimon, en kiu esprimoj povas esti enmetitaj de la terminalo kaj rezultoj povas esti tuj viditaj. Ĉi tio estas bonaĵo por lernantoj de la lingvo kaj ankaŭ por spertaj programistoj: etaj eroj de kodo povas esti provitaj en interaktiva mondo antaŭ ol oni enmetas ilin en veran programon.

Eksteraj ligiloj[redakti | redakti fonton]