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пітон; ва ўсходнеславянскіх мовах пашырана назва піто́н[4])[5]высокаўзроўневая мова праграмавання агульнага прызначэння, скіраваная на павышэнне прадукцыйнасці распрацоўшчыка і чытальнасці кода. Сінтаксіс ядра Python мінімалістычны. Пры гэтым стандартная бібліятэка ўключае вялікую колькасць карысных функцый.

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

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

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

Распрацоўшчыкі мовы Python прытрымліваюцца пэўнай філасофіі праграмавання, якая называецца «The Zen of Python» («Дзэн Пітона»)[8]. Яе тэкст выдаецца інтэрпрэтатарам Пітона па камандзе import this (працуе толькі раз за сесію). Аўтарам гэтай філасофіі лічыцца Цім Пэйтэрс.

Тэкст філасофіі:

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

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

Python Powered

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

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

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

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

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

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

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

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

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

Python 3. The standard type hierarchy.png

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

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

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

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

  • умоўны аператар if (калі). Альтэрнатыўны блок пасля else (іначай). Калі ўмоў і альтэрнатыў некалькі, можна выкарыстоўваць ключавое слова elif (скарачэнне ад else if).
  • аператары цыкла while (пакуль) і for (для). Унутры цыкла можна выкарыстоўваць ключавыя словы break (каб выйсці з цыкла, спыніўшы яго выкананне) і continue (каб адразу перайсці да наступнай ітэрацыі).
  • аператар азначэння класа class.
  • аператар азначэння функцыі, метаду або генератара def. Каб вярнуцца з функцыі або метаду ўжываецца аператар return (вяртанне), а ў выпадку генератара — yield (даваць вынік).
  • аператар апрацоўкі выключэнняў tryexceptelse або tryfinally (пачынаючы з версіі 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) і непажадана пераазначаць убудаваныя імёны. Імёны, якія пачынаюцца з сімвала падкрэслівання, маюць адмысловае прызначэнне[16].

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

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

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

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

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

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

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

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

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

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

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

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

Зноскі

    • .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. PEP 20 — The Zen of Python
  8. Жартаўлівы намёк на нацыянальнасць Гвіда
  9. The Making of Python
  10. http://svn.python.org/view/*checkout*/python/trunk/Misc/HISTORY Архівавана 17 лютага 2016.
  11. Index of Python Enhancement Proposals (PEPs)
  12. Python 3.0 Release
  13. а б Foreword for «Programming Python» (1st ed.)
  14. The Making of Python
  15. 2.3.2. Reserved classes of identifiers (недаступная спасылка). Python documentation (18 октября 2009). Архівавана з першакрыніцы 27 студзеня 2011. Праверана 18 мая 2013.
  16. …целостность больших проектов на Python строится на двух вещах: тесты и doc-строка
  17. TIOBE Index. TIOBE - The Software Quality Company. Архівавана з першакрыніцы 12 кастрычніка 2021.
  18. Difference between Python and C++. Праверана 24 мая 2022.