Python (programlingvo): Malsamoj inter versioj

[kontrolita revizio][kontrolita revizio]
Enhavo forigita Enhavo aldonita
EmausBot (diskuto | kontribuoj)
e Roboto: Forigo de 1 interlingvaj ligiloj, kiuj nun disponeblas per Vikidatumoj (d:Q28865)
e esperanta nomo
Linio 14:
|retejo = {{en}} [http://www.python.org/ python.org]
}}
'''Python''', en Esperanto '''Pitono''', estas interpreta, interaktiva [[programlingvo]], kreita de [[Guido Van Rossum]] kaj distribuata sub [[Libera programaro|libera]] licenco. Ĝi estas nomita laŭ la brita televidserio ''[[Monty Python]]'s Flying Circus''. Ĝi estas ofte komparata al [[Tcl]], [[Perl]], [[Scheme]] aŭ [[Ĝavo|Java]], kaj lastatempe al [[Ruby (komputillingvo)|Ruby]].
 
Jen simpla ekzemplo de Python-aPitona programo:
<syntaxhighlight lang="python">
# Ekscii pri la primeco de nombro
Linio 36:
== Filozofio ==
 
PythonPitono estas [[multaparadigma]] lingvo, kiel [[C Plus Plus|C++]] kaj malkiel [[Smalltalk]]. Ĉi tio signifas ke, anstataŭ devigi programistojn adopti unu specifan stilon de programado, ĝi permesas kelkajn. Estas subtenataj [[Objektema programado|objektema]] kaj [[programa strukturismo|strukturema]] programado, kaj ankaŭ [[Funkciaj lingvoj|funkcia programado]]. Ĝi estas dinamike [[datentipo]]-regata kaj uzas [[senrubigo]]n por prizorgi memoron kaj evitas [[referenco|referencan]] sintakson.
 
Kvankam popularigita kvazaŭ kontrasto de [[Perl]], PythonPitono havas multajn similaĵojn al tiu lingvo. Tamen, la prilaborantoj de PythonPitono kontraŭstaras la flekseblegan sintakson de [[Perl]] kaj favoras pli konserveman (kaj, laŭ ili, pli legeblan) [[sintakso]]n. Kvankam (same kiel [[Perl]]) PythonPitono 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 ==
 
PythonPitono havas vastan rangon de bazaj datumaj tipoj. Kune kun normalaj [[entjero|entjera]] kaj [[frakcio|frakcia]] [[matematiko]], ĝi senĝene subtenas aritmetikon de grandaj nombroj kaj kompleksaj nombroj.
 
Ĝi subtenas la kutiman aron de operacioj sur [[ĉeno]]j, sed havas unu escepton: ĉenoj en PythonPitono estas neŝangeblaj objektoj, do iu ĉena operacio kiu alilingve ŝanĝus ''string''-objekton (ekzemple, anstataŭigo de literoj) en PythonPitono simple redonos novan ĉenon (same kiel en Java).
 
=== Datumtipa sistemo ===
 
En PythonPitono valoroj, ne variaĵoj, portas datumtipon -- tio signifas, ke PythonPitono estas lingvo dinamika pri tipoj, kiel [[Lisp]] kaj malkiel [[Java]].
 
Inter tipodinamikaj lingvoj, PythonPitono 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 ===
 
PythonPitono 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 [[hakettabelo]]j aŭ [[asocia tabelo|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.
Linio 60:
=== Objekta sistemo ===
 
La datumtipa sistemo de PythonPitono 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. PythonPitono ankaŭ subtenas [[multobla heredo|multoblan heredon]].
 
La lingvo subtenas vastan [[introspekto]]n 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.
Linio 66:
== Sintakso ==
 
PythonPitono 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 (programlingvo)|C]], [[Perl]] aŭ [[Pascal]].
 
Ekzemple, PythonPitono 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 (programlingvo)|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" ===
 
