Python (мова праграмавання)

З Вікіпедыі, свабоднай энцыклапедыі
Python
Выява лагатыпа
Клас мовы шматпарадыгмавая:
аб'ектна-арыентаваная,
кросплатформавая,
функцыйная
Тып выканання інтэрпрэтуемая, кампілюемая ў MSIL, кампілюемая ў байт-код Java
З’явілася ў 1991
Аўтар(ы) Гвіда ван Росум
Пашырэнне файлаў .py, .pyw, .pyc, .pyo, .pyd[1]
Рэліз 2.7.3, 3.3.0 (10 красавіка 2012[2], 29 верасня 2012[3])
Тыпізацыя даных строгая, дынамічная
Асноўныя рэалізацыі CPython, Jython, IronPython, PyPy, Stackless
Дыялекты Cython, RPython, Stackless Python
Зведала ўплыў ABC, Modula-3, Lisp, Tcl Smalltalk, C, Java, Icon
Паўплывала на Ruby, Boo, Groovy, ECMAScript, CoffeeScript
Ліцэнзія PSFL
Сайт www.python.org

Python (англ.: python — Па́йтан[ru]; ва ўсходнеславянскіх мовах пашырана назва піто́н[4])[5] — высокаўзроўневая мова праграмавання агульнага прызначэння, скіраваная на павышэнне прадукцыйнасці распрацоўшчыка і чытальнасці кода. Сінтаксіс ядра Python мінімалістычны. Пры гэтым стандартная бібліятэка ўключае вялікую колькасць карысных функцый.

Узорнай рэалізацыяй мовы Python ёсць інтэрпрэтатар CPython, які падтрымлівае большасць пашыраных платформ[6]. Ён распаўсюджваецца пад свабоднай ліцэнзіяй Python Software Foundation License, якая дазваляе выкарыстоўваць яго без абмежаванняў у любых праграмах, у тым ліку і ва ўласніцкіх[7]. Існуюць рэалізацыі інтэрпрэтатараў для JVM (з магчымасцю кампіляцыі), MSIL (з магчымасцю кампіляцыі), LLVM і іншых. Праект PyPy прапануе рэалізацыю Пітона на самім Пітоне, што памяншае затраты на змяненне мовы і даследаванне новых магчымасцей.

Python актыўна развіваецца, новыя версіі (з новымі або змененымі моўнымі ўласцівасцямі) выходзяць прыкладна раз у два з паловай гады. З гэтае і некаторых іншых прычын на Python адсутнічаюць стандарт ANSI, ISO і іншыя афіцыйныя стандарты, іх ролю выконвае CPython.

Такія вэб-фрэймворкі, як Django, Pylons[en], Pyramid[8], TurboGears[9], web2py[10], Tornado[11], Flask, FastAPI і Zope[ru], дапамагаюць распрацоўнікам у стварэнні і суправаджэнні складаных праграм.

Філасофія мовы[правіць | правіць зыходнік]

Распрацоўшчыкі мовы «Пайтан» — трымаюцца пэўнай філасофіі праграмавання, называнай «дзэнам Пайтана[en]» (англ.: The Zen of Python)[12]. Аўтарам лічаць Ціма Пэйтэрса (англ.: Tim Peters).

Яе тэкст — выдаецца інтэрпрэтатарам Пайтана[13] на загад import this (працуе толькі раз за сесію):

