програмен език From Wikipedia, the free encyclopedia
Python е език за програмиране от високо ниво, интерпретативен, интерактивен, обектно ориентиран, създаден от Гуидо ван Росум в началото на 90-те години. Кръстен е на телевизионното шоу на BBC Monty Python’s Flying Circus.[1] Често бива сравняван с Tcl, Perl, Scheme, Java и Ruby.
Python | |
Парадигма | обектно ориентиран, процедурен, функционален |
---|---|
Реализиране през | 20 Февруари 1991 |
Автор | Python Software Foundation |
Типизация на данните | динамична |
Програмни диалекти | Cython, RPython, Stackless Python |
Повлиян от | ABC, Modula-3, Icon, C, Perl, LISP, Smalltalk, Tcl |
Повлиява | Ruby, Boo |
Уебсайт | www.python.org |
Python в Общомедия |
Идеята за Python се заражда в края на 1980-те[2] години, като реалното осъществяване започва през декември 1989 г.[3] от Гуидо ван Росум в CWI (Centrum Wiskunde & Informatica – международно признат изследователски институт по математика и компютърни науки, локализиран в Амстердам, Холандия). Python имал за цел да се превърне в наследник на ABC (език за програмиране, от своя страна вдъхновен от SETL), който да бъде способен да обработва изключения и да е съвместим с операционната система Amoeba.[4] Ван Росум е основният автор на Python, а неговата продължаваща централна роля в развитието на езика е ясно отразена в титлата, дадена му от Python общността – „пожизнен доброжелателен диктатор“ (benevolent dictator for life, BDFL).
Python предлага добра структура и поддръжка за разработка на големи приложения. Той притежава вградени сложни типове данни като гъвкави масиви и речници, за които биха били необходими дни, за да се напишат ефикасно на C.
Python позволява разделянето на една програма на модули, които могат да се използват отново в други програми. Също така притежава голям набор от стандартни модули, които да се използват като основа на програмите. Съществуват и вградени модули, които обезпечават такива събития и елементи като файлов вход/изход (I/O), различни системни функции, сокети (sockets), програмни интерфейси към GUI библиотеки като Tk и др.
Поради факта, че Python е интерпретативен език, се спестява значително време за разработка, тъй като не са необходими компилиране и свързване (linking) за тестването на дадено приложение. Програмната му идеология е сходна с тази на Java и всяко приложение, написано на него, е сравнително лесно преносимо и в други платформи (или операционни системи).
Програмите, написани на Python, са доста компактни и четими, като често те са и по-кратки от своите еквиваленти, написани на C/C++. Това е така, понеже:
Всеки модул на Python се компилира преди изпълнение до код за съответната виртуална машина. Този код се записва за повторна употреба като .pyc файл.
Програмите, написани на Python, представляват съвкупност от файлове с изходен код. При първото си изпълнение този код се компилира до байткод, а при всяко следващо се използва кеширана версия. Байткодът се изпълнява от интерпретатор на Python. Ще отбележим още и следните особености:
Езикът се обновява често. Версия 3 съдържа много промени и поради това е несъвместима с по-старите реализации на езика. Повечето налични библиотеки и програми са написани и работят за версия 2.
Това е изходният код на една примерна програма на Python, която отпечатва на екрана: Hello Python!
#!/usr/bin/python
print('Hello Python!')
Python притежава обичайните аритметични оператори (+
, -
, *
, /
, %
), а **
е допълнителен оператор, който се използва за степенуване, например 5**3 == 125
. Поведението на операцията за деление се променя значително с течение на времето:[5]
/
изпълнява целочислено деление, ако и двата операнда са цели числа, и деление с плаваща запетая в противния случай. Целочисленото деление закръглява към нулата, например 7 / 3 == 2
и -7 / 3 == -2
.7 / 3 == 2
и -7 / 3 == -3
. В тази версия е въведен операторът //
, който извършва деление със закръгляване надолу (към по-ниската целочислена стойност). Неговото поведение може да се подразбере от следните примери: 7 // 3 == 2
, -7 // 3 == -3
, 7.5 // 3 == 2.0
и -7.5 // 3 == -3.0
./
, така че той винаги да изпълнява ролята на деление с плаваща запетая. По-общо: във версиите преди Python 3.0 /
представлява „класическо деление“, докато във версия 3.0 /
е деление на реални числа, а //
е деление със закръгляване надолу (към по-ниската целочислена стойност).Макар и в противовес с повечето други езици, закръгляването надолу (в посока минус безкрайност) придава постоянство на изпълняваните операции. Например това означава, че равенството (a + b) // b == a // b + 1
е винаги вярно. Също така означава, че равенството b * (a // b) + a % b == a
е валидно както за положителните, така и за отрицателните стойности на a
. Въпреки това поддържането на валидността на представеното равенство означава, че докато резултатът от a % b
е в интервала [0, b) при положителна стойност на b
, то при отрицателна стойност на b
трябва да бъде в интервала (b, 0].[6]
Python предлага функция round
за закръгляване на десетични към цели числа. Версиите преди Python 3.0 използват закръгляване далеч от нула: round(0.5)
би дало като резултат 1.0 (закръгляване нагоре), съответно round(-0.5)
връща −1.0 (закръгляване надолу).[7] Python 3.0 използва закръгляване към най-близкото четно число: round(1.5)
връща като резултат 2, съответно round(2.5)
отново е равно на 2.[8]
Python позволява използването на булеви изрази с множество релации на равенство по начин, който е в съответствие със стандартната употреба на равенства в математиката. Например изразът a < b < c
проверява дали a
е по-малко от b
и дали b
е по-малко от c
. Езиците, произхождащи от C, интерпретират този израз по различен начин: първо се пресмята a < b
, връщащо като резултат 0 или 1, след което тази стойност се сравнява с c
.
Поради своята богата математическа библиотека Python често е използван като скриптов език с научна насоченост за решаване на различни задачи от приложната математитка, например обработка и управление на числови данни.
Комплектът се състои от елементи, които могат да бъдат произволни: прости константи или обекти. Елементите на комплекта не е задължително да са еднородни.
Комплектите (подобно на символните низове) са непроменливи: не е възможно да се присвои стойност на даден елемент от комплекта. Възможно е създаването на комплект, който съдържа в себе си променливи обекти – например списък (list).
Комплектите могат да бъдат вложени един в друг. Дефинират се чрез изброяване със запетайка, поставени в кръгли скоби.
(1, 4, 1, 78) (3.14, ‘ string ’, -5)
Всички елементи са индексирани от нулата. За получаването на i-тия елемент трябва да се посочи името на комплекта и след това индексът i в квадратни скоби.
Пример: t = (0, 1, 2, 3, 4) print t[0], t[-1], t[-3] Резултат: 0 4 2
По този начин комплектът може да се нарече вектор – константа, ако елементите му са били еднородни.
Списъците са съставен (compound) тип данни, групиращ стойности (елементи), които сами по себе могат да бъдат от различен тип и могат да бъдат подменени след тяхната декларация. Възможно е присвояване на изрезки, като това може да промени и размера на списъка. Може да се вмъква друг списък в настоящия, да се добавят единични елементи, премахват и т.н.
Дефинира се чрез изброяване на елементите със запетая, поставени между квадратни скоби. Пример: [2, 4.87, ‘s’] [‘string’, (2,4,1), [5,8]] Достъп до елементите се осъществява както и в комплекта. Пример: list = [1, ‘w’, (2,8), [0,3,4]] print list[0], list[1], list[-2], list[-1][0] Резултат: 1 w (2,8) 0
Речникът е неподредено множество от двойки (ключ, стойност), като ключа е константа от всеки тип (най-вече символни низове). Комплекти могат да бъдат използвани за ключове само в случай, че не използват променливи обекти. Не може да се използва списък (list), тъй като той притежава възможността да се променя.
Основните операции са:
Чифт големи скоби „{ }“ създават празен речник. Пример: d = {'a': 1, 'b': 3, 5: 3.14, 'name': 'John'} d['b'] = d[5] print d['a'], d['b'], d[5], d['name'] Резултат: 1 3.14 3.14 John За да добавите нова двойка „ключ“:„стойност“, е достатъчно да присвоите на елемент с нов ключ съответната стойност: d['new'] = 'new value' print d Резултат: {'a':1, 'b':3, 5:3.14, 'name':'John', 'new':'new value'}
Ако от дясната страна стои стойност от тип клас, списък, речник или комплект присвояваме само връзката (указателя) към адреса, където е стойността на обекта, двата обекта сочат към една и съща памет – при промяна на стойността на едната се променя и другата (семантика на указатели).
Пример: a = 5; b = a; b = 3 print ' семантика на копирането: a=', a, 'b=', b a = [2,5]; b = a; b[0] = 7 print ' семантика на указателите: a=', a, 'b=', b Резултат: семантика на копирането: a = 5 b = 3 семантика на указателите: a= [7,5] b= [7,5]
Пример: >>> # x = int(raw_input("Моля, въведете едно число: ")) >>> if x < 0: ... x = 0 ... print ’Отрицателно, сменено на нула’ ... elif x == 0: ... print ’Нула’ ... elif x == 1: ... print ’Едно’ ... else: ... print ’Повече’ ...
if <условие1>: <оператор1> [ elif <условие2>: <оператор2>]* [ else: <оператор3>]
При истина на <условие1>, ще се изпълни <оператор1> и ще се игнорират клоновете elif
и else
. В противен случай, ако е вярно <условие2>, ще се изпълни <оператор2>, а клонът else
ще се игнорира.
Иначе ще се изпълни <operator3>.
Ключовата дума elif
е съкращение от else-if
, може да има няколко elif
части, else
не е задължителна. Поредица от if
– elif
може да замени switch – case
конструкцията, която откриваме и в други езици.
В Python операторът for
итерира върху елементите на каквато и да е редица (напр. символен низ или списък) по реда на елементите в редицата.
Пример: ...list = ['чета', 'статия', 'в УикипедиЯ'] >>> for element in list: ... print element, len(element) ... чета 4 статия 6 в УикипедиЯ 11
Не е безопасно да се променя редица, върху която се итерира в цикъл. Ако трябва да се променя редица, върху която се итерира (например списък), трябва това да се итерира върху негово копие. Конвенцията за изрязване улеснява това частично.
Пример: >>> for element in list[:]: #Прави копие чрез изрязване ... if len(element) > 6: list.insert(0, element) ... >>> list ['в УикипедиЯ', 'чета', 'статия', 'в УикипедиЯ']
while <условие>: <оператор1> [else: <оператор2>]
Цикъл „докато“: <Оператор1> ще се изпълнява, докато е истина <условие>. При нормално завършен цикъл, т.е. без прилагане на break
, ще се изпълни <оператор2>.
Пример: Числа на Фибоначи ... a, b = 0, 1 >>> while b < 10: ... print b ... a, b = b, a+b ... 1 1 2 3 5 8
Ключовата дума def
въвежда дефиниция на функция. Тя трябва да бъде последвана от име и списък от параметри, поставени в скоби. Тялото на функцията започва на следващия ред и трябва да бъде с отстъп. Първият ред оператори може да бъде символен низ (документационен символен низ – docstring), който представлява документацията (описанието) на функцията. Можем да създадем функция, която изписва числата на Фибоначи в произволна граница:
>>> def fib(n): # изписва числата на Фибоначи до n ... „Изписва числата на Фибоначи до n“ ... a, b = 0, 1 ... while b < n: ... print b, ... a, b = b, a+b ... >>> # Сега да извикаме току-що дефинираната функция: ... fib(2000) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
От 2003 г. насам Python се класира в топ 10 на най-популярните езици за програмиране според TIOBE Programming Community Index. От септември 2015 г. той заема пета позиция. Обявен е за език за програмиране на годината през 2007 г. и 2010 г. Това е третият най-популярен език, чийто граматически синтаксис не е базиран предимно на С, както е при С++ и Objective-C. За сведение С# и Java имат само частично сходство на синтаксиса със С, като например използването на къдрави скоби, и са по-близки помежду си отколкото със С.
Практиката доказва, че скриптовите езици като Python са по-продуктивни от конвенционалните такива (C и Java), що се отнася до разрешаването на програмни проблеми като манипулацията на низове и търсене в речник. Количеството използвана памет често е по-малко отколкото при Java и не много повече отколкото при C и C++.
Част от големите организации, които използват Python, са Google, Yahoo!, CERN, NASA, както и някои по-малки като ILM и ITA.
Python може да се използва като скриптов език за уеб приложения, например чрез mod_wsgi за Apache. С уеб сървъра Gateway Interface стандартният приложно-програмен интерфейс се подобрява, за да може да обслужва тези приложения. Софтуерните рамки за уеб приложения като Django, Pylons, Pyramid, TurboGears, web2py, Tornado, Flask, Bottle and Zope помагат на разработчиците при дизайна и поддръжката на по-сложни приложения. Pyjamas и IronPython могат да се използват при програмирането на клиентската страна (Client-side) на приложенията, базирани на Ajax. SQLAlchemy може да се използва при мапване на данни от сходни база данни. Twisted е софтуерна рамка за програмиране на комуникацията между компютрите и се използва от Dropbox.
Библиотеки като NumPy, SciPy и Matplotlib позволяват ефективното използване на Python за научни изчисления. Sage е математически софтуер, който е написан предимно на Python и обхваща много аспекти на математиката, включително алгебра, комбинаторика, теория на числата и др.
Python е внедрен успешно като скриптов език в редица софтуерни продукти, включително в такива, използващи метода на крайните елементи, като Abaqus, FreeCad, програми и инструменти за 3D анимации като 3ds Max, Blender, Cinema 4D, Lightwave, 2D програми за обработка на изображения като GIMP, Inkscape, Scribus and Paint Shop Pro. GNU Debugger (GDB) използва Python за визуализация на сложни структури като С++ контейнери за елементи. ESRI представя Python като най-добрия избор на скриптов език за ArcGIS. Също така се използа във видео игри и е единият от трите възможни езика за програмиране, приети от Google App Engine, другите два са Java и Go.
Като скритпов език с модулна архитектура, прост синтаксис и богат набор инструменти за обработка на текст Python се използва при проекти, свързани с изкуствен интелект и компютърна обработка на човешки език (ОЕЕ).
Python се използва широко и в сферата на информационната сигурност.
По-голямата част от софтуера Sugar за One Laptop per Child XO, който се разработва в Sugar Labs, е написан на Python. Той е главен език за програмиране и в проекта Raspberry Pi, разработващ едноплаткови компютри. LibreOffice включва Python и възнамерява да замени Java с него.
Python Scripting Provider заема възлова позиция след излизането на версия 4.0 на 7 февруари 2013 г.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.