sirex
Sausis 14, 2008

Įvadas į Python

Pradėjau rašyti šį straipsnį ir nustebau, kad pixel.lt svetainėje nėra netgi tokios kategorijos – . Labai keista, kad populiarumas Lietuvoje yra gana mažas, nors jau antrus metus iš eilės ir šiemet Lietuvoje vyks Euro konferencija, į kurią suvažiuoja mylėtojai iš viso pasaulio. Bandysiu taisyti padėtį ir kadangi kol kas nemačiau pixel.lt svetainėje nei vieno straipsnio apie , pradėsiu nuo trumpo įvado.

Kas yra ?

yra dinaminė, objektiškai orientuota programavimo kalba, kurią galima naudoti visais „gyvenimo kompiuteryje“ atvejais. yra ne tik programavimo kalba, bet ir programavimo filosofija, kuri skatina programuoti kryptingai ir teisingai. Štai keletas pavyzdžių iš filosofijos:

  • Gražus, geriau nei baisus.
  • Paprastas, geriau nei sudėtingas.
  • Sudėtingas, geriau nei komplikuotas.
  • Turėtų būti vienas ir pageidautina – vienintelis, aiškus būdas tam atlikti.

Daugiau minčių iš filosofijos galite rasti The Zen of Python.

programuotojų bendruomenė kuria programavimo kultūrą ir ideologiją, kuri remiasi tuo, kad tobula programavimo kalba turi būti graži, aiški ir paprasta. sintaksė panaši į pseudokodą, kur didesnis dėmesys skiriamas ne interpretatoriui, o žmogaus protui, besistengiančiam suvokti kodo eilutes. Kodas sudarytas ne iš įvairių pagalbinių simbolių, padedančių interpretatoriui suprasti kodą, o iš natūralios, žmogui suprantamos kalbos, padedančios programuotojui suprasti programos paskirtį.

Kur galima panaudoti?

Yra keletas priemonių (interpretatorių), suprantančių sintaksę. Iš jų, plačiausiai naudojamas , parašytas su C. Kartu su pateikiama ir didžiulė standartinė biblioteka, kurios pakanka praktiškai viskam, pradedant nuo komandinės eilutės įrankių rašymo, baigiant sudėtingomis taikomosiomis programomis ar web aplikacijomis. Tačiau yra galimybė naudotis ir kitų platformų bibliotekomis. suteikia galimybę naudotis C/C++ bibliotekomis, Jython – Java platformos bibliotekomis, IronPython – .NET platformos bibliotekomis. Kaip jau supratote, galima naudoti ne tik su jos standartine biblioteka, bet ir su visomis Java ar .Net platformų teikiamomis galimybėmis, kas suteikia neribotą laisvę rinktis kuriant savo programą.

Dėl sintaksės paprastumo ir lankstumo, kodo apimtis dažnai būna kelis arba kelioliką kartų mažesnė. Todėl dažnai naudojama kaip „klijai“, apjungiantys įvairias funkcijas. Pradėjus kurti programą, labiausiai resursams imlias vietas galima kurti su C arba C++, o vėliau pagalba, viską apjungti į vieną bendrą visumą.

labai dažnai pasirenkama kaip scenarijų rašymo kalba, todėl mokėdami galėsite pritaikyti kitas programas savo poreikiams rašydami scenarijus. scenarijai ypač plačiai naudojami Linux sistemose, pradedant shell scenarijų rašymu, baigiant The GIMP ar Blender, galingų programų scenarijais, skirtais darbui su 2D ir 3D grafiniais objektais.

Naudojantis , yra parašyta labai daug taikomųjų programų, dažniausiai naudojant PyGTK arba wxPython grafinės naudotojo sąsajos kūrimo bibliotekomis. Šios bibliotekos dažniausiai pasirenkamos dėl jų multi-platformiškumo. Tačiau yra galimybė naudoti ir win32 bibliotekas, jei programa skirta tik Windows platformai.

Dėl sintaksės paprastumo, dažnai naudojama mokslo srityje, kur atliekami įvairūs tyrimai ar skaičiavimai. Matematikos srityje labai įvairiai naudojamas interpretatorius, vienas iš tokių naudojimo pavydžių – SAGE, kur panaudojant interpretatorių ir galimybę prijungti programinių bibliotekų funkcijas, sukurtas galingas įrankis matematikams, apjungiantis galingiausių matematikos programų bibliotekas į vieną visumą.

