Python, мова праграмавання

З пляцоўкі Вікіпедыя
Перайсці да: рух, знайсці
Python
Python logo and wordmark.svg
Клас мовы:

шматпарадыгмавая:
аб'ектна-арыентаваная,
кросплатформавая,
функцыйная

Тып выканання:

інтэрпрэтуемая, кампілюемая ў 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].
  • Зараз лепш, чым ніколі.
  • Хаця ніколі часта лепш, чым "прама зараз".
  • Калі ажыццяўленне цяжка растлумачыць, гэта кепская ідэя.
  • Калі ажыццяўленне лёгка растлумачыць, магчыма, гэта добрая ідэя.
  • Прасторы імён — выдатная рэч! Рабе́м іх пабольш!
"

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

Vista-xmag.png Асноўны артыкул: Гісторыя мовы праграмавання Python

Распрацоўваць мову 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.x и 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 уласцівыя выразны і паслядоўны сінтаксіс, прадуманая модульнасць і пашыральнасць, дзякуючы чаму пітонаўскі зыходны код лёгка чытаць.

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 -*-

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

Зноскі

    • .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)
  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
  11. Index of Python Enhancement Proposals (PEPs)
  12. Python 3.0 Release
  13. 14,0 14,1 Foreword for «Programming Python» (1st ed.)
  14. The Making of Python
  15. 2.3.2. Reserved classes of identifiers. Python documentation (18 октября 2009). Архівавана з першакрыніцы 28 студзеня 2011.
  16. …целостность больших проектов на Python строится на двух вещах: тесты и doc-строка