Python (програмски језик)
Python | |
---|---|
Izgovara se | Pajton |
Model | imperativni, objektno-orijentisani, funkcionalni |
Pojavio se | 20. februar 1991.[1] |
Autor(i) | Gvido van Rosum |
Aktuelna verzija | 3.12.1 |
Datum aktuelne verzije | 7. decembar 2023. |
Operativni sistemi | Windows, macOS, Linux/UNIX, Android[2][3] i nekoliko drugih platformi[4] |
Licenca | Python Software Foundation License |
Veb-sajt | http://www.python.org/ |
Dokumentacija | http://www.python.org/doc/ |
Python (transkr. Pajton) je programski jezik visokog nivoa opšte namene. Podržava, u prvom redu imperativni, objektno-orijentisan i funkcionalni stil programiranja. Sintaksa jezika Python omogućava pisanje veoma preglednih programa. Jezik se brzo i lako uči.[5]
Programi pisani u jeziku Python 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 | uredi izvor]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 | uredi izvor]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.[6]
Nastanak programskog jezika Pajton
[uredi | uredi izvor]Programski jezik Python 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 Python 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)[7].
Svako može da koristi programski jezik Python 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 | uredi izvor]Interpretatori i prevodioci
[uredi | uredi izvor]Programi u jeziku Python 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, Microsoft Windows i Java. Sledi spisak drugih platformi 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 Python 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 | uredi izvor]Za programski jezik Pythonrazvijen 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 | uredi izvor]Ukoliko je potrebno razviti novi modul, to je moguće izvesti u jeziku Python 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 Python i C jezika.
Organizacija podataka
[uredi | uredi izvor]Predstavljanje podataka
[uredi | uredi izvor]Podaci u programskom jeziku Python su predstavljeni objektima (engl. objects). Svaki podatak je predstavljen objektom ili relacijom među objektima. Prevedene funkcije, metode i neki drugi elementi jezika Python takođe su predstavljeni objektima tokom izvršavanja programa.
Promenljive i tip podataka
[uredi | uredi izvor]Tip podatka u programskom jeziku Python 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 | uredi izvor]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 | uredi izvor]Python 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 Python :
- Ovi objekti bivaju kreirani iz numeričkih leksema u izvornom programu, ili kao rezultat 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:
- Celi brojevi (engl. Integers)
- 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.
- Kompleksni brojevi (engl. Complex numbers)
- 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.
- n-torke (engl. Tuples)
- Elementi n-torki su proizvoljni Python 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 Python 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 | uredi izvor]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 Python jezika.
Brojevi
[uredi | uredi izvor]Interpretator jezika može da se koristi za računanje.
Celi brojevi
[uredi | uredi izvor]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 | uredi izvor]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 | uredi izvor]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 | uredi izvor]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 | uredi izvor]Niske
[uredi | uredi izvor]Rad sa niskama (engl. Strings) je snažno podržan u Python jeziku. 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 | uredi izvor]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 | uredi izvor]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 | uredi izvor]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 | uredi izvor]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 | uredi izvor]if
iskaz
[uredi | uredi izvor]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
izvrš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 izvršava 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 Python 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 | uredi izvor]for
iskaz Python 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 | uredi izvor]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 | uredi izvor]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 | uredi izvor]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 | uredi izvor]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 | uredi izvor]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 prave 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
Konstruktor
[uredi | uredi izvor]Konstruktor u Pajtonu kao i u sličnim programskim jezicima, objektno orijentisanog tipa, predstavljaju posebne metode koja se poziva prilikom inicijalizacije objekta.
Konstruktor se u Pajtonu predstavlja metodom __init__():
def __init__(self):
prethodni konstruktor predstavlja takozvani prazan konstruktor. Moramo navesti da se konstruktor poziva kao prva metoda prilikom kreiranja objekta.
Č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 | uredi izvor]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 | uredi izvor]Internet
[uredi | uredi izvor]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 zajedno 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 | uredi izvor]Zope (Z Object Publishing Environment)[8] 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 | uredi izvor]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[9]. Ovaj sistem za upravljanje sadržajima (CMS) sajta baziran je na Zope tehnologiji i Pajton jeziku.
Jython
[uredi | uredi izvor]Jython[10] 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 | uredi izvor]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 | uredi izvor]Programski jezik Pajton je postao najkorišćeniji programski jezik u obrazovanju na univerzitetskom nivou u SAD.[11] 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 | uredi izvor]rur-ple[12] 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 | uredi izvor]- ^ „Python 0.9.1 part 01/21”. alt.sources archives. Arhivirano iz originala 11. 8. 2021. g. Pristupljeno 2021-08-11.
- ^ „test – Regression tests package for Python – Python 3.7.13 documentation”. docs.python.org. Arhivirano iz originala 17. 5. 2022. g. Pristupljeno 2022-05-17.
- ^ „platform – Access to underlying platform's identifying data – Python 3.10.4 documentation”. docs.python.org. Arhivirano iz originala 17. 5. 2022. g. Pristupljeno 2022-05-17.
- ^ „Download Python for Other Platforms”. Python.org (na jeziku: engleski). Pristupljeno 2023-08-18.
- ^ „The Python Tutorial — Python 3.7.0 documentation”. Pristupljeno 23. 9. 2018.
- ^ „1. Whetting Your Appetite — Python 3.7.0 documentation”. docs.python.org. Pristupljeno 23. 09. 2018.
- ^ „Python Software Foundation”. Pristupljeno 23. 4. 2013.
- ^ „Start — Zope.org”. Pristupljeno 23. 4. 2013.
- ^ Plone CMS: Open Source Content Management
- ^ „The Jython Project”. Pristupljeno 23. 4. 2013.
- ^ Python bumps off Java as top learning language
- ^ „rur-ple - an environment designed to help you learn computer programming using the language Python - Google Project Hosting”. Pristupljeno 23. 4. 2013.
Spoljašnje veze
[uredi | uredi izvor]- Zvanični veb-sajt
- Python Software Foundation Sajt neprofitne organizacije koja razvija Pajton jezik
- Dokumentacija Dokumentacija na zvaničnom sajtu
- rur-ple Razvojno okruženje, pomoćno sredstvo u učenju programiranja upotrebom Pajton programskog jezika
- Learning to Program Knjiga o Pajton programskom jeziku za one koji se prvi put susreću sa programiranjem
- A Byte of Python Arhivirano na sajtu Wayback Machine (22. novembar 2016) Knjiga o Pajton programskom jeziku za one koji su na početnom nivou u programiranju
- Think Python Knjiga namenjena uvodu u programiranje upotrebom Pajton programskog jezika
- How to Think Like a Computer Scientist Knjiga namenjena uvodu u programiranje upotrebom Pajton programskog jezika, iz koje je nastala knjiga Think Python. Interaktivna verzija
- Dive Into Python Knjiga o Pajton programskom jeziku na naprednom nivou
- Thinking in Python Design Patterns and Problem-Solving Techniques Knjiga na naprednom nivou