Ir, žinoma, pabaigai :) labai plačiai taikomas internetinių technologijų srityje. Interneto banginis Google, ne tik kad labai plačiai naudoja įvairiuose savo projektuose, paieškos variklyje, bet ir įdarbino patį kūrėją Guido van Rossum. Manau Google apsisprendimas nepalieka jokių abejonių dėl efektyvumo internetinių technologijų srityje.

Internetinius projektus galima kurti naudojant įvairius karkasus (angl. framework) arba išbaigtas turinio valdymo sistemas, tokias kaip Plone ar Silva. Didžiausias kada nors sukurtas web karkasas – Zope, kuris tikriausiai apima visas įmanomas web technologijų sritis. Yra ir paprastesnių karkasų, skirtų nedideliems projektams, populiariausi iš jų: Django, Pylons, TurboGears.

Užteks tauškalų, pereikime prie nuostabiosios sintaksės

Standartiškai pradėsiu nuo „Sveikas pasauli“ programos:

print "Sveikas pasauli"

Ši eilutė veiks tiek tiesiogiai iš interaktyvaus interpretatoriaus, tiek iš failo, kuriame bus įrašyta tik ši viena eilutė.

Kitas pavyzdys, parodantis, kad kalboje viskas yra objektai ir kiekvienas objektas gali būti dokumentuojamas tiesiog pačiame kode. Nemaišykite, dažniausiai kodas komentuojamas komentarų pagalba, tačiau kalboje, kodo dokumentacija yra kalbos dalis ir kiekvieno objekto dokumentacija gali būti pasiekiama tiesiog programos vykdymo metu, pavyzdžiui interaktyviame interpretatoriuje:

print (1).__doc__
print 'Tekstas'.__doc__

Netgi skaičius ar simbolių eilutė yra objektai, turintys savo savybes ir metodus. Kiekvienas objektas turi savybę __doc__, kuri saugo to objekto dokumentaciją. Šios dvi eilutės išves trumpą informaciją apie skaičiaus ir simbolių eilutės objektus.

Pateiksiu šiek tiek sudėtingesnį pavyzdį, kuris parodo kaip galima sužinoti visas objekto (nepamirškite – viskas yra objektas) savybes ir jų aprašymus:

print '\n\n'.join(['%s\n%s' % (p, p.__doc__) for p in dir('') if p[:2] != '__'])

Iš karto noriu pasakyti, kad ši eilutė jokiu būdu neparodo sintaksės aiškumo, tiesiog noriu parodyti, kad į vieną eilutę galima sutalpinti tai, kam kitose programavimo kalbose reikės visos didelės programos.

Ši eilutė išves į ekraną dokumentaciją, apie visas simbolių eilutės savybes. Galite pabandyti.

Pereikime prie gražesnių ir aiškesnių pavyzdžių, štai ta pati viena eilutė parašyta suprantamu kodu:

# -*- encoding: utf-8 -*-
for p in dir(''):          # Ciklas per visas objekto ('') savybes
     if p[:2] != '__':     # Mūsų nedomina specialios paskirties savybės,
                           # kurių pavadinimas prasideda '__' simboliais
         print p           # Išvedame pačią savybę
         print p.__doc__   # Išvedame savybės aprašymą
         print '\n\n'      # Darome dviejų tuščių eilučių tarpą

Šiame pavyzdyje viskas daug aiškiau, taip pat matyti, gan neįprasta, kitų programavimo kalbų atžvilgiu, savybė – atitraukimas nuo krašto, kuris nurodo programinio kodo blokus. Atitraukimas nuo krašto yra kalbos dalis ir yra būtinas, todėl visi tiesiog priversti išlaikyti vienodą programavimo stilių, kas daro kodą įskaitomesnį.

Pabandysiu perrašyti tą patį kodą PHP kalba, tarkime, kad funkcija dir(”) gražina iteratorių, o iteruojami objektai su savybe __doc__:

// Koduotės negalima nurodyti, todėl tarkime, kad visi naudoja UTF-8 ( Būtų gerai ane? :) )
foreach (dir('') as $p) {                  // Ciklas per visus iteruojamus objektus
     if (substr($p->name, 0, 2) != '__') { // Mūsų nedomina specialios paskirties savybės,
                                           // kurių pavadinimas prasideda '__' simboliais
         print $p->name;                   // Išvedame pačią savybę
         print $p->__doc__;                // Išvedame savybės aprašymą
         print "\n\n";                     // Darome dviejų tuščių eilučių tarpą
     }
}

