**Python** (անգլ.՝ python, արտասանվում է որպես [ˈpaɪθ⟨ə⟩n] (*փայթըն*), սակայն հաճախ օգտագործվում է նաև *պիտոն (ռուսերենից եկած)* տարբերակը, որը նշանակում է կենդանի), ընդհանուր նշանակության բարձր մակարդակի ծրագրավորման լեզու, որը հիմնականում կենտրոնացած է ծրագիրը արագ մշակելու և կոդի հեշտ ընթերցանությունն ապահովելու վրա։ Python-ի միջուկի շարահյուսությունը շատ պարզ և հեշտ է։ Միևնույն ժամանակ, ստանդարտ գրադարանը ներառում է բազմաթիվ օգտակար ֆունկցիաներ։

Python-ն աջակցում է ծրագրավորման մի քանի նմուշներ, այդ թվում՝ կառուցվածքային, օբյեկտային կողմնորոշմամբ, ֆունկցիոնալ, իմպերատիվ և ասպեկտային կողմնորոշմամբ։ Հիմնական կառուցվածքային գծերն են՝ դինամիկ տիպավորումը, հիշողության ավտոմատ կառավարումը, լրիվ ինքնադիտողությունը, բացառությունների վերամշակման մեխանիզմը և բարձր մակարդակի տվյալների կառուցվածքը։ Պիտոնում կոդը կազմված է ֆունկցիաներից և դասերից, որոնք կարող են միավորվել մոդուլներում, որոնք էլ, իրենց հերթին, փաթեթներում։

Python-ի հիմնական ինտերպրետատորը CPython-ն է։ Այն աջակցվում է ակտիվ օգտագործվող հարթակների մեծամասնության կողմից։ Այն տարածվում է Python Software Foundation License ազատ արտոնագրով, որն թույլ է տալիս օգտագործել այն ցանկացած ծրագրերում առանց սահմանափակման։ Գոյություն ունեն նաև ինտերպրետատորի տարբերակներ JVM-ի (կոմպիլյացիայի հնարավորությամբ), MSIL-ի (կոմպիլյացիայի հնարավորությամբ), LLVM-ի համար։ PyPy նախագիծն առաջարկում է Պիտոնի համար հենց Պիտոնով գրված ինտերպրետատոր։

Python-ը ակտիվ զարգացող ծրագրավորման լեզու է։ Նոր տարբերակները (լեզվի հատկությունների ավելացմամբ/փոփոխմամբ) թողարկվում են մոտավորապես 2.5 տարին մեկ անգամ։ Այդ և որոշ այլ պատճառներով, Python-ում բացակայում են ANSI, ISO և այլ պաշտոնական ստանդարտներ, որոնց դերը կատարում է CPython-ը։

Փիլիսոփայություն
----------------

Python-ի մշակողները հետևում են ծրագրավորման որոշ փիլիսոփայության, որն անվանում են «The Zen of Python» («Պիտոնի զենը» կամ «Փայթոնի զենը»)։ Ինտերպրետատորը `import this` հրամանի դեպքում կարտածի այդ կոդը (աշխատում է միևնույն սեսիայում միայն մեկ անգամ)։ Այդ փիլիսոփայության հեղինակը Թիմ Փեյթերսն է։

Փիլիսոփայության տեքստը՝

|  |  |  |
| --- | --- | --- |
|  | * Գեղեցիկն ավելի լավ է, քան տգեղը։
* Հստակը ավելի լավ է, քան ոչ հստակը։
* Պարզն ավելի լավ է, քան բարդը։
* Բարդը ավելի լավ է, քան խճճվածը։
* Հարթն ավելի լավ է, քան ծալվածը։
* Նոսրն ավելի լավ է, քան խիտը։
* Ընթերցելիությունը նշանակություն ունի։
* Հատուկ դեպքերն այնքան հատուկ չեն, որ դրանց համար խախտել կանոնները։
* Թեև գործնական լինելն ավելի կարևոր է, քան անթերի լինելը։
* Սխալներն երբեք չպետք է լռեցվեն։
* Եթե դրանք հստակ չեն լռեցվում։
* Հանդիպելով երկիմաստության, թո՛ղ գուշակելու հրապուրանքը։
* Պետք է գոյություն ունենա մեկ և, ցանկալի է, *միայն* մեկ ակնհայտ միջոց դա անելու համար։
* Չնայած այն սկզբում կարող է ոչ այնքան ակնհայտ լինել, եթե, իհարկե, դուք հոլանդացի չեք։
* Այժմն ավելի լավ է, քան երբեք։
* Չնայած երբեքն ավելի լավ է, քան *հենց* հիմա։
* Եթե մտածածն իրագործելու ձևն դժվար է բացատրել, ապա դա վատ միտք է։
* Եթե իրագործելու ձևն հեշտ է բացատրել, ապա դա, *հնարավոր է*, լավ միտք է։
* Անվանատարածքը լավ բան է։ Դրանից շատ կանենք։

