Pajton (programski jezik)

Iz Vikipedije, slobodne enciklopedije
Idi na navigaciju Idi na pretragu
Pajton
Python logo and wordmark.svg
Logo
Originalni naziv engl. Python
Izgovara se pajton
Model imperativni, objektno-orijentisani, funkcionalni
Autor(i) Gvido van Rosum
Aktuelna verzija 3.7.1 i 2.7.15
Datum aktuelne verzije 27. jun 2018.
Operativni sistemi svi značajniji
Licenca Python Software Foundation licenca[1]
Veb-sajt http://www.python.org/
Dokumentacija http://www.python.org/doc/

Pajton (engl. Python) je programski jezik visokog nivoa opšte namene. Podržava, u prvom redu imperativni, objektno-orijentisan i funkcionalni stil programiranja. Sintaksa jezika Pajton omogućava pisanje veoma preglednih programa. Jezik se brzo i lako uči.[2]

Programi pisani u Pajton jeziku se najčešće interpretiraju. Uz interpretator se obično isporučuje i veoma razvijena standardna biblioteka modula.

Autor ovog jezika je Gvido van Rosum sa Univerziteta Stičing u Holandiji.

Zdravo svete[uredi]

Za ispis teksta "Zdravo svete!" (bez znakova navoda), u verzijama jezika koje prethode verziji 3.0, može da se upotrebi sledeći kod:

print 'Zdravo svete!'

U verziji jezika 3.0 sintaksa je nešto izmenjena. Gornji primer bi izgledao ovako:

print('Zdravo svete!')

Isti tekst, ali ovoga puta zajedno sa navodnicima, mogao bi da bude prikazan izvršavanjem sledećeg Pajton koda u interaktivnom načinu rada:

'Zdravo svete!'

O imenu[uredi]