Kaip matote, PHP kodas gavosi šiek tiek išsipūtęs, PHP kalboje naudojami įvairiausios paskirties simboliai, kurių kalboje nereikia. PHP ir daugelyje kitų programavimo kalbų teksto blokai atskiriami { } simboliais, kai yra daug tokių blokų, tai blokų pabaigoje nusidriekia didžiulė tokių simbolių eilė ir sunku išsiaiškinti, kuris blokas, kuriam lygmeniui priklauso… Dėl vienodo atitraukimo, kalboje blokai tiesiog vizualiai gerai matomi.

Kol kas tiek. Galbūt vėliau reikės pratęsti ir giliau pažvelgti į šios puikios programavimo kalbos ypatumus.

Panašūs straipsniai


“Įvadas į Python” komentarų: 10

  1. elt.lt » Blog Archive » Apžvalga. Šiandien aš skaičiau… #25

    […] Pixel.lt, programavimu besidomintiems siūlo susipažinti su „Python”… […]

  2. Migo

    nuostabi pradzia butu gerai sulaukti tesinio. tikrai sudomino :)

  3. Blogorama #309 : nežinau.lt

    […] veikimo trukmę. Pasirodo, telefonas skirtas pokalbiams, o ne žaidimams. • Pixel.lt įdėjo įvadą į Python, kuris supažindina su šia įdomia, paplitusia pasaulyje, tačiau dar mažai Lietuvoje žinoma […]

  4. pilietis_007

    Būtų labai įdomu išvysti python tvs aprašymų ir tutorialu, kaip Plone, Zope ir pan.. nes tai gan galingi ir gan populiarūs įrankiai :)

    Šeip nebloga pradžia ;)


  5. Šeip gražus straipsnis. Tik paliginimas nekoks - suliginot Pythona (kuris iki gyvo kaulo yra objektinis) ir PHP (kuris iki gyvo kaulo yra strukturinis). Be to, jai neklistu, PHP kodas neveikiantis, kas iki galo neparodo Python pliusų.

    Jai kalbėti apie kodo įskaitomumą kitose kalbuose - tam sukurti kodavimo standartai, kurie kodą padaro toki pat įskaitomą, kaip ir Python kalboje, o atitinkamas IDE padės žymiai legviau susigaudyti tarp atitinkamų { }.

  6. sirex

    Nepateikiau pilnai veikiančios PHP programos, tai paaiškindamas: „tarkime, kad funkcija dir(”) gražina iteratorių“. Esmė buvo parodyti skirtumus, kurie manau akivaizdžiai matosi..

    Python galima labai puikiai naudoti ir kaip struktūrinę kalbą, kas yra neįmanoma tarkim Java kalboje. Ir taip, visiškai teisingai, Python yra iki gyvo kaulo objektinė programavimo kalba. Manau daugelis sutinka, kad objektinis programavimas turi labai daug pliusų, kad iki gyvo kaulo objektinę programavimo kalbą daro dar geresne.

    Sutinku, kad panaudojus įvairias pagalbines priemones (kodavimo standartus ar galingą IDE) daugelio programavimo kalbų kodas gali tapti aiškus ir įskaitomas. Tačiau pati Python sintasė yra griežtas kodinimo standartas, visi tiesiog privalo kodinti, laikydamiesi vieno ir to pačio kodinimo standarto, kitaip programa neveiks. O Python kodas aiškus ir be pagalbinių IDE, nors panaudojus IDE jis taimpa dar aiškesnis ir lengviau valdomas.

  7. KostasT

    Kiek zinau, pitonas palaiko primityvius tipus, todel ne viskas yra objektas

  8. sirex

    KostasT, primityvųs tipai Python kalboje taip pat yra objektai. Žiūrėk pavyzdį, kur rašiau apie tai kaip viskas yra objektai:

    print (1).__doc__
    print ‘Tekstas’.__doc__

    Čia du patys primityviausi tipai: skaičius (1) ir simbolių eilutė ‘Tekstas’ yra objektai ir turi savo savybes ir metodus.

  9. Savaitgalio skaitiniai #48 » Pixel.lt

    […] šią savaitę sulaukėme pirmo straipsnio apie Python programavimo kalbą - “Įvadas į Python” bei pirmos dalies “Kaip per 3 naktis sukurti web2.0 internetinį projektą arba kaip […]

  10. WhateverLanguageIs

    > Python galima labai puikiai naudoti ir kaip struktūrinę kalbą,
    > kas yra neįmanoma tarkim Java kalboje.

    Seip, sitas limitas Java kalboje yra *geras*,
    o strukturinis programavimas yra *blogis*. :-)

    Todel nesakyciau cia yra pitono privalumas.
    Apart to, pitonas nera visiskai object-oriented.
    Jis greiciau yra surogatas object-structured-oriented.
    Daug objektiskesne yra Ruby, jei jau tikrai lyginti.

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.