*Բնօրինակ տեքստ* (անգլ.)  

* Beautiful is better than ugly.
* Explicit is better than implicit.
* Simple is better than complex.
* Complex is better than complicated.
* Flat is better than nested.
* Sparse is better than dense.
* Readability counts.
* Special cases aren’t special enough to break the rules.
* Although practicality beats purity.
* Errors should never pass silently.
* Unless explicitly silenced.
* In the face of ambiguity, refuse the temptation to guess.
* There should be one - and preferably only one - obvious way to do it.
* Although that way may not be obvious at first unless you’re Dutch.
* Now is better than never.
* Although never is often better than 'right now'.
* If the implementation is hard to explain, it’s a bad idea.
* If the implementation is easy to explain, it may be a good idea.
* Namespaces are one honking great idea - let’s do more of those!

 |  |

Պատմություն
-----------

Python լեզվի մշակումն սկսվել է 1980-ական թվականներին հոլանդական CWI համալսարանի աշխատակից Գվիդո վան Ռոսումի կողմից։ Այն ժամանակ տարածված Amoeba օպերացիոն համակարգի համար անհրաժեշտ էր ընդլայնվող սկրիպտային ծրագրավորման լեզու, և Գվիդոն ազատ ժամանակ սկսեց գրել Python-ը, վերցնելով որոշ առանձնահատկություններ ABC լեզվից (Գվիդոն մասնակցել էր այդ լեզվի ստեղծմանը, որն կենտրոնացված է ծրագրավորման ուսուցման վրա)։ 1991 թ․ փետրվարին Գվիդոն հրապարակեց Python-ի ելակետային տեքստը alt.sources լրատվական խմբում։ Ամենասկզբից Python-ն նախագծված էր որպես օբյեկային կողմնորոշմամբ ծրագրավորման լեզու։

Հեղինակի խոսքերով, լեզուի անվանումն ծագել է ոչ թե սողունի անվանումից, այլ 1970-ական թվականներին հայտնի բրիտանական հումորային «Մոնթի Փայթոնի թռչող կրկեսը» անվանումից։ Չնայած դրան, լեզվի անվանումը շատ հաճախ ասոցիացվում է օձի, ոչ թե ֆիլմի հետ։ Այդ մասին են խոսում KDE-ում կամ Microsoft Windows-ում .py ընդլայնմամբ ֆայլերի պատկերները, և նույնիսկ python.org կայքի պատեկերանիշը (մինչև 2.5 տարբերակը)։

2008 թվականի դեկտեմբերի 8-ին, երկարատև փորձարկումներից հետո, թողարկվեց Python 3000-ի նոր տարբերակը (կամ Python 3.0-ն, հաճախ օգտագործվում է նաև Py3k հապավումը)։ Python 3000-ում վերացված են կառուցվածքի որոշ թերություններ՝ հնարավորինս (բայց ոչ լրիվ) պահպանելով համատեղելիությունը Python-ի հին տարբերակների հետ։

### Այլ լեզուների ազդեցություն

Հայտնվելով համեմատականորեն ավելի ուշ, Python-ը ստեղծվել է մի քանի լեզուների ազդեցության տակ՝