Ime programskog jezika asocira na zmiju piton ali, po rečima autora, inspiraciju za ime je dobio vezano za „Letećeg cirkusa Montija Pajtona“ (engl. Monty Python's Flying Circus), BBC-evu seriju komedija aktuelnu sedamdesetih godina.[3]

Nastanak programskog jezika Pajton[uredi]

Gvido van Rosum, autor programskog jezika Pajton

Programski jezik Pajton nastao je početkom devedesetih godina prošlog veka. Njegov autor je Gvido van Rosum. On je u vreme nastanka jezika bio zaposlen u Stiching Mathematish Centrum (CWI) u Holandiji. Značajan uticaj na koncept ovog jezika, po rečima autora, imao je autorov rad na kreiranju programskog jezika ABC.

Programski jezik Pajton postepeno stiče veliku popularnost. U izgradnju jezika i onoga što ga okružuje uključuje se veliki broj ljudi, iako Gvido ostaje njegov glavni autor. Sva autorska prava za ovaj programski jezik drži neprofitna organizacija Python Software Foundation (PSF)[4].

Svako može da koristi programski jezik Pajton besplatno bilo u komercijalne ili u druge svrhe.

Svako može da postane donator Python Software Foundation u novcu, ili svojim doprinosom u izgradnji jezika ili u srodnim oblastima.

Razvoj programa[uredi]

Interpretatori i prevodioci[uredi]

Programi u jeziku Pajton se uglavnom interpretiraju. Interpretatori i standardne biblioteke modula se stalno razvijaju i prenose na veliki broj različitih platformi. Glavne podržane platforme su Linuks, BSD, Mac OS X, Majkrosoft Vindous i Java. Sledi spisak drugih platfomi koje podržavaju Pajton: AIX operating system, Amiga, AROS, AS/400, BeOS, BSD, FreeBSD, Mac OS 9, NetBSD, OpenBSD, OS/2, OS/390, Palm OS, Plan 9, PlayStation 2, Psion, QNX, RISC OS (ranije Acorn), Sharp Zaurus, SPAR Solaris, Symbian OS, VMS, VxWorks, Windows CE/Pocket PC, Xbox, z/OS ...

Postoje i pravi prevodioci, koji Pajton kod prevode u mašinski jezik. Oni omogućavaju da se stvore izvršni moduli nezavisni od interpretatora, te da se programi izvršavaju brže. Ono što se gubi ovakvim prevođenjem je prenosivost ovako prevedenog programa na različite hardverske i softverske platforme.

Standardne biblioteke modula[uredi]

Pajton dolazi spreman za rad: „Baterije su uključene“ u isporuku

Za programski jezik Pajton razvijen je veliki broj standardnih modula koji omogućavaju efikasan rad u mnogim oblastima. Većina ovih modula prenosiva je na različite platforme što omogućava da često kompletni programi bez prilagođavanja rade na različitim mašinama i pod različitim operativnim sistemima.

Standardna biblioteka modula omogućava pisanje programa vezanih za Internet podržavajući veliki broj standardnih formata i protokola. Postoje moduli za kreiranje grafičkog korisničkog interfejsa, vezu ka relacionim bazama podataka, za aritmetiku sa proizvoljnim željenim brojem decimala, za rad na leksičkoj analizi primenom regularnih izraza, kao i standardni moduli za mnoge druge poslove.

Razvoj novih modula[uredi]

Ukoliko je potrebno razviti novi modul, to je moguće izvesti u Pajtonu ili u nekom drugom podržanom jeziku. Obično je to C jezik, kada je potrebno sistemsko programiranje ili kada je brzina izvršavanja kritična. Primeri drugih programskih jezika, koji se koriste u ove svrhe, su Java ili Pyrex jezik koji predstavlja mešavinu programskog jezika Pajton i C jezika.

Organizacija podataka[uredi]

Predstavljanje podataka[uredi]

Podaci u programskom jeziku Pajton su predstavljeni objektima (engl. objects). Svaki podatak je predstavljen objektom ili relacijom među objektima. Prevedene funkcije, metode i neki drugi elementi jezika Pajton takođe su predstavljeni objektima tokom izvršavanja programa.

Promenljive i tip podataka[uredi]

Tip podatka u programskom jeziku Pajton nije vezan za promenljivu. Svakoj promenljivoj tokom izvršavanja programa može da bude dodeljena vrednost bilo kog tipa kao i da ta vrednost bude zamenjena drugom različitog tipa.

Tip podatka vezan je za vrednost koju sadrži promenljiva. Sve vrednosti promenljivih su objekti.

Objekti[uredi]

Svaki objekat sadrži tip objekta i njegovu vrednost. Jednom kreirani objekat ne može da menja tip, dok vrednost nekih objekata može da bude promenjena. Promenljivost objekata određena je njihovim tipom. Postoje:

  • nepromenljivi (engl. immutable) objekti
na primer: brojevi, niske (engl. strings) i n-torke
  • promenljivi (engl. mutable) objekti
na primer: rečnici i liste

Objekti ugrađeni u jezik[uredi]

Pajton poseduje jedan broj tipova objekata koji su ugrađeni u jezik. Jezik može da se proširi dodatnim tipovima preko modula.

Sledeći spisak sadrži neke od tipova objekata koji su ugrađeni u programski jezik Pajton:

Ovi objekti bivaju kreirani iz numeričkih leksema u izvornom programu, ili kao rezulat aritmetičkih operatora ili funkcija. Jednom kreirani, ne menjaju vrednost.
Postoje tri vrste brojeva. To su celi brojevi, brojevi sa pokretnim zarezom i kompleksni brojevi:
Predstavljaju elemente matematičkog skupa celih brojeva.
Postoje tri tipa celih brojeva:
      • Obični celi brojevi (engl. Plain integers)
Celi brojevi u rasponu od -2147483648 do 2147483647, ili širem.
      • Dugi celi brojevi (engl. Long integers)
Celi brojevi u neograničenom rasponu koji je jedino limitiran količinom raspoložive virtuelne memorije.
Bulov tip sadrži samo dve vrednosti koje predstavljaju istinosne vrednosti tačno i netačno. U većini situacija one se ponašaju kao celi brojevi 0 i 1, osim kod konverzije u niske kada se dobijaju vrednosti "False" i "True".
    • Brojevi sa pokretnim zarezom (engl. Floating point numbers)
Na mašinskom nivou predstavljeni su brojevima sa pokretnim zarezom u dvostrukoj tačnosti.
Na mašinskom nivou predstavljeni su parom brojeva u obliku sa pokretnim zarezom u dvostrukoj tačnosti.
Oni predstavljaju konačne uređene skupove čiji su indeksi nenegativni celi brojevi. Mogu da se podele na nepromenljive i promenljive nizove:
    • Nepromenljivi nizovi (engl. Immutable sequences)
Objekat koji po tipu spada u nepromenljive nizove ne može da bude izmenjen nakon njegovog kreiranja (ali nepromenljivost ne važi za eventualne izmenljive objekte čije reference sadrži nepromenjivi niz).
Sledeći tipovi spadaju u nepromenljive nizove:
Elementi niske su znakovi. Ne postoji poseban znakovni tip podataka. Pojedinačni znak je predstavljen nizom od jednog znaka. Niske mogu da se koriste i kao nizovi bajtova i da se iskoriste, na primer, da bi sadržali podatke učitane iz datoteke.
Elementi ovakvog niza su unikod kodovi.
Elementi n-torki su proizvoljni Pajton objekti. Sintaksno gledano n-torke se formiraju iz liste izraza međusobno razdvojenih zapetom.
    • Promenljivi nizovi (engl. Mutable sequences)
Po kreiranju omogućavaju izmenjivanje:
Sadrže kao elemente proizvoljne Pajton objekte. Sintaksno gledano dobijaju se upisivanjem liste izraza razdvojenih zapetom u uglaste zagrade.
  • Preslikavanja (engl. Mappings)
Predstavljaju konačan skup objekata indeksiran proizvoljnim skupom indeksa:
    • Rečnici (engl. Dictionaries)
To su konačni skupovi objekata indeksirani vrednostima gotovo bilo kog tipa. Jedini tipovi objekata koji nisu prihvatljivi kao indeksi su objekti tipa listi ili rečnika ili drugi promenljivi tipovi.
  • Izvršivi tipovi (engl. Callable types)
Ovo su objekti na koje može da se primeni poziv (izvršenje) funkcije:
Za svaku definisanu funkciju, u trenutku izvršavanja programa, kreira se jedan ovakav objekat. On se poziva (izvršava) uz listu parametara koja treba da sadrži isti broj parametara kao i lista formalnih parametara definicije funkcije.
    • Metode koje definišu korisnici (engl. User-defined methods)
Ovakvi objekti povezuju klasu, primerak klase i bilo koji izvršivi tip (obično funkciju koju definišu korisnici).

.. .

Opis jezika[uredi]

Interaktivni način izvršavanja pajton koda

Osnovna svojstva jezika opisana su kroz niz jednostavnih primera. Većina primera napisana je kao da se izvršavaju u interaktivnom modu interpretatora. Oznake ">>>" i "· ·" na početku linije označavaju ono što je korisnik uneo, dok je odgovor interpretatora napisan bez ovih uvodnih znakova. Primeri odgovaraju verziji 3.0 Pajton jezika.

Brojevi[uredi]

Interpretator jezika može da se koristi za računanje.

Celi brojevi[uredi]

Primeri rada sa celim brojevima:

>>> 2 + 3
5
>>> 4 + 8 # Komentar počinje iza znaka "# " i završava se na kraju linije
12
>>> 3 * 2 # Množenje
6
>>> 4 + 3*5 # Koristi se u matematici uobičajeni redosled računanja
19
>>> 5*(4 + 3*(2 + 1)) # Grupisanje operanada se vrši jedino malim (oblim) zagradama
65
>>> 6 // 2 # Celobrojno deljenje
3
>>> 7 // 2 # Ostatak pri celobrojnom deljenju se zanemaruje u rezultatu
3

U radu sa celim brojevima uvek se dobija tačan rezultat. Ovo omogućuje prelazak (po potrebi) na brojeve proizvoljne dužine:

>>> 2 ** 1024 # 2 na stepen 1024
179769313486231590772930519078902473361797697894230657273430
081157732675805500963132708477322407536021120113879871393357
658789768814416622492847430639474124377767893424865485276302
219601246094119453082952085005768838150682342462881473913110
540827237163350510684586298239947245938479716304835356329624
224137216

Brojevi u obliku sa pokretnim zarezom[uredi]

Kompletno je podržan rad sa brojevima sa pokretnim zarezom. Sintaksno, oni se razlikuju od celih brojeva po prisustvu decimalne tačke ili eventualno eksponencijalne notacije. Ukoliko operator ima kao operande cele i brojeve u pokretnom zarezu, vrši se pretvaranje svih operanada u oblik sa pokretnim zarezom.

>>> 7.0 / 2
3.5
>>> 1e1 / 4 # Deset (jedan puta deset na prvi stepen) podeljeno na četiri dela
2.5
>>> 5 * 3.25 / 2.5
6.5

Kompleksni brojevi[uredi]

Podržani su i kompleksni brojevi. Imaginarni deo kompleksnog broja se označava sufiksom "j" ili "J". Kompleksni brojevi čiji je realni deo različit od nule pišu se u oblim zagradama.

>>> (5+4j) - (3+1j)
(2+3j)
>>> (3+5j) + (0+2j)
(3+7j)
>>> (3+5j) + 2j
(3+7j)
>>> 1j * 1j
(-1+0j)
>>> (2+3j) * 3
(6+9j)
>>> 2 + 3j*3
(2+9j)
>>> (4+9.5j) / (1.5+2j)
(4+1j)

Dodeljivanje vrednosti[uredi]

Znak "=" koristi se kod dodeljivanja vrednosti promenljivim:

>>> цена = 3.50
>>> број_комада = 4
>>> цена * број_комада
14.0

Podržano je višestruko dodeljivanje vrednosti:

>>> x = y = z = 17
>>> x
17
>>> y
17
>>> z
17

Okupljajući tipovi podataka[uredi]

Niske[uredi]

Rad sa niskama (engl. Strings) je snažno podržan u Pajtonu. Niske sadrže nizove znakova i nisu izmenljive.

Evo nekoliko načina da se kreira niska:

>>> 'Ovo je niska'
'Ovo je niska'
>>> "Mogu da se koriste i dvostruki navodnici"
'Mogu da se koriste i dvostruki navodnici'
>>> niska = 'Pera je rekao "Ja volim da programiram".'
>>> print(niska)
Pera je rekao "Ja volim da programiram".

Niske mogu da se povežu upotrebom operatora "+" i da se ponove više puta pomoću operatora "* ":

>>> 'Ja' + 'Mislim'
'JaMislim'
>>> 'Ja' + 3 * ' mislim,' + '...'
'Ja mislim, mislim, mislim,...'

Delovima niske može da se pristupi putem indeksa. Početni indeks je nula.

>>> реч = 'Престолонаследниковица'
>>> реч[0]
'П'
>>> len(реч) # Враћа дужину ниске
22
>>> реч[21] # Враћа последњи знак ове ниске у облику ниске дужине један
'а'
>>> реч[3:6] # Део ниске од позиције 3 до, али не укључујући, позиције 6
'сто'
>>> реч[:6] # Првих шест знакова
'Престо'
>>> реч[8:] # Све осим првих осам знакова
'наследниковица'

Podržane su i niske koje sadrže unikodni skup znakova.

Liste[uredi]

Liste omogućavaju da se više objekata istog ili različitog tipa povežu u jednu celinu. Predstavljaju se kao spisak objekata razdvojenih zapetom u uglastim zagradama.

>>> lista = ['Prvi', 'Drugi', 23, 119]
>>> lista
['Prvi', 'Drugi', 23, 119]

Delovima lista može da se pristupa, slično kao i niskama, putem indeksa:

>>> lista[0]
'Prvi'
>>> lista[3]
119
>>> lista[1:3]
['Drugi', 23]
>>> lista[1:]
['Drugi', 23, 119]
>>> lista[:1]
['Prvi']
>>> lista[2:]
[23, 119]
>>> lista[:2]
['Prvi', 'Drugi']

Liste kao i niske mogu da se povezuju i „multiplikuju“:

>>> 3 * lista[:2] + ['Treći', 2*2]
['Prvi', 'Drugi', 'Prvi', 'Drugi', 'Prvi', 'Drugi', 'Treći', 4]

Za razliku od niski, liste su promenljive:

>>> lista
['Prvi', 'Drugi', 23, 119]
>>> lista[2] = 0
>>> lista
['Prvi', 'Drugi', 0, 119]
>>> lista.append('Kraj')
>>> lista
['Prvi', 'Drugi', 0, 119, 'Kraj']
>>> lista[2:4] = []
>>> lista
['Prvi', 'Drugi', 'Kraj']
>>> lista[2:2] = ['Treći', 'Četvrti']
>>> lista
['Prvi', 'Drugi', 'Treći', 'Četvrti', 'Kraj']

Liste mogu da sadrže kao svoje elemente druge liste:

>>> b = [3, 4]
>>> a = [1, 2, b, 6]
>>> a
[1, 2, [3, 4], 6]
>>> a[2]
[3, 4]
>>> a[2][1]
4
>>> a[2].append(5)
>>> a
[1, 2, [3, 4, 5], 6]
>>> b
[3, 4, 5]

N-torke[uredi]

N-torke su tip podataka sličan listama, ali nisu izmenljive. Dobijaju se navođenjem elemenata razdvojenih zapetom.

>>> voće = 'jabuka', 'kruška', 'šljiva' # Pakujem voće
>>> voće
('jabuka', 'kruška', 'šljiva')
>>> voće[1]
'kruška'
>>> voće[1:]
('kruška', 'šljiva')
>>> a, b, c = voće # Mogu da raspakujem voće
>>> a
'jabuka'
>>> b
'kruška'
>>> c
'šljiva'

Skupovi[uredi]

Skupovi su okupljajući tip podataka u kome nije definisan redosled elemenata i ne postoje duplikati. Obično se koriste za ispitivanje pripadnosti nekog elementa skupu kao i za eliminisanje duplikata. Implementirane su i matematičke operacije kao što su unija, presek, razlika i simetrična razlika skupova.

>>> терариј = ['шарка', 'поскок', 'шарка', 'шарка', 'поскок']
>>> отровнице = set(терариј) # Формирам скуп уклањајући дупликате
>>> отровнице
set(['поскок', 'шарка'])
>>> 'поскок' in отровнице
True
>>> 'белоушка' in отровнице
False

Skupovne operacije:

>>> A = set([1, 2, 3, 4])
>>> B = set([3, 4, 5])
>>> A | B # Унија
set([1, 2, 3, 4, 5])
>>> A & B # Пресек
set([3, 4])
>>> A - B # A разлика B
set([1, 2])
>>> A ^ B # Симетрична разлика
set([1, 2, 5])

Rečnici[uredi]

Rečnici mogu da se zamisle kao skupovi parova ključ:vrednost. Ključ u jednom rečniku je jedinstven.

>>> телефонски_именик = {'Пера':12345, 'Мика':33456}
>>> телефонски_именик['Цокула'] = 45678
>>> телефонски_именик
{'Пера': 12345, 'Цокула': 45678, 'Мика': 33456}
>>> телефонски_именик.keys() # Излистај све кључеве у именику
['Пера', 'Цокула', 'Мика']
>>> del телефонски_именик['Мика'] # Наљутио сам се на Мику
>>> телефонски_именик
{'Пера': 12345, 'Цокула': 45678}
>>> 'Пера' in телефонски_именик
True
>>> 'Мика' in телефонски_именик
False

Ugrađeni metod keys() je upotrebljen za ispis svih ključeva u rečniku (u telefonskom imeniku). Ključ u rečniku može da bude bilo kog nepromenljivog tipa.

U nekim drugim programskim jezicima za rečnike se koristi naziv asocijativni nizovi.

Kontrolne strukture[uredi]

if iskaz[uredi]

U najjednostavnijem obliku if iskaza izračunava se izraz koji mora da rezultuje jednom Bulovom vrednošću (True ili False). Ako je izračunata vrednost True izršiće se blok iskaza iza dvotačke.

Blok iskaza koji pripada if iskazu označava se pisanjem ispod i uvlačenjem u odnosu na rezervisanu reč if udesno. Ovo označavanje bloka iskaza uvlačenjem koristi se kod svih kontrolnih struktura.

>>> b = 'Popokatepetl'
>>> if b != 'Popokatepetl':
· · · · print('Hoću u Meksiko!')
· · · · print('Drugi red bloka naredbi')
· · · · print('treći red koji se takođe izvrsava ako je uslov tačan')

Postoji forma if iskaza koja sadrži else deo. Blok naredbi koji odgovara else rezervisanoj reči izvršava se jedino ako je uslov rezultovao False vrednošću.

>>> a = 12
>>> if a < 0:
· · · · print('a je negativno')
· · else:
· · · · print('a je nenegativno')

a je nenegativno

Ako želimo da izvršimo detaljnije ispitivanje neke vrednosti možemo da upotrebimo iskaz koji sadrži rezervisanu reč elif. Iza ove reči nalazi se uslov koji se testira i odgovarajući blok naredbi koji se izvršava ako je uslov zadovoljen.

>>> if a < 0:
· · · · print('a ima negativnu vrednost')
· · elif a == 0:
· · · · print('a sadrzi nulu')
· · elif a == 12:
· · · · print('a sadrži broj dvanaest')
· · else:
· · · · print('nesto četvrto')

a sadrži broj dvanaest

Programski jezik Pajton ne sadrži kontrolnu strukturu switch-case. Umesto nje se koristi iskaz if ... elif ... elif ... else. elif blok može da se ponovi proizvoljan broj puta.

for iskaz[uredi]

for iskaz Pajton jezika se delimično razlikuje od istoimene kontrolne strukture u paskalskim jezicima. Ovaj iskaz se koristi za prolaz kroz jedan niz vrednosti, na primer listu ili nisku. Pridruženi blok naredbi izvršava se jedanput za svaki element niza.

>>> другари = ['Пера', 'Мика', 'Цокула']
>>> for члан in другари:
· · · · print('друг', члан)
   
друг Пера
друг Мика
друг Цокула

Za generisanje nizova brojeva može da posluži Pajtonova range() funkcija. Ona vraća listu brojeva koja predstavlja aritmetičku progresiju između dva broja.

>>> range(12)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
>>> range(5, 15)
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> range(1, 20, 2) # Svi brojevi od 1 do 19 korak 2
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

Hoću da ispišem kvadrate prirodnih brojeva do sto:

>>> for i in range(1, 101):
· · · · print(i**2, end = ' ')
1 4 9 16 25 36 49 64 81 100 121 144 169 196 225 256 289 324 361 400 441 484 529 576 625 676 729
784 841 900 961 1024 1089 1156 1225 1296 1369 1444 1521 1600 1681 1764 1849 1936 2025 2116 2209
2304 2401 2500 2601 2704 2809 2916 3025 3136 3249 3364 3481 3600 3721 3844 3969 4096 4225 4356
4489 4624 4761 4900 5041 5184 5329 5476 5625 5776 5929 6084 6241 6400 6561 6724 6889 7056 7225
7396 7569 7744 7921 8100 8281 8464 8649 8836 9025 9216 9409 9604 9801 10000

while iskaz[uredi]

Blok naredbi se izvršava sve dok je kontrolni izraz tačan (True).

Izračunavam 5! odnosno proizvod brojeva od 1 do 5:

>>> fakt = 1
>>> i = 5
>>> while i != 0:
· · · · fakt = fakt*i
· · · · i -= 1
   
>>> fakt
120

Funkcije[uredi]

Definicija funkcije počinje rezervisanom reči def iza koje u zagradama sledi lista formalnih parametara. Sve promenljive navedene u definiciji funkcije su lokalne, osim ako se direktno ne navede drugačije (upotrebom iskaza global). Funkcija vraća vrednost pomoću iskaza return. Ukoliko takav ne postoji radi se o proceduri.

Sledi definicija funkcije koja za dati prirodni broj izračunava njegov faktorijel:

>>> def факторијел(аргумент):
· · · · резултат = 1
· · · · for чинилац in range(1, аргумент + 1):
· · · · · · резултат *= чинилац
· · · · return резултат

>>> факторијел(5)
120
>>> факторијел(50)
30414093201713378043612608166064768844377641568960512000000000000L

Podržane su rekurzivne definicije funkcija.

Funkcija koja vraća faktorijel datog broja definisana je na rekurzivan način u skupu nenegativnih celih brojeva:

>>> def f(n):
· · · · if n == 0:
· · · · · · return 1
· · · · else:
· · · · · · return n*f(n - 1)
   
>>> f(5)
120
>>> f(50)
30414093201713378043612608166064768844377641568960512000000000000L

Moduli[uredi]

Ako interpretator stane sa radom sve definicije koje su kreirane u interaktivnom modu biće izgubljene. Da bi ih sačuvali možemo naše definicije funkcija i promenljivih da smestimo u jednu ili više datoteka. Za to možemo da upotrebimo tekst editor. Takve datoteke se zovu moduli.

Potom definicije iz tako kreiranih modula možemo da uvezemo i koristimo bilo u interaktivnom modu ili u nekom drugom modulu. Kreiranje dužih programa sastoji se obično iz pisanja modula koji mogu da budu grupisani u pakete (packages).

Evo jednog jednostavnog modula koji kreiram kao datoteku u trenutnom direktorijumu sa nazivom mm.py koja sadrži sledeći tekst:

nula = 0
jedan = 1

def uvecaj(x, korak = 1):
    return x + korak

def umanji(x, korak = 1):
    return x - korak

Sada mogu da uvezem ovaj modul u interaktivnom modu:

>>> import mm

Posle uvoza koristim definicije na sledeći način:

>>> mm.jedan
1
>>> mm.nula
0
>>> mm.uvecaj(10)
11
>>> mm.umanji(mm.nula)
-1
>>> mm.uvecaj(10, 5)
15

Moguć je i direktan uvoz pojedinih imena definicija, ili svih imena odjednom kao u sledećem primeru:

>>> from mm import *
>>> umanji(34, 7)
27
>>> uvecaj(nula)
1

Standardni moduli[uredi]

Standardni moduli u velikoj meri proširuju mogućnosti jezika.

Kao primer uvozim standardni matematički modul. Funkcija dir() vraća listu svih imena definisanih u modulu.

>>> import math
>>> dir(math)
['__doc__', '__name__', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor',
'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
>>> print(math.__doc__)
This module is always available. It provides access to the
mathematical functions defined by the C standard.
>>> math.pi
3.1415926535897931
>>> math.sin(math.pi/2)
1.0
>>> from math import sin, pi
>>> sin(pi/2)
1.0

Klase[uredi]

Definicija klase u svom najjednostavnijem obliku izgleda ovako:

class ИмеКласе:
     исказ_1
     исказ_2
     исказ_3
     ...
     исказ_n

Iskazi u definiciji klase su obično definicije funkcija, ali dozvoljeni su i drugi iskazi.

Evo jednog jednostavnog primera:

class ProbnaKlasa:
    "Ovo je jedna probna klasa."
    podatak = 12
    def f(self):
        print('Ovo je metod klase')

Ovako kreirana definicija mora da se izvrši da bi klasa mogla da se koristi. Po izvršenju, ako sve prođe u redu, formira se objekat tipa klase.

Pojedinačni primerci klase kreiraju se upotrebom funkcijske notacije. Na primer:

>>> x = ProbnaKlasa()

Sada je kreiran primerak klase ProbnaKlasa i smešten u promenljivu x. Ovaj primerak možemo da koristimo na sledeći način:

>>> x.__doc__
'Ovo je jedna probna klasa.'
>>> x.f()
Ovo je metod klase
>>> x.podatak
12

Često se očekuje da primerak klase bude inicijalizovan pre njegove upotrebe. Ovo možemo da uradimo definišući metod __init__() unutar klase.

class Tačka:
    def __init__(self, x, y):
        self.x = x
        self.y = y

Ovako definisanu klasu i njene primerke možemo da koristimo na sledeći način:

>>> a = Tačka(3, 5)
>>> a.x
3
>>> a.y
5

Nasleđivanje[uredi]

Svaka klasa može da nasledi jednu ili više drugih klasa. Definicija takve klase može da izgleda ovako:

class ИмеКласе(ОсновнаКласа1, ОсновнаКласа2, ОсновнаКласа3, ...):
     исказ_1
     исказ_2
     исказ_3
     ...
     исказ_n

U zagradi navedena ОсновнаКласа1, ОсновнаКласа2, ОсновнаКласа3, ... su imena klasa iz kojih je izvedena nova klasa (sa imenom ИмеКласе). Najčešće, nasleđivanje će da se javi u formi jednostrukog nasleđivanja, sa jednom osnovnom klasom. Ukoliko se radi o višestrukom nasleđivanju, pri pristupanju jednom atributu klase, njegovo ime će prvo da bude traženo u osnovnoj klasi ИмеКласе, pa ako ne bude tu nađeno tražiće se u ОсновнаКласа1 i rekurzivno u svim klasama koje ova klasa nasleđuje. Tek ako ne bude tu pronađeno preći će se na ОсновнаКласа2 ...

Primena[uredi]

Internet[uredi]

Programski jezik Pajton stekao je deo svoje popularnosti nudeći efikasna rešenja za Internet. U ove svrhe izgrađene su standardni moduli koji se isporučuju zajeno sa interpretatorom. Na primer, na strani klijenta postoji podrška za FTP, Gopher, POP3, IMAP4, NNTP, SMTP, Telnet protokole. Takođe u okviru standardnih modula, postoje bazična rešenja za izradu HTTP servera...

Slede neke internet tehnologije na bazi jezika Pajton koje su nastale van matične kuće:

Zope[uredi]

Zope (Z Object Publishing Environment)[5] je veb-server i skup alata napisan u Pajton jeziku. Osnovni skript jezik kojim se ovaj server prilagođava specifičnim potrebama je takođe Pajton jezik. Ovo je tehnologija koja omogućava veb-dizajnerima da formiraju veb sajt i aplikacije koje se izvršavaju na strani servera kroz publikovanje hijerarhije Pajton objekata na vebu. Programer može da se usredsredi na pisanje objekata ostavljajući da se Zope brine o HTTP i CGI detaljima.

Plone[uredi]

Плоне лого

Zope je moćno sredstvo, ali ako je potrebno znatno jednostavnije rešenje za kreiranje i održavanje sadržaja veb sajta može da se upotrebi, na primer, Plone[6]. Ovaj sistem za upravljanje sadržajima (CMS) sajta baziran je na Zope tehnologiji i Pajton jeziku.

Jython[uredi]

Jython[7] je implementacija programskog jezika Pajton u Java virtuelnoj mašini. Može da uvozi većinu Java klasa i da se prevodi u Java bajt kod. Ovo omogućava pisanje programa koji se izvršavaju na Java platformi bilo na strani klijenta ili servera.

Pajton kao skriptni jezik[uredi]

Pajton programski jezik je ugrađen kao skriptni jezik u veliki broj softverskih proizvoda. Na primer u oblasti grafike, Gimp je primer rasterskog programa za obradu slika koji koristi Pajton kao skriptni jezik. U oblasti vektorske grafike to je, na primer, Inkskejp...

Obrazovanje[uredi]

Programski jezik Pajton je postao najkorišćeniji programski jezik u obrazovanju na univerzitetskom nivou u SAD.[8] Ovo se posebno odnosi na početne kurseve programiranja. Pajton nije čisto obrazovni programski jezik. Lakoća kojom se uči i koristi, kao i njegova velika praktična primena, doveli su do toga da Pajton preuzme primat od Java programskog jezika na kursevima na kojima se uči programiranje.

rur-ple[uredi]

rur-ple okruženje tokom razvoja programa

rur-ple[9] je razvojno okruženje namenjeno obrazovanju u oblasti programiranja. Učenik/student koristi Pajton programski jezik da bi pokretao robota u jednostavnom virtuelnom svetu.

Uz razvojno okruženje stiže i 48 lekcija koje pomažu da se, na jedan zanimljiv način, uči programiranje.

Ovo razvojno okruženje može da se koristi u obrazovanju dece i odraslih.

Reference[uredi]

Spoljašnje veze[uredi]