"
  • Прыгожае — лепш за нязграбнае.
  • Яўнае — лепш за няяўнае.
  • Простае — лепш за складанае.
  • Складанае — лепш за мудрагелістае.
  • Плоскае — лепш за ўкладзенае.
  • Рэдкае — лепш за шчыльнае…
  • Чытальнасць — мае значэнне.
  • Асобыя выпадкі — не такія асобыя, каб парушаць правілы.
  • Хаця практычнасць — важнейшая за беззаганнасць…
  • Памылкі — ніколі не павінны праходзіць моўчкі.
  • Калі яны не замоўчаны яўна…
  • Сустрэўшы неадназначнасць — адкінь спакусу здагадацца!
  • Павінен быць адзін — (і пажадана – толькі адзін) — *відавочны* спосаб зрабіць гэта!
  • Хаця, гэты спосаб можа спачатку не быць відавочным — калі Вы не галандзец! [14]
  • Зараз — лепш за ніколі.
  • Хаця ніколі — часта лепш за «проста зараз»…
  • Калі ажыццяўленне *цяжка* растлумачыць — гэта — *кепская* ідэя.
  • Калі ажыццяўленне *лёгка* растлумачыць — магчыма, гэта — *добрая* ідэя! …
  • Прасторы імён — выдатная рэч! … Рабе́м іх пабольш!
"

Гісторыя[правіць | правіць зыходнік]

Python Powered

Распрацоўваць мову Python пачаў у канцы 1980-х гадоў[15] супрацоўнік нідэрландскага інстытута CWI Гвіда ван Росум. Для размеркаванай АС Amoeba была патрэбна пашыраемая скрыптавая мова, і ван Росум ў вольны час пачаў пісаць Python, пазычыўшы некаторыя напрацоўкі для мовы ABC (ван Росум ўдзельнічаў у распрацоўцы гэтай мовы, скіраванай на навучанне праграмаванню). У лютым 1991 года ён апублікаваў зыходны тэкст у групе навін alt.sources[16]. З самага пачатку Python распрацоўвалася як аб’ектна-арыентаваная мова.

Назва мовы паходзіць зусім не ад віду паўзуноў. Аўтар назваў мову па папулярнай брытанскай камедыйнай тэлепраграме 1970-х гадоў «Лятучы цырк Монці Пайтана». Зрэшты, усё роўна назву мовы часцей спалучаюць менавіта са змяёй, а не з тэлеперадачай — на піктаграмах файлаў у KDE і ў Microsoft Windows і нават на эмблеме на сайце python.org (да выхаду версіі 2.5) адлюстраваны змяіныя галовы.

Наяўнасць добразычлівай супольнасці разам з дызайнерскай інтуіцыяй ван Росума лічацца аднымі з галоўных чыннікаў поспеху мовы Python. Развіццё мовы ідзе згодна з дакладна акрэсленым працэсам стварэння, абмеркавання, адбору і зацверджання дакументаў PEP (англ.: Python Enhancement Proposal) — прапаноў па развіццю мовы Python[17].

3 снежня 2008 года[18], пасля працяглага тэсціравання, выйшла першая версія Python 3000 (або Python 3.0, таксама ўжываецца скарачэнне Py3k). У Python 3000 былі прыбраны многія недахопы архітэктуры, пры гэтым стараліся захаваць як мага большую (але няпоўную) сумяшчальнасць са старымі версіямі мовы Python. На сёння падтрымліваюцца абодва адгалінаванні мовы (Python 3.х і 2.x).

Уплыў іншых моў на Python[правіць | правіць зыходнік]

Мова Python з’явілася адносна позна, і стваралася яна пад уплывам мноства моў праграмавання:

  • ABC — водступы для групоўкі аператараў, высокаўзроўневыя структуры даных (map)[19][20] (Па сутнасці, Python стваралася як спроба выправіць памылкі, дапушчаныя пры распрацоўцы мовы ABC);
  • Modula-3 — пакеты, модулі, выкарыстанне else сумесна з try і except, іменаваныя аргументы функцый (на гэта таксама паўплываў Common Lisp);
  • С, C++ — некаторыя сінтаксічныя пабудовы (як піша сам аўтар, ён выкарыстаў найбольш несупярэчлівыя пабудовы з мовы С, каб не выклікаць непрыязнасць у C-праграмістаў да мовы Python[19]);
  • Smalltalk — аб’ектна-арыентаванае праграмаванне;
  • Lisp — асобныя рысы функцыйнага праграмавання (lambda, map, reduce, filter і іншыя);
  • Fortran — зрэзы масіваў, камплексная арыфметыка;
  • Miranda — спіскавыя выразы;
  • Java — модулі logging, unittest, threading (частка магчымасцей зыходнага модуля не рэалізавана), xml.sax стандартнай бібліятэкі, сумеснае выкарыстанне finally і except пры апрацоўцы выключэнняў, выкарыстанне @ для дэкаратараў;
  • Icon — генератары.