* ABC - օպերատորների խմբավորման համար հեռավորությունների կիրառումը, տվյալների բարձր մակարդակի կառուցվածքը (map) (Python-ը, փաստորեն, ստեղծվել է նրա համար, որպեսզի ուղղվեն ABC-ի նախագծման ժամանակ առաջացած սխալները),
* Modula-3 - փաթեթներ, մոդուլներ, `else`-ի օգտագործումը `try`-ի և `except`-ի հետ համատեղ, ֆունկցիաների արգումենտներին անվանումներ տալը (դրա վրա ազդել է նաև Common Lisp լեզուն),
* С, C++ - որոշ շարահյուսական կառուցներ (ինչպես գրում է Գվիդո վան Ռոսումը, նա օգտագործել է C-ի ամենից շատ չհակասող կառույցներ, որպեսզի Python-ը C-ծրագրավորողների մոտ զզվանք չառաջացնի Python),
* Smalltalk - օբյեկտային կողմնորոշմամբ ծրագրավորումը,
* Լիսպ - ֆունկցիոնալ ծրագրավորման առանձին գծեր (`lambda, map, reduce, filter` և ուրիշներ),
* Ֆորտրան - շերտավոր զանգվածները, թվաբանությունները,
* Miranda - ցանկային արտահայտությունները,
* Ջավա - logging, unittest, threading մոդուլները (դրանց բնօրինակների հնարավորությունների մի մասն իրագործված չէ), xml.sax ստանդարտ գրադարանները, բացառությունների վերամշակման ժամանակ finally-ի և except-ի համատեղ օգտագործումը, @-ի օգտագործումը դեկորատորներում,
* Icon - գեներատորները։

Python-ի այլ առանձնահատկությունների մեծ մասը (օրինակ, ելատեքստային կոդի բայթ-կոմպիլյացիան) նույնպես այլ լեզուներում ավելի վաղ արդեն իրագործ են եղել։

Դյուրատարություն
----------------

Python-ն աշխատում է գրեթե բոլոր հայտնի հարթակների վրա՝ Գրպանի անձնական համակարգիչներից մինչև մեյնֆրեյմներ։ Գոյություն ունեն տարբերակներ Microsoft Windows-ի, գրեթե բոլոր UNIX համակարգերի (այդ թվում՝ FreeBSD-ի և Լինուքսի), Plan 9-ի, Մաք ՕԷսի, iPhone OS 2.0 և ավելի բարձր տարբերակների, Palm OS-ի, OS/2-ի, Amiga-ի, HaikuOS-ի, AS/400-ի և նույնիսկ OS/390-ի, Windows Mobile-ի, Symbian-ի և Անդրոիդի համար։

Այս կամ այն հարթակի հնանալուց հետո լեզվի հիմնական ճյուղում դրա աջակցումը դադարեցվում է։ Օրինակ, 2.6 տարբերակից սկսած դադարեցվել է Windows 95-ի, Windows 98-ի և Windows ME-ի աջակցությունը։ Սակայն այդ հարթակների վրա կարելի է օգտագործել Python-ի նախկին տարբերակներ․ այս պային Python-ի համայնքը աջակցում է լեզվի 2.3-ից սկսած բոլոր տարբերակները (դրանց համար ժամանակ առ ժամանակ թարմացումներ են թողարկվում)։

Չնայած այս ամենին, ի տարբերություն այլ դյուրատար համակարգերի, բոլոր հիմնական հարթակների համար Python-ն ունի տվյալ հարթակին բնորոշ տեխնոլոգիաների աջակցությւոն (օրինակ, Microsoft COM/DCOM)։ Ավելին, գոյություն ունեն Python-ի հատուկ տարբերակ Java―ի համար՝ Jython-ը։ Այն թույլ է տալիս ինտերպրետատորին կատարվել Java―ի աջակցությամբ ցանկացած համակարգում։ Java―ի դասերը կարող են օգտագործվել և նույնիսկ գրվել Python-ի միջոցով։ Որոշ նախագծեր ապահովում են նաև Microsoft .NET հարթակի հետ ինտեգրացիան։ Դրանցից հիմնականներն են IronPython-ը և Python.Net-ը։

Տվյալների տիպերն ու կառուցվածք
------------------------------

Python-ն աջակցում է տվյալների դինամիկ տիպավորում, այսինքն՝ փոփոխականի տեսակը որոշվում է այն օգատգործելու ժամանակ։ Այդ իսկ պատճառով, «փոփոխականին արժեք վերագրել» արտահայտության փոխարեն ավելի ճիշտ է օգտագործել «արժեքի կապումը որոշակի անվան հետ» արտահայտությունը։ Python-ն ունի հետևյալ ներկառուցված տիպերը՝ տրամաբանական (boolean), տողային, Յունիկոդ-տողեր, կամայական ճշտությամբ ամբողջ թվեր, լողացող կետով թվեր, բարդ թվեր և մի շարք այլ տիպեր։ Հավաքածուներից Python-ում կան հետևյալ տիպերը՝ ցուցակներ, կորտեժներ (*չփոփոխվող ցուցակ*), բառարաններ, բազմություններ և այլն։ Բոլոր արժեքները, այդ թվում՝ ֆունկցիաները, մեթոդները, մոդուլները, դասերը, համարվում են օբյեկտներ։