Unu nekutima eco de la sintakso de PythonPitono estas la metodo uzata por limigi programajn blokojn. Foje nomata "la blankspaca afero", ĝi estas unu eco de PythonPiton-sintakso, pri kiu multaj programistoj neniam PythonPiton-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 (programlingvo)|C]], kaj [[Perl]] -- blokoj da kodo estas limigitaj per vinkuloj aŭ ŝlosilvortoj. ([[C (programlingvo)|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.
 
PythonPitono anstataŭ prenasanstataŭ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 (programlingvo)|C]]- kaj PythonPiton-funkcioj, kiuj faras la saman aferon -- komputas la faktorialon de entjera nombro.
 
[[C (programlingvo)|C:]]
Linio 99:
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 [[truokarto|truokartaj]] [[Fortran]]-sistemoj: iam, estas grandega progreso havi "liberformajn" lingvojn, en kiu nur simboloj gravis kaj ne ties pozicio sur la linio.
 
Tamen al PythonPiton-programistoj "la blankspaca afero" estas simple ellaboraĵo de normalaĵo, kiun programistoj per [[Algol]]-stilaj lingvoj ĉiukaze jam sekvas.
 
=== Funkcia programado ===
 
Kiel ĉi-supre menciite, alia forto de PythonPitono 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, enkodukita de la funkcia lingvo [[Haskell]], kiel vidata jene kalkulante la unuajn kvin [[eksponentumo]]jn de du:
<syntaxhighlight lang="python">
nombroj = [1, 2, 3, 4, 5]
eksponentumoj_de_du = [ 2 ** n for n in nombroj ]
</syntaxhighlight>
Pro tio, ke PythonPitono permesas, ke funkcioj estu argumentoj, ankaŭ eblas esprimi eĉ pli subtilajn funkciajn konstruojn, ekz. la pludaŭrigon.
 
La ŝlosilvorto "lambda" de PythonPitono eble misdirektus iujn fanatikulojn de funkcia programado. Lambdo-blokoj en PythonPitono 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:
<syntaxhighlight lang="python">
def add_and_print_maker(x):
Linio 120:
=== Traktado de esceptoj ===
 
PythonPitono subtenas (kaj vaste uzas) traktadon de [[escepto]]j 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 [[fadensekura]]j; ili ne havas la emon malordigi kodon tiel, kiel provado por reliveritaj eraro-kodoj en [[C (programlingvo)|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 PythonPitono postulas uzi esceptojn, kiam ajn povas aperi erara kondiĉo. Ja, anstataŭ provi aliron al dosiero aŭ resurso antaŭ uzi ĝin, estas kutime en PythonPitono simple provi uzi ĝin -- kaptante la escepton se aliro ne estas permesata.
 
== Norma biblioteko ==
 
PythonPitono 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 (programlingvo)|C]] aŭ PythonPitono. La norma biblioteko estas aparte tre taŭga por krei interretajn aplikojn, kaj subtenas grandan kvanton da normaj [[aranĝo]]j kaj protokoloj (ekz. [[MIME]] kaj [[HTTP]]). Moduloj por krei bildajn uzantinterfacojn, konekti al [[rilatumaj datumbazoj]], kaj manipuli [[regulesprimo]]jn estas ankaŭ parto de la norma biblioteko.
 
La norma biblioteko estas unu el la plej grandaj fortoj de PythonPitono. La plejparto de ĝi estas kongrua trans sistemoj, kio signifas, ke eĉ tre specialigitaj PythonPiton-programoj povas funkcii ĉe [[Unikso]], [[Mac OS]], kaj [[Vindozo]] senŝanĝe.
 
== Aliaj propraĵoj ==
 
Kiel [[Lisp]], kaj malkiel [[Perl]], la PythonPiton-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 ==
{{Projektoj|commons=Python (programming language)}}
* {{eo}} [http://esperanto-me.org/pitono/pitono.htm Instruilo por la programlingvo Pitono]
* {{eo}} [http://bukvodel.livejournal.com/10281.html Paradokso de Python] - eseo de [[Paul Graham]] pri PythonPitono.
* {{en}} [http://www.python.org/ La Hejmpaĝo de PythonPitono]
* {{en}} [http://www.python.org/doc/ Lerniloj kaj referencoj de PythonPitono]
* {{en}} [http://www.zope.org/ Zope: Aplika servilo kaj sistemo de prizorgado de enhavo]
* {{en}} [http://twistedmatrix.com/ Bazo en PythonPitono por krei retajn aplikaĵojn]
* {{en}} [http://www.python.org/cgi-bin/moinmoin Vikio pri PythonPitono]
* {{pt}} [http://www.pythonbrasil.com.br/ Python Brasil]