Име програмског језика асоцира назмију питон али, по речима аутора, инспирацију за име је добио везано за „Летећег циркуса Монтија Пајтона“ (енгл.Monty Python's Flying Circus),BBC-еву серију комедија актуелну седамдесетих година.[6]
Програмски језик Python настао је почетком деведесетих година прошлог века. Његов аутор јеГвидо ван Росум. Он је у време настанка језика био запослен уStiching Mathematish Centrum (CWI) уХоландији. Значајан утицај на концепт овог језика, по речима аутора, имао је ауторов рад на креирању програмског језикаABC.
Програмски језик Python постепено стиче велику популарност. У изградњу језика и онога што га окружује укључује се велики број људи, иако Гвидо остаје његов главни аутор. Сва ауторска права за овај програмски језик држи непрофитна организацијаPython Software Foundation (PSF)[7].
Свако може да користи програмски језик Python бесплатно било у комерцијалне или у друге сврхе.
Свако може да постане донаторPython Software Foundation у новцу, или својим доприносом у изградњи језика или у сродним областима.
Програми у језику Python се углавноминтерпретирају. Интерпретатори и стандардне библиотеке модула се стално развијају и преносе на велики број различитих платформи. Главне подржане платформе суЛинукс,BSD,Mac OS X,Microsoft Windows иЈава. Следи списак других платформи које подржавају Пајтон: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 (ранијеAcorn),Sharp Zaurus, SPAR Solaris, Symbian OS, VMS, VxWorks, Windows CE/Pocket PC, Xbox, z/OS ...
Постоје и правипреводиоци, који Python код преводе умашински језик. Они омогућавају да се створе извршни модули независни од интерпретатора, те да се програми извршавају брже. Оно што се губи оваквим превођењем је преносивост овако преведеног програма на различите хардверске и софтверске платформе.
Python долази спреман за рад: „Батерије су укључене“ у испоруку
За програмски језик Pythonразвијен је велики број стандардних модула који омогућавају ефикасан рад у многим областима. Већина ових модула преносива је на различите платформе што омогућава да често комплетни програми без прилагођавања раде на различитим машинама и под различитимоперативним системима.
Стандардна библиотека модула омогућава писање програма везаних за Интернет подржавајући велики број стандардних формата и протокола. Постоје модули за креирањеграфичког корисничког интерфејса, везу карелационим базама података, за аритметику са произвољним жељеним бројем децимала, за рад на лексичкој анализи применомрегуларних израза, као и стандардни модули за многе друге послове.
Уколико је потребно развити нови модул, то је могуће извести у језику Python или у неком другом подржаном језику. Обично је тоC језик, када је потребно системско програмирање или када је брзина извршавања критична. Примери других програмских језика, који се користе у ове сврхе, суЈава или Pyrex језик који представља мешавину програмског језика Python и C језика.
Подаци у програмском језику Python су представљени објектима (енгл.objects). Сваки податак је представљен објектом илирелацијом међу објектима. Преведене функције, методе и неки други елементи језика Python такође су представљени објектима током извршавања програма.
Тип податка у програмском језику Python није везан запроменљиву. Свакој променљивој током извршавања програма може да буде додељена вредност било ког типа као и да та вредност буде замењена другом различитог типа.
Тип податка везан је за вредност коју садржи променљива. Све вредности променљивих су објекти.
Сваки објекат садржи тип објекта и његову вредност. Једном креирани објекат не може да мења тип, док вредност неких објеката може да буде промењена. Променљивост објеката одређена је њиховим типом. Постоје:
Ови објекти бивају креирани из нумеричких лексема у изворном програму, или као резултат аритметичких оператора или функција. Једном креирани, не мењају вредност.
Постоје три врсте бројева. То су цели бројеви, бројеви са покретним зарезом и комплексни бројеви:
Булов тип садржи само две вредности које представљају истиносне вредности тачно и нетачно. У већини ситуација оне се понашају као цели бројеви 0 и 1, осим код конверзије у ниске када се добијају вредности "False" и "True".
Бројеви са покретним зарезом (енгл.Floating point numbers)
На машинском нивоу представљени су бројевима са покретним зарезом у двострукој тачности.
Објекат који по типу спада у непроменљиве низове не може да буде измењен након његовог креирања (али непроменљивост не важи за евентуалне изменљиве објекте чије референце садржи непромењиви низ).
Елементи ниске су знакови. Не постоји посебан знаковни тип података. Појединачни знак је представљен низом од једног знака. Ниске могу да се користе и као низови бајтова и да се искористе, на пример, да би садржали податке учитане из датотеке.
То су коначни скупови објеката индексирани вредностима готово било ког типа. Једини типови објеката који нису прихватљиви као индекси су објекти типа листи или речника или други променљиви типови.
Ово су објекти на које може да се примени позив (извршење) функције:
Функције које дефинишу корисници (енгл.User-defined functions)
За сваку дефинисану функцију, у тренутку извршавања програма, креира се један овакав објекат. Он се позива (извршава) уз листу параметара која треба да садржи исти број параметара као и листа формалних параметара дефиниције функције.
Методе које дефинишу корисници (енгл.User-defined methods)
Овакви објекти повезују класу, примерак класе и било који извршиви тип (обично функцију коју дефинишу корисници).
Основна својства језика описана су кроз низ једноставних примера. Већина примера написана је као да се извршавају у интерактивном моду интерпретатора. Ознаке ">>>" и "· ·" на почетку линије означавају оно што је корисник унео, док је одговор интерпретатора написан без ових уводних знакова. Примери одговарају верзији 3.0 Python језика.
>>>2+35>>>4+8# Komentar počinje iza znaka "# " i završava se na kraju linije12>>>3*2# Množenje6>>>4+3*5# Koristi se u matematici uobičajeni redosled računanja19>>>5*(4+3*(2+1))# Grupisanje operanada se vrši jedino malim (oblim) zagradama65>>>6//2# Celobrojno deljenje3>>>7//2# Ostatak pri celobrojnom deljenju se zanemaruje u rezultatu3
У раду са целим бројевима увек се добија тачан резултат. Ово омогућује прелазак (по потреби) на бројеве произвољне дужине:
Комплетно је подржан рад са бројевима са покретним зарезом. Синтаксно, они се разликују од целих бројева по присуству децималне тачке или евентуално експоненцијалне нотације. Уколико оператор има као операнде целе и бројеве у покретном зарезу, врши се претварање свих операнада у облик са покретним зарезом.
>>>7.0/23.5>>>1e1/4# Deset (jedan puta deset na prvi stepen) podeljeno na četiri dela2.5>>>5*3.25/2.56.5
Подржани су икомплексни бројеви. Имагинарни део комплексног броја се означава суфиксом "j" или "J". Комплексни бројеви чији је реални део различит од нуле пишу се у облим заградама.
Рад санискама (енгл.Strings) је снажно подржан у Python језику. Ниске садрже низове знакова и нису изменљиве.
Ево неколико начина да се креира ниска:
>>>'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)Perajerekao"Ja volim da programiram".
Ниске могу да се повежу употребом оператора "+" и да се понове више пута помоћу оператора "* ":
Деловима ниске може да се приступи путем индекса. Почетни индекс је нула.
>>>реч='Престолонаследниковица'>>>реч[0]'П'>>>len(реч)# Враћа дужину ниске22>>>реч[21]# Враћа последњи знак ове ниске у облику ниске дужине један'а'>>>реч[3:6]# Део ниске од позиције 3 до, али не укључујући, позиције 6'сто'>>>реч[:6]# Првих шест знакова'Престо'>>>реч[8:]# Све осим првих осам знакова'наследниковица'
Подржане су и ниске које садржеуникодни скуп знакова.
Листе омогућавају да се више објеката истог или различитог типа повежу у једну целину. Представљају се као списак објеката раздвојених запетом у угластим заградама.
N-торке су тип података сличан листама, али нису изменљиве. Добијају се навођењем елемената раздвојених запетом.
>>>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'
Скупови су окупљајући тип података у коме није дефинисан редослед елемената и не постоје дупликати. Обично се користе за испитивање припадности неког елемента скупу као и за елиминисање дупликата. Имплементиране су и математичке операције као што су унија, пресек, разлика и симетрична разлика скупова.
>>>терариј=['шарка','поскок','шарка','шарка','поскок']>>>отровнице=set(терариј)# Формирам скуп уклањајући дупликате>>>отровницеset(['поскок','шарка'])>>>'поскок'inотровницеTrue>>>'белоушка'inотровницеFalse
Скуповне операције:
>>>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 разлика Bset([1,2])>>>A^B# Симетрична разликаset([1,2,5])
Речници могу да се замисле као скупови парова кључ:вредност. Кључ у једном речнику је јединствен.
>>>телефонски_именик={'Пера':12345,'Мика':33456}>>>телефонски_именик['Цокула']=45678>>>телефонски_именик{'Пера':12345,'Цокула':45678,'Мика':33456}>>>телефонски_именик.keys()# Излистај све кључеве у именику['Пера','Цокула','Мика']>>>delтелефонски_именик['Мика']# Наљутио сам се на Мику>>>телефонски_именик{'Пера':12345,'Цокула':45678}>>>'Пера'inтелефонски_именикTrue>>>'Мика'inтелефонски_именикFalse
Уграђени методkeys() је употребљен за испис свих кључева у речнику (у телефонском именику). Кључ у речнику може да буде било ког непроменљивог типа.
У неким другим програмским језицима за речнике се користи називасоцијативни низови.
У најједноставнијем обликуif исказа израчунава се израз који мора да резултује једном Буловом вредношћу (True илиFalse). Ако је израчуната вредностTrue извршиће се блок исказа иза двотачке.
Блок исказа који припадаif исказу означава се писањем испод и увлачењем у односу на резервисану речif удесно. Ово означавање блока исказа увлачењем користи се код свих контролних структура.
>>>b='Popokatepetl'>>>ifb!='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')
Постоји формаif исказа која садржиelse део. Блок наредби који одговараelse резервисаној речи извршава се једино ако је услов резултоваоFalse вредношћу.
>>>a=12>>>ifa<0:····print('a je negativno')··else:····print('a je nenegativno')ajenenegativno
Ако желимо да извршимо детаљније испитивање неке вредности можемо да употребимо исказ који садржи резервисану речelif. Иза ове речи налази се услов који се тестира и одговарајући блок наредби који се извршава ако је услов задовољен.
>>>ifa<0:····print('a ima negativnu vrednost')··elifa==0:····print('a sadrzi nulu')··elifa==12:····print('a sadrži broj dvanaest')··else:····print('nesto četvrto')asadržibrojdvanaest
Програмски језик Python не садржи контролну структуруswitch-case. Уместо ње се користи исказif ... elif ... elif ... else.elif блок може да се понови произвољан број пута.
for исказ Python језика се делимично разликује од истоимене контролне структуре у паскалским језицима. Овај исказ се користи за пролаз кроз један низ вредности, на пример листу или ниску. Придружени блок наредби извршава се једанпут за сваки елемент низа.
За генерисање низова бројева може да послужи Пајтоноваrange() функција. Она враћа листу бројева која представља аритметичку прогресију између два броја.
>>>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]
Хоћу да испишем квадрате природних бројева до сто:
Дефиниција функције почиње резервисаном речиdef иза које у заградама следи листа формалних параметара. Све променљиве наведене у дефиницији функције су локалне, осим ако се директно не наведе другачије (употребом исказаglobal). Функција враћа вредност помоћу исказаreturn. Уколико такав не постоји ради се о процедури.
Следи дефиниција функције која за дати природни број израчунава његовфакторијел:
Ако интерпретатор стане са радом све дефиниције које су креиране у интерактивном моду биће изгубљене. Да би их сачували можемо наше дефиниције функција и променљивих да сместимо у једну или више датотека. За то можемо да употребимо текст едитор. Такве датотеке се зову модули.
Потом дефиниције из тако креираних модула можемо да увеземо и користимо било у интерактивном моду или у неком другом модулу. Креирање дужих програма састоји се обично из писања модула који могу да буду груписани у пакете (packages).
Ево једног једноставног модула који креирам као датотеку у тренутном директоријуму са називомmm.py која садржи следећи текст:
Конструктор у Пајтону као и у сличним програмским језицима, објектно оријентисаног типа, представљају посебне методе која се позива приликом иницијализације објекта.
Конструктор се у Пајтону представља методом __init__():
def __init__(self):
претходни конструктор представља такозвани празан конструктор. Морамо навести да се конструктор позива као прва метода приликом креирања објекта.
Често се очекује да примерак класе буде иницијализован пре његове употребе. Ово можемо да урадимо дефинишући метод__init__() унутар класе.
classTačka:def__init__(self,x,y):self.x=xself.y=y
Овако дефинисану класу и њене примерке можемо да користимо на следећи начин:
У загради наведенаОсновнаКласа1, ОсновнаКласа2, ОсновнаКласа3, ... су имена класа из којих је изведена нова класа (са именомИмеКласе). Најчешће, наслеђивање ће да се јави у форми једноструког наслеђивања, са једном основном класом. Уколико се ради о вишеструком наслеђивању, при приступању једном атрибуту класе, његово име ће прво да буде тражено у основној класиИмеКласе, па ако не буде ту нађено тражиће се уОсновнаКласа1 и рекурзивно у свим класама које ова класа наслеђује. Тек ако не буде ту пронађено прећи ће се наОсновнаКласа2 ...
Програмски језик Пајтон стекао је део своје популарности нудећи ефикасна решења заИнтернет. У ове сврхе изграђене су стандардни модули који се испоручују заједно са интерпретатором. На пример, на страни клијента постоји подршка заFTP,Gopher,POP3,IMAP4,NNTP,SMTP,Telnet протоколе. Такође у оквиру стандардних модула, постоје базична решења за израдуHTTP сервера...
Следе неке интернет технологије на бази језика Пајтон које су настале ван матичне куће:
Zope (Z Object Publishing Environment)[8] јевеб-сервер и скуп алата написан у Пајтон језику. Основни скрипт језик којим се овај сервер прилагођава специфичним потребама је такође Пајтон језик. Ово је технологија која омогућава веб-дизајнерима да формирајувеб сајт и апликације које се извршавају на страни сервера кроз публиковање хијерархије Пајтон објеката навебу. Програмер може да се усредсреди на писање објеката остављајући да сеZope брине оHTTP иCGI детаљима.
Zope је моћно средство, али ако је потребно знатно једноставније решење за креирање и одржавање садржајавеб сајта може да се употреби, на пример,Plone[9]. Овајсистем за управљање садржајима (CMS) сајта базиран је наZope технологији и Пајтон језику.
Jython[10] је имплементација програмског језика Пајтон уЈава виртуелној машини. Може да увози већину Јава класа и да се преводи уЈава бајт код. Ово омогућава писање програма који се извршавају на Јава платформи било на страни клијента илисервера.
Пајтон програмски језик је уграђен каоскриптни језик у велики број софтверских производа. На пример у области графике,Гимп је пример растерског програма за обраду слика који користи Пајтон као скриптни језик. У области векторске графике то је, на пример,Инкскејп...
Програмски језик Пајтон је постао најкоришћенији програмски језик у образовању на универзитетском нивоу уСАД.[11] Ово се посебно односи на почетне курсеве програмирања. Пајтон није чистообразовни програмски језик. Лакоћа којом се учи и користи, као и његова велика практична примена, довели су до тога да Пајтон преузме примат одЈава програмског језика на курсевима на којима се учи програмирање.
rur-ple[12] је развојно окружење намењенообразовању у областипрограмирања. Ученик/студент користи Пајтон програмски језик да би покретаоробота у једноставном виртуелном свету.
Уз развојно окружење стиже и 48 лекција које помажу да се, на један занимљив начин, учи програмирање.
Ово развојно окружење може да се користи у образовањудеце иодраслих.
Think Python Књига намењена уводу у програмирање употребом Пајтон програмског језика
How to Think Like a Computer Scientist Књига намењена уводу у програмирање употребом Пајтон програмског језика, из које је настала књигаThink Python. Интерактивна верзија
Dive Into Python Књига о Пајтон програмском језику на напредном нивоу