Տվյալների նոր տիպ ստեղծելու համար անհրաժեշտ է կամ գրել նոր դաս (class), կամ հրապարակել նոր տիպը ընդլայնման մոդուլում (օրինակ, C Լեզվով գրված մոդուլում)։ Դասերի համակարգը աջակցում է ժառանգում (միակի և բազմակի) և մետածրագրավորում։ Ներկառուցված տիպերի և ընդլայնումների տիպերի մեծ մասը հնարավոր է ժառանգել և bpython։

Բոլոր օբյեկտներն բաժանվում են երկու մասի՝ հղումային և ատոմային։ Ատոմային են `int`-ը, `long`-ը, `complex`-ը և մի շարք այլ օբեկտներ։ Ատոմային օբյեկտների վերագրման ժամանակ պատճենվում են դրանց արժեքները, մինչդեռ հղումային օբյեկտների դեպքում պատճենվում է միայն դեպի այդ օբյեկտ հղումը, որի շնորհիվ երկու փոփոխականներն էլ օգտագործում են միևնույն արժեքը։ Հղումային օբյեկտներն իրենց հերթին լինում են 2 տեսակի՝ փոփոխվող և չփոփոխվող։ Օրինակ, տողերը և կորտեժները չփոփոխվող են, իսկ ցուցակները, բառարանները՝ փոփոխվող։ Python-ում կորտեժը, փաստորեն, համարվում է չփոփոխվող ցուցակ։ Շատ դեպքերում կորտեժներն ցուցակներից ավելի արագ են աշխատում, ուստի, եթե չեք ցանկանում փոփոխել հաջորդականությունը, ապա ավելի լավ է օգտագործել դրանք։

Տես նաև
-------

* ՋավաՍկրիպտ
* Ջավա
* C++

Նշումներ
--------

IDLE
Python-ը ստաբիլ և բավականին տարածված լեզու է։ Այն օգտագործվում է բազմաթիվ նախագծերում։ Դրանցից մի մասում այն օգտագործվում է որպես հիմնական ծրագրավորման լեզու, մյուսներում՝ ծրագրերում ընդլայնումների ստեղծման համար։ Python լեզվով են ստեղծվել բազմաթիվ մեծ ու փոքր նախագծեր։ Այն նաև օգտագործվում է ապագայում ստեղծվելիք ծրագրերի համար նախատիպեր ստեղծելու համար։ Python-ը օգտագործվում է բազմաթիվ ընկերություններում։

Python-ը, իր NumPy, SciPy և MatPlotLib փաթեթների շնորհիվ, շատ դեպքերում օգտագործվում է որպես գիտական հաշվարկների համար ունիվերսալ միջավայր։ Այդպիսով, այն շատ դեպքերում կարող է փոխարինել այնպիսի կոմերցիոն ծրագրերին, ինչպիսիք են Matlab-ը և IDL-ը։

Ծանոթագրություններ
------------------