Большасць іншых магчымасцей мовы Python (напрыклад, байт-кампіляцыя зыходнага кода) таксама была рэалізавана раней у іншых мовах.

Сінтаксіс і семантыка[правіць | правіць зыходнік]

Мове Python уласцівыя выразны і паслядоўны сінтаксіс, прадуманая модульнасць і пашыральнасць, дзякуючы чаму пітонаўскі зыходны код лёгка чытаць.

Python мае адну цікавую сінтаксічную асаблівасць: блокі коду выдзяляюцца з дапамогай водступаў (прабелаў або табуляцый), таму ў Пітоне няма т.зв. аператарных дужак begin/end, як у мове Паскаль, ці фігурных дужак, як у Сі. Гэта асаблівасць дазваляе скараціць колькасць радкоў і знакаў у зыходным кодзе і прывучае (калі не сказаць прымушае) да «добрага» стылю праграмавання. С другога боку, паводзіны і нават правільнасць праграмы можа залежаць ад пачатковых прабелаў у тэксце. Некаторыя могуць палічыць такія паводзіны нязручнымі і неінтуітыўнымі. Акрамя таго, гэта стварае пэўныя нязручнасці пры набіранні зыходнага коду глыбока ўкладзеных блокаў, бо прыходзіцца ў кожным новым радку ўводзіць пэўную колькасць прабельных знакаў, якая нарастае разам з глыбінёю ўкладання.

Аператары[правіць | правіць зыходнік]

Набор аператараў даволі звычайны, і нічым асабліва не адрозніваецца ад іншых распаўсюджаных моў праграмавання. Вось некаторыя з іх:

  • умоўны аператар if (калі). Альтэрнатыўны блок пасля else (іначай). Калі ўмоў і альтэрнатыў некалькі, можна выкарыстоўваць ключавое слова elif (скарачэнне ад else if).
  • аператары цыкла while (пакуль) і for (для). Унутры цыкла можна выкарыстоўваць ключавыя словы break (каб выйсці з цыкла, спыніўшы яго выкананне) і continue (каб адразу перайсці да наступнай ітэрацыі).
  • аператар азначэння класа class.
  • аператар азначэння функцыі, метаду або генератара def. Каб вярнуцца з функцыі або метаду ўжываецца аператар return (вяртанне), а ў выпадку генератара — yield (даваць вынік).
  • аператар апрацоўкі выключэнняў try — except — else або try — finally (пачынаючы з версіі 2.5, можна выкарыстоўваць finally, except і else у адным блоку).
  • аператар pass нічога не робіць. Выкарыстоўваецца для пустых блокаў коду і заглушак.

Выразы[правіць | правіць зыходнік]

Выраз ёсць паўнапраўным аператарам у Пітоне. Склад, сінтаксіс, спалучальнасць і прыярытэт аперацый даволі звычайныя для моў праграмавання і накіраваны на скарачэнне ўжывання дужак.

Варта асобна адзначыць аперацыю фарматавання для радкоў (працуе падобна да printf() з мовы Сі), якая выкарыстоўвае той самы сімвал, што і аператар узяцця астачы ад дзялення:

>>> print ("Прывітанне, %s!" % "Свет")
Прывітанне, Свет!

У Пітоне ёсць зручныя ланцужковыя параўнанні. Такія ўмовы ў праграмах — не рэдкасць:

