Python, EsperantigitePitono, estas interpreta, interaktivaprogramlingvo, ofte uzata kaj kreita deGuido Van Rossum kaj distribuata sublibera permesilo. Ĝi estas nomita laŭ la brita televidserioMonty Python's Flying Circus. Ĝi estas ofte komparata alTcl,Perl,Scheme aŭJava, kaj lastatempe alRuby.
Jen simpla ekzemplo de programo de Python:
# Ekscii pri la primeco de nombroimportmathline=raw_input('Enmetu nombron por provi:')y=int(line)x=int(math.sqrt(y))whilex>1:ify%x==0:print'%s ne estas prima (ĝi divideblas de%s)'%(y,x)breakx-=1else:print'%s estas prima'%y
Kvankam popularigita kvazaŭ kontrasto dePerl, Python havas multajn similaĵojn al tiu lingvo. Tamen, la prilaborantoj de Python kontraŭstaras la flekseblegan sintakson dePerl kaj favoras pli konserveman (kaj, laŭ ili, pli legeblan)sintakson. Kvankam (same kielPerl) Python estas foje klasigata kielskripta lingvo, ĝi jam estis uzata por krei multajn grandajn projektojn, ekzemple: aplika servoZope kaj sistemo de dosiera distribuoMojo Nation.
Python havas vastan rangon de bazaj datumaj tipoj. Kune kun normalajentjera kajfrakciamatematiko, ĝ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 Python estas neŝangeblaj objektoj, do iu ĉena operacio kiu alilingve ŝanĝusstring-objekton (ekzemple, anstataŭigo de literoj) en Python simple redonos novan ĉenon (same kiel en Java).
En Python valoroj, ne variaĵoj, portas datumtipon — tio signifas, ke Python estas lingvo dinamika pri tipoj, kielLisp kaj malkielJava.
Inter tipodinamikaj lingvoj, Python estas mezgrade tip-regata. Ĝi estas nek tiel malstrikta kielPerl, nek tiel strikta kielCaml. 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 enPerl, estas neniu implicita konvertado inter, ekzemple, nombroj kaj ĉenoj; nombro estas nevalida argumento al operacio sur ĉeno.
Python 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 povasiteracii 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 kielhakettabeloj aŭasociaj 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.
La datumtipa sistemo de Python 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. Python ankaŭ subtenasmultoblan heredon.
La lingvo subtenas vastanintrospekton de datumtipoj kaj klasoj. Datumtipoj povas esti legataj kaj komparataj — ja, ĉar kielSmalltalk, datumtipoj estas mem datumtipo. La atribuaĵoj de objekto povas esti elprenitaj kiel vortaro.
Python 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,Perl aŭPascal.
Ekzemple, Python havas nur du strukturajn iteraciajn formojn — "for", kiu iteracias erojn de listo aŭ iteracianto (kiel "foreach" enPerl); kaj "while", kiu iteracias tiel longe kiel veras Bulea esprimo. Tial mankas al ĝiC-stila kompleksa "for," "do...while", kaj la "until" dePerl, kvankam kompreneble oni povas esprimi egalajn aferojn. Same, ĝi havas nur "if...elif...else" por branĉigo, neniun "switch" aŭ etikeditan "goto".
Unu nekutima eco de la sintakso de Python estas la metodo uzata por limigi programajn blokojn. Foje nomata "la blankspaca afero", ĝi estas unu eco de sintakso de Python, pri kiu multaj programistoj neniam programintaj en Python jam aŭdis, ĉar ĝi estas unika inter nunaj disvastigitaj lingvoj.
En lingvoj, kiuj uzas la blokan strukturon fine hereditajn deAlgol, i.a.Pascal,C, kajPerl — blokoj da kodo estas limigitaj per vinkuloj aŭ ŝlosilvortoj. (C kajPerl 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.
Python anstataŭprenas propraĵon de la malpli konata lingvoOccam — anstataŭ de punkciumo aŭ ŝlosilvortoj, ĝi uzas krommarĝenon mem por indiki la daŭron de bloko. Mallonga ekzemplo klarigos ĉi tion. Jen estasC- kaj funkcioj de Python, kiuj faras la saman aferon — komputas la faktorialon de entjera nombro.
Iuj programistoj alkutimiĝintaj alAlgol-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 ĉetruokartajFortran-sistemoj: iam, estas grandega progreso havi "liberformajn" lingvojn, en kiu nur simboloj gravis kaj ne ties pozicio sur la linio.
Tamen al programistoj de Python "la blankspaca afero" estas simple ellaboraĵo de normalaĵo, kiun programistoj perAlgol-stilaj lingvoj ĉiukaze jam sekvas.
Kiel ĉi-supre menciite, alia forto de Python 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 lingvoHaskell, kiel vidata jene kalkulante la unuajn kvineksponentumojn de du:
Pro tio, ke Python permesas, ke funkcioj estu argumentoj, ankaŭ eblas esprimi eĉ pli subtilajn funkciajn konstruojn, ekz. la pludaŭrigon.
La ŝlosilvorto "lambda" de Python eble misdirektus iujn fanatikulojn de funkcia programado. Lambdo-blokoj en Python 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:
Python subtenas (kaj vaste uzas) traktadon deesceptoj 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 estasfadensekuraj; ili ne havas la emon malordigi kodon tiel, kiel provado por reliveritaj eraro-kodoj enC; kaj ili povas facile leviĝi tra la voka stako, kiam eraro estas raportenda al pli alta nivelo de la programo.
La stilo de Python postulas uzi esceptojn, kiam ajn povas aperi erara kondiĉo. Ja, anstataŭ provi aliron al dosiero aŭ resurso antaŭ uzi ĝin, estas kutime en Python simple provi uzi ĝin — kaptante la escepton se aliro ne estas permesata.
Python 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 enC aŭ Python. La norma biblioteko estas aparte tre taŭga por krei interretajn aplikojn, kaj subtenas grandan kvanton da normajaranĝoj kaj protokoloj (ekz.MIME kajHTTP). Moduloj por krei bildajn uzantinterfacojn, konekti alrilatumaj datumbazoj, kaj manipuliregulesprimojn estas ankaŭ parto de la norma biblioteko.
La norma biblioteko estas unu el la plej grandaj fortoj de Python. La plejparto de ĝi estas kongrua trans sistemoj, kio signifas, ke eĉ tre specialigitaj programoj de Python povas funkcii ĉeUnikso,Mac OS, kajVindozo senŝanĝe.
KielLisp, kaj malkielPerl, la interpretilo de Python 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.