1. 1 2 3 4  History and License - Python documentation
2. ↑  Download Python
3. ↑
4. ↑  Why was Python created in the first place? — PSF.
5. 1 2  Classes The Python Tutorial — PSF.
6. ↑  An Introduction to Python for UNIX/C Programmers
7. ↑  Functional Programming HOWTO
8. ↑  *Rossum G. v.* Foreword for "Programming Python" (1st ed.) — Reston: 1996.
9. ↑  Լեզվի ստեղծող Գվիդո վան Ռոսումի խոսքերով, անվանումը եկել է ոչ թե նույնանուն կենդանու կամ պիֆոն գերբնական էակի, այլ «Մոնթի Փայթոնի թռչող կրկեսը» հեռուսատշոույից։ Տես՝ , սակայն օձի պատկերը արդեն վաղուց դարձել է լեզվի պաշտոնական պատկերանիշի մի մասը։
10. ↑  About Python
11. ↑  History and License - Python documentation
12. ↑  PEP 20 - The Zen of Python
13. ↑  Հումորային ակնարկ Գվիդոյի ազգությանը
14. ↑  The Making of Python
15. ↑  «Արխիվացված պատճենը». Արխիվացված է օրիգինալից 2016 թ․ փետրվարի 17-ին. Վերցված է 2012 թ․ սեպտեմբերի 23-ին.
16. ↑  Python 3.0 Release
17. 1 2  Foreword for «Programming Python» (1st ed.)
18. ↑  The Making of Python
19. ↑  «Python on Android» (անգլերեն). www.damonkohler.com. Արխիվացված օրիգինալից 2011 թ․ հունվարի 28-ին. Վերցված է 2009 թ․ դեկտեմբերի 19-ին.
20. ↑  «Port-Specific Changes: Windows». *Python v2.6.1 documentation. What’s New in Python 2.6* (անգլերեն). Python Software Foundation. Արխիվացված օրիգինալից 2011 թ․ հունվարի 28-ին. Վերցված է 11 դեկտեմբերի, 2008-ին.
21. ↑  Python Documentation - Built-in Types
22. ↑  [ Արխիվացված 2018-08-04 Wayback Machine
23. ↑  Արխիվացված 2011-05-11 Wayback Machine bpython interpreter]
24. ↑  Are tuples more efficient than lists in Python? - Stack Overflow
25. ↑  Python Success Stories
26. ↑  Python vs Matlab Արխիվացված 2014-08-24 Wayback Machine Python for scientists blog
27. ↑  IDL vs. Python AstroBetter Tips and Tricks for Professional Astronomers

Գրականություն
-------------

* Python Programming for Data Science by Tomas Beuzen
* Alan Gauld. Learn to Program Using Python։ A Tutorial for Hobbyists, Self-Starters, and Those Who Want to Learn the Art of Programming. Addison-Wesley Professional, 2001
* Rashi Gupta. Making use of Python. Wiley, 2002
* Mark Hammond, Andy Robinson. Python Programming on Win32. O’Reilly, 2000
* Christopher A. Jones, Fred L. Drake. Python & XML. O’Reilly & Associates, 2001
* Ivan Van Laningham. Teach Yourself Python in 24 Hours. Sams, 2000
* Amos Latteier, Michel Pelletier. The Zope Book. New Riders Publishing, 2001
* Frederik Lundh. Python Standard Library. O’Reilly & Associates, 2001
* A. Sweigart. Invent Your Own Computer Games with Python, 2008-2010 — 436 էջ, ISBN 978-0-9821060-1-3։
* A. Sweigart. Core Python Applications Programming, 2012 — 888 էջ, ISBN 978-0-1326782-0-9։

Արտաքին հղումներ
----------------

* The Python Tutorial - Python documentation
* Learn Python the Right Way
* Python ծրագրավորման դասընթաց
* Python-ի հիմունքներ

|  |  |
| --- | --- |
|  | Վիքիպահեստն ունի նյութեր, որոնք վերաբերում են «Python» հոդվածին։ |

|  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

|  |  |
| --- | --- |
|  ⛭   Թեմատիկ կայքեր | GitHub |
|  |
| Բառարաններ և հանրագիտարաններ | Մեծ նորվեգական |
|  |
| 

|  Չափորոշչային վերահսկողություն |
| --- |
|  |
| BNF: 13560465c · GND: 4434275-5 · LCCN: sh96008834 · Microsoft: 519991488 · NKC: ph170668 · SUDOC: 051626225 |

 |

 |

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * դ
* ք
* խ
Python |
| --- |
|  |
| Մարդիկ | 
Գվիդո վան Ռոսում
 |
|  |
| Կոմպիլյատորներ | 
ChinesePython •
CLPython •
CPython •
JPype •
Jython •
IronPython •
PyPy •
Python for S60 •
Psyco •
Stackless Python •
Unladen Swallow
 |
|  |
| Ֆրեյմվորկներ | 
CherryPy •
Django •
Flask •
GAE framework •
Pylons •
Pyramid •
Quixote •
TurboGears •
Twisted •
Web2py •
Zope
 |
|  |
| IDE-ներ | 
Boa Constructor •
Eclipse+PyDev •
Eric •
Geany •
IDLE •
Komodo •
NetBeans •
PyCharm •
PyScripter •
Visual Studio Code
 |
|  |
| Գրադարաններ | 
Beautiful Soup •
NLTK •
NumPy •
PIL •
Pygame •
PyGTK •
Pyparsing •
PyQt •
SciPy •
SQLAlchemy
 |
|  |
| Այլ | 
ActivePython •
PyPI •
Python Software Foundation •
Python-ի լիցենզիան
 |

 |