1 <= a < 10 and 1 <= b < 20

Акрамя таго, лагічныя аперацыі (or і and) з’яўляюцца лянівымі: калі для вылічэння значэння аперацыі дастаткова першага аперанда, гэты аперанд і дае вынік (другі аперанд проста не вылічваецца), у адваротным выпадку вылічваецца другі аперанд лагічнай аперацыі. Гэта асноўваецца на ўласцівасцях алгебры логікі: напрыклад, калі адзін аргумент аперацыі «ЦІ» (or) ёсць ісціна, то і вынік гэтай аперацыі ёсць ісціна. У выпадку, калі другі аперанд з’яўляецца складаным выразам, гэта дазваляе скараціць выдаткі на яго вылічэнне. Гэты факт шырока выкарыстоўваўся да версіі 2.5 замест умоўнай канструкцыі:

(a < b) and "менш" or "больш ці роўна"

Убудаваныя тыпы даных, як правіла, маюць асобны сінтаксіс для сваіх літэралаў (запісаных у зыходным кодзе пастаянных):

"радок" + 'радок' """таксама радок""" u"Унікод-радок"
True or False # булевы літэралы
3.14 # лік з плаваючай коскай
012 + 0xA # лікі ў васьмярковай і шаснаццатковай сістэмах злічэння
1 + 2j # камплексны лік
[1, 2, "a"] # спіс
(1, 2, "a") # упарадкаваная тройка (у агульным выпадку n-ка, т.зв. картэж)
{'a': 1, 'b': 'B'} # слоўнік
lambda x: x**2 # безыменная (ананімная) функцыя

Для спісаў (і іншых паслядоўнасцей) у мове Python прапануецца набор аперацый над зрэзамі. Асаблівасцю тут з’яўляецца індэксацыя, якая пачаткоўцу можа здацца дзіўнай, але па меры выкарыстання няцяжка пераканацца ў яе лагічнасці і ўзгодненасці. Індэксы элементаў спіса пачынаюцца з нуля. Запіс зрэзу s[N:M] азначае, што ў зрэз трапляюць усе элементы ад N-га (разам з N-ым) да M-га (за выключэннем самога M-га). У якасці прыкладу можна паглядзець прыклад работы з паслядоўнасцямі.

Імёны[правіць | правіць зыходнік]

Імя (ідэнтыфікатар) можа пачынацца з лацінскай літары любога рэгістра або са знаку падкрэслівання _, пасля чаго ў імені могуць выкарыстоўвацца і лічбы. У якасці імені нельга выкарыстоўваць ключавыя словы (іх пералік можна атрымаць з дапамогай каманд import keyword; print keyword.kwlist) і непажадана пераазначаць убудаваныя імёны. Імёны, якія пачынаюцца з сімвала падкрэслівання, маюць адмысловае прызначэнне[21].

У кожным месцы праграмы інтэрпрэтатар мае доступ к тром прасторам імён (то бок адлюстраванням імён у аб’екты): лакальнаму, глабальнаму і ўбудаванаму.

Абсягі бачнасці імён могуць быць укладзеныя адзін у адзін (унутры азначаемай функцыі відаць імёны з вакольнага блока коду). На практыцы з абсягамі бачнасці і звязваннем імён звязана некалькі правіл «добрага тону», пра якія падрабязней можна даведацца з дакументацыі.

Радкі дакументацыі[правіць | правіць зыходнік]

У Пітоне прапануецца механізм дакументавання кода pydoc. У пачатак кожнага модуля, класа, функцыі ўстаўляецца радок дакументацыі docstring (англ.). Радкі дакументацыі застаюцца ў кодзе на момант выканання, і ў мову ўбудован доступ к дакументацыі[22], што выкарыстоўваецца сучаснымі IDE (напрыклад, Eclipse).

У інтэрактыўным рэжыме можна атрымаць дапамогу, згенераваць гіпертэкставую дакументацыю для цэлага модуля ці нават прымяніць doctest (англ.) для аўтаматычнага тэсціравання модуля.

Указанні (дырэктывы)[правіць | правіць зыходнік]

Пачынаючы з Python 2.3, каб можна было выкарыстоўваць у тэксце праграмы сімвалы, якія не ўваходзяць у набор ASCII, неабходна яўна ўказваць кадзіроўку зыходнага коду ў пачатку модуля, напрыклад:

# -*- coding: utf-8 -*-

Пасля гэтага можна выкарыстоўваць, напрыклад, кірыліцу ва Ўнікод-літэралах (Унікод-радках).

Папулярнасць[правіць | правіць зыходнік]

З 2003 года Python нязменна ўваходзіць у дзесятку самых папулярных моў праграмавання ў індэксе супольнасці праграмавання TIOBE, дзе па стане на кастрычнік 2021 года ён з’яўляецца самай папулярнай мовай (апярэджваючы Java і C).[23]

Эмпірычнае даследаванне паказала, што мовы сцэнарыяў, такія як Python, больш прадуктыўныя, чым звычайныя мовы, такія як C і Java, для праблем праграмавання, звязаных з маніпуляцыяй радкамі і пошукам у слоўніку, і вызначыла, што спажыванне памяці часта было «лепш, чым Java, а не значна горш, чым C або C++».[24]

Зноскі

    • .py — зыходны код.
    • .pyw — зыходны код для выканання праграм с графічным інтэрфейсам у Windows, файлы з такім пашырэннем будуць выкананы без запуску кансолі.
    • .pyc — скампіляваны байт-код.
    • .pyo — аптымізаваны скампіляваны байт-код.
    • .pyd — двайковы код дынамічных бібліятэк DLL (у Windows).
  1. Python 2.7.3 Release
  2. Python 3.3.0 Release
  3. Мария «Mifrill» Нефедова Создатели языков программирования: Они такие разные, но кодинг их объединяет // Хакер № 09/08 (117) Архівавана 2 ліпеня 2013.
  4. Стваральнік мовы Гвіда ван Росум настойвае, што назва паходзіць не ад рэптыліі і не ад міфічнай істоты, а ад тэлеперадачы «Лятучы цырк Монці Пайтана». Гл.: http://docs.python.org/faq/general#why-is-it-called-python, аднак умоўная выява змяі даўно стала неафіцыйным сімвалам мовы і з’яўляецца часткай афіцыйнага лагатыпа.
  5. About Python
  6. Python 2.5 license(недаступная спасылка)
  7. https://trypyramid.com/
  8. https://turbogears.org/
  9. http://web2py.com/
  10. https://www.tornadoweb.org/en/stable/
  11. PEP 20 – The Zen of Python | peps.python.org. peps.python.org. Праверана 17 снежня 2023.
  12. https://www.python.org/shell/
  13. Жартаўлівы намёк на нацыянальнасць аўтара — Гвіда ван Росума.
  14. The Making of Python
  15. http://svn.python.org/view/*checkout*/python/trunk/Misc/HISTORY Архівавана 17 лютага 2016.
  16. Index of Python Enhancement Proposals (PEPs)
  17. Python 3.0 Release
  18. а б Foreword for «Programming Python» (1st ed.)
  19. The Making of Python
  20. 2.3.2. Reserved classes of identifiers(недаступная спасылка). Python documentation (18 октября 2009). Архівавана з першакрыніцы 27 студзеня 2011. Праверана 18 мая 2013.
  21. …целостность больших проектов на Python строится на двух вещах: тесты и doc-строка
  22. TIOBE Index. TIOBE - The Software Quality Company. Архівавана з першакрыніцы 12 кастрычніка 2021. Праверана 13 кастрычніка 2021.
  23. Difference between Python and C++. Праверана 24 мая 2022.