![]() Pitonas, kandantis sau uodegą Įvadas Python kalbos idėja kilo 9-ojo dešimtmečio pabaigoje (kaip ABC kalbos įpėdinį) ir jos realizaciją 1989 m. gruodį Nyderlanduose pradėjo Guido van Rossum. Pats kalbos branduolys yra minimalus, o naudingos galimybės išplečiamos gausia standartinių funkcijų biblioteka. Kalba yra vystoma kaip atviro kodo projektas ir ji realizuota daugeliui operacinių sistemų. Kadangi ji sparčiai vystoma, tai nėra jos standartų, o jų vaidmenį perėmęs etaloninis CPython interpretatorius. Skelbiama, kad sukūrimo tikslu buvo kodo skaitomumas (gražu geriau nei bjauru; aiškiau
nei neaiškiau ir kitos tezės). Kadangi kodo atitraukimai yra privaloma programos struktūros
dalis, tai verčia programas rašyti vieninteliu būdu. Python 2.0 versija pasirodė 2000 m. spalį, o 3.0 2008 m. gruodį. Kalbos struktūra Pabandysime Python kalbą pristatyti keliais labai paprastais pavyzdžiais. Iš jų pajusite pačius kalbos pagrindus, o jau tada galėsime pereiti ir prie sudėtingesnių klausimų. PyPy Pavyzdžių patikrinimui Windows terpėje naudojau PyPy interpretatorių (http://pypy.org). Tai greitas alternatyvus Python interpretatorius (2.7 ir 3.2 versijoms). Jis yra sukurtas naudojant pačią Python kalbą. Jo panaudojimui, pavyzdžių tekstą įrašykite į failą (pvz., labas.py), o tada iškvieskite pypy nurodydami tą failą, pvz.,
Labas, pasauli! Kaip įprasta, kalbos pristatymą pradedame pirmąja programėle, išvedančia pranešimą Labas, pasauli!:
Pastaba: eilutės, prasidedančios diezo ženklu (#), yra komentarai Kintamieji ir operatoriai Kiekvienos kalbos pagrindas yra kintamieji. Python kintamieji aprašomi, kai jiems priskiriamos reikšmės. Pvz. (kabliataškis skiria sakinius),
Atsakymas bus toks, kokio ir tikėjotės: 11 O jei abiem kintamiesiems priskirsime eilutes? Pvz.,
Aišku gausime 56
O jei vienas skaičius, o kitas eilutė? Klaida Python nemoka
automatiškai konvertuoti skirtingų tipų reikšmių! Reikia naudoti tipų konversijos funkcijas, pvz.: Gausime: Jau panaudojoe vieną (sudėties) operatorių. Aritmetiniams veiksmams skirti
operatoriai: išves: 3 Pastaba: Priskyrimo operatoriai (=) gali būti išplėsti veiksmo operatoriais (įgaunant prasmę
savo paties su ...: Pvz., ir rezultatas: Veiksmų sekos valdymas Sudėtiniuose sakiniuose vykdomi blokai nurodomi atitraukimais nuo krašto. Tad kitame pavyzdyje (kaip ir tolimesniuose), atitraukimas nėra vien dėl grožio, o yra sudėtinė Python kalbos sintaksės dalis. Sąlygos patikrinimas a = 20 if a > 30: print("per didelis"); elif a < 0: print("neigiamas"); else: print("0..30") Iteracinis ciklas for a in range(1,3): print ("a: "+str(a)) rezultatas: Sąlyginis ciklas a = 1 while a < 4: print ("a: "+str(a)) a += 1 Kaip ir numanote, rezultatas bus identiškas ankstesniam pavyzdžiui. Funkcijos Pasikartojančių veiksmų iškėlimas į atskirus programinius vienetus (funkcijas, procedūras) yra būdingas visoms kalboms. Pademontruosime paprastos funkcijos, išvedančios pasisveikinimo tekstą, pavyzdį: def Pasisveikinimas (vardas): print("Labas, " + vardas + "!") Pasisveikinimas ("pasauli") Eilutės Teksto eilutės yra vienas svarbiausių Python elementų. Su eilutėmis (arba jų
kintamaisiais) galima visa eilė funkcijų: Naudinga yra funkcija len(), gražinanti eilutės ilgį. Taip pat galima nurodyti išpjautą eilutės dalį [p:g], nurodant pradžios ir pabaigos pozicijas (-1 reiškia be paskutinio). Minėtas galimybės iliustruosime šiuo pavyzdžiu: sEilute = "Labas, Pasauli!" c = sEilute.count("a") f = sEilute.find ("P") print (sEilute.lower()) print (sEilute.upper()) print (c, f) L = len(sEilute) print (L) sVardas = sEilute[7:-1] print (sVardas) sVardas = sEilute[7:L-1] print (sVardas) Rezultatas:
Duomenų tipai Python kalboje baziniai tipai yra loginis, sveikas skaičius, dešimtainis skaičius ir teksto eilutė. Joje viskas (ne tik šie tipai, bet ir didelės duomenų struktūros, funkcijos ar programos) yra tarsi objektai. Objektas tarsi plastikinis dėžė, kurioje laikomi duomenys. Objektas yra tipas, kuris nusako, ką galima daryti su duomenimis, pvz., kokius veikmus, ar tie duomenys gali kisti. Vis tik Python tipai yra griežti, tai reiškia, kad objekto tipas negali būti keičiamas, net jei objekto reikšmė kinta. Norėdami sužinoti objekto tipą, naudokite print (type(produktas)) print (type(555)) Gausime <class 'str'> <class 'int'> class yra objekto aprašas. Skaičiams galima nurodyti skaičiavimo pagrindą: 0b dvejetainį, 0o aštuntainį, 0x šešioliktainį; pvz., dešimtainė reikšmė 18 gali būti užrašyta taip: 0b1010, 0o22, 0x12 Pastaba: skaičių negalima pradėti 0, pvz., 0555 yra klaidinga reikšmė. Taip pat su skaičiais
yra dvi dalybos operacijos: Reikšmės tipo pakeitimui reikia naudoti tipo konvertorių: bool, int, float, str. Pvz., Kas tai yra programavimas? Pradėkime nuo trupučio mistikos ir ją išspręskime. Kaip manote, ką reiškia šios dvi eilutės? Atrodo panašu į kažką techniško, tarsi kokia programa. Iš tikro, tai mezgimo schema (žr. >>>>>), aprašanti, kaip pasukti mezgant kojinės kulną. Daugumai tai visiška mistika, tačiau kai kurioms moterims (ir mezgantiems) aiškiau nei dieną. O dabar paimkite kitą pavyzdį šįkart jo paskirtį atpažinsite iškart: Agrastai, 2,5 kilogramo; medus, 250 gramų; vanduo, šaltinio, 10 litrų; razinos, neplautos, 30 gramų Agrastus sumaigyti, užpilti vandeniu ir užvirinti. Kai atauš, perkošti, įmaišyti medų, įberti razinų ir pastatyti šiltoje vietoje, kad įrūgtų. Kai gira suputos, supilstyti į mažesnius indus, laikyti šaltoje vietoje. Raudonų agrastų gira gausis rausva, geltonų - gelsva, žalių žalsva. Taip tai receptas: produkto sudedamosios dalys ir tada jo paruošimo taisyklės. Mūsų pavyzdyje produktas yra agrastų gira. Tačiau ką šiedu abu pavyzdžiai turi bendra? Visus šiuos dalykus rasite kompiuterinėje programoje. Šį samprotavimą pateikiau tam, kad parodyčiau, kad programavimas nėra kažkas iš kojų verčiančio tereikia išmokti žodžius ir jų naudojimo taisykles. Bet palikime šiuos filosofinius išvedžiojimus ir paimtii tikrąją programą mūsų atveju Python kalba: for atgal in 5, 4, 3, 2, 1, "nulis!": print(atgal)Jūs greičiausiai supratote, kad ji pateiks skaičiavimo atgal rezultatus: 5 4 3 2 1 nulis! O dabar pažvelkime į kitą pavyzdį ingredientai = [ "vanduo", "medus", "agrastai", "razinos", ] print (ingredientai[2]) Galime įsivaizduoti, kad turime recepto ingredientų sąrašą, iš kurio pateikiame vieną pagal jo vietą
masyve. Kadangi numeruoti pradedama 0 (ach taip, žmonės paprastai pradeda skaičiuoti nuo 1, tačiau
kompiuteriai nėra žmonės), tai rezultatas bus Tačiau recepte ingredientai nurodyti kitaip. Tad bandome dar vieną programą: kiekiai = { "vanduo" : "10 litrų (šaltinio)", "medus" : "250 g", "agrastai" : "2,5 kg", "razinos": "30 g (neplautos)", } produktas = "razinos" print (produktas, " : ", kiekiai[produktas]) Joje Python realiame pasaulyje Bet Python kalba yra tik žaisliukas ar naudingas įrankis? Jis gyvuoja nuo 1991 m. ir yra tarp 10-ies populiariausių kalbų. Ją sutiksite naudojamą įvairiose srityje: komandinėse eilutėse ar terminaliniame lange, grafinėje vartotojo sąsajoje, interneto sprendimuose (tiek kliento, tiek serverio pusėje), debesyse, mobiliuosiuose įrenginiuose ir įtaisuose (pretaisuose). Taigi, tai puiki universalaus naudojimo kalba, leidžianti tą patį sprendimą realizuoti mažesniu eilučių kiekiu. Bet tai nėra panacėja visose situacijose. Ji nebūtinai įdiegta visose aplinkose. Ji pakankamai greita, tačiau gali būti nepakankamai greita ten, kur reikalauja ypatingų greičių. Kalbų palyginimas Parašysime programėlę įvairiomis kalbomis, kuri išveda skaičių ir kažką pasako apie save. Galėsite patys palyginti... Apvalkalo kalbos. #!/bin/sh nulis=0 echo "Skelbiu: $nulis. Aš SH skriptas tik tiek." Jos rezultatas: Senieji kietuoliai C ir C++ yra gana žemo lygio kalbos, naudojamos, kai reikia didelių greičių. Jas
sunkiau išmokti, programos jose linkę smigti, o to priežastį sunku surasti. C kalbos pavyzdys: #include C++ išlaiko C kalbų šeimų panašumą: #include Java ir C# yra C ir C++ išvystymai, siekiant pašalinti kai kuriuos šių trūkumus, tačiau kažkiek
daugžodžiauja ir riboja. Štai Java pavyzdys: public class Overlord { public static void main (String[] args) { int nulis = 0; System.out.format("Skelbiu : %d. Esu Java baisesnė už C!\n", nulis); } } Išskyrus apvalkalo kalbas, kitos minėtos yra vadinamos statinėmis kalbomis, nes reikia nurodyti kai kurias kompiuterio lygio charakteristikas (pvz., duomenų tipus, kurių negalime pakeisti). Jomis parašytas programas speciali kompiliatoriaus programa verčia į mašininę kalbą. Nuo jų skiriasi dinaminės kalbos, kurių programos dažnai vadinamos skriptais - jos nėra kompiliuojamos, o vykdomos interpretatorių (specialių programų). Viena tokių kalbų (nuo senų laikų yra Perl labai galinga ir turinti daugybę bibliotekų, tačiau jos sintaksė kartais gali pasirodyti siaubinga
(gal dėl to kai kurias turėtas nišas ima perleisti Ruby ir Python). Štai pavyzdys: my $nulis = 0; print "Skelbiu : $nulis. Aš Perl, visų kalbų tėvas.\n"; Ruby yra naujesnė kalba, ypač išpopuliarėjusi dėl Ruby on Rails antstato, skirto intraneto
sprendimams. Štai pavyzdys: nulis = 0 puts "Skelbiu : #{nulis}: Ruby, pasirengęs ir įkaitęs." PHP išpopuliarėjo interneto sprendimuose ir leidžia jungti HTML ir kodą. Tačiau turi daugybę
povandeninių akmenų ir netapo universalia kalba. Štai pavyzdys: <BODY><P>Skelbiu : <?PHP $nulis = 0; echo " $nulis. Aš PHP, ir aš užėmiau internetą.\n"; ?> </P></BODY> Ir pabaigoje Python pavyzdys: nulis = 0 print("Skelbiu : %s. Aš Python ir kaip? % nulis) Tokia trumpa ši Python kalbos iliustracija. Tikruosi, ji leidžia pajausti šios kalbos pagrindus.... O nuo jų bus galima keliauti ir toliau... Ankstesnės "Advanced HTML" skyrelio temos: | |