Python

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з .pyo)
Перейти до навігації Перейти до пошуку
Python
Парадигма кілька парадигм: імперативна, функціональна, об'єктно-орієнтована
Дата появи 20 лютого 1991[1]
Творці Ґвідо ван Россум[1]
Розробник Гвідо ван Россум
Останній реліз 3.12.0 / 2 жовтня, 2023; 5 місяців тому (2023-10-02)[2],
2.7.18 / 20 квітня, 2020; 3 роки тому (2020-04-20)[3]
Тестова версія 3.13.0 alpha 1 / 13 жовтня, 2023; 5 місяців тому (2023-10-13)[4]
Система типізації качина типізація, динамічна типізація[d] і gradual typingd
Діалекти Python 3.12,
Python 2.7 (підтримка закінчена 1 січня 2020 року.[5])
Під впливом від ABC, C, Haskell, Icon[en], Lisp, Modula-3[en], Perl, Smalltalk, Tcl
Вплинула на Boo, Groovy, D
Мова реалізації Python[6] і C[7]
Операційна система Багатоплатформова
Ліцензія Python Software Foundation License
Звичайні розширення файлів .py, .pyw, .pyc, .pyo, .pyd
Вебсайт www.python.org
CMNS: Python у Вікісховищі

Python (найчастіше вживане прочитання — «Па́йтон», запозичено назву[8] з британського шоу Монті Пайтон) — інтерпретована об'єктно-орієнтована мова програмування високого рівня із суворою динамічною типізацією[9]. Розроблена в 1990 році Гвідо ван Россумом. Структури даних високого рівня разом із динамічною семантикою та динамічним зв'язуванням роблять її привабливою для швидкої розробки програм, а також як засіб поєднування наявних компонентів. Python підтримує модулі та пакети модулів, що сприяє модульності та повторному використанню коду. Інтерпретатор Python та стандартні бібліотеки доступні як у скомпільованій, так і у вихідній формі на всіх основних платформах. В мові програмування Python підтримується кілька парадигм програмування, зокрема: об'єктно-орієнтована, процедурна, аспектно-орієнтована та функціональна.

Переваги[ред. | ред. код]

Серед основних її переваг можна назвати такі:

  • чистий синтаксис (для виділення блоків слід використовувати відступи);
  • переносність програм (що властиве більшості інтерпретованих мов);
  • стандартний дистрибутив має велику кількість корисних модулів (включно з модулем для розробки графічного інтерфейсу);
  • можливість використання Python в діалоговому режимі (дуже корисне для експериментування та розв'язання простих задач);
  • стандартний дистрибутив має просте, але разом із тим досить потужне середовище розробки, яке називається IDLE і яке написане мовою Python;
  • зручний для розв'язання математичних проблем (має засоби роботи з комплексними числами, може оперувати з цілими числами довільної величини, у діалоговому режимі може використовуватися як потужний калькулятор);
  • відкритий код (можливість редагувати його іншими користувачами).

Python має ефективні структури даних високого рівня та простий, але ефективний підхід до об'єктно-орієнтованого програмування. Елегантний синтаксис Python, динамічна обробка типів, а також те, що це інтерпретована мова, роблять її ідеальною для написання скриптів та швидкої розробки прикладних програм у багатьох галузях на більшості платформ.

Інтерпретатор мови Python і багата Стандартна бібліотека (як вихідні тексти, так і бінарні дистрибутиви для всіх основних операційних систем) можуть бути отримані з сайту Python www.python.org [Архівовано 17 квітня 2018 у Wayback Machine.], і можуть вільно розповсюджуватися. Цей самий сайт має дистрибутиви та посилання на численні модулі, програми, утиліти та додаткову документацію.

Інтерпретатор мови Python може бути розширений функціями та типами даних, розробленими на C чи C++ (або на іншій мові, яку можна викликати із C). Python також зручна як мова розширення для прикладних програм, що потребують подальшого налагодження.

Історія[ред. | ред. код]

Гвідо ван Россум, автор Python

Розробка мови Python була розпочата в кінці 1980-х років[10] співробітником голландського інституту CWI Гвідо ван Россумом. Для розподіленої ОС Amoeba потрібна була розширювана скриптова мова, і Гвідо почав писати Python на дозвіллі, запозичивши деякі напрацювання для мови ABC (Гвідо брав участь у розробці цієї мови, орієнтованої на навчання програмування). У лютому 1991 року Гвідо опублікував вихідний текст в групі новин alt.sources[11]. Мова почала вільно поширюватися через Інтернет і сподобалася іншим програмістам. З 1991 року Python є цілком об'єктно-орієнтованим. Python також запозичив багато рис таких мов, як C, C++, Modula-3[en] і Icon[en], й окремі риси функціонального програмування з Ліспу.

.py

Назва мови виникла зовсім не від виду плазунів. Автор назвав мову на честь популярного британського комедійного серіалу 70-х років «Повітряний цирк Монті Пайтона». Втім, все одно назву мови частіше асоціюють саме зі змією, ніж з фільмом — піктограми файлів в KDE або в Windows, і навіть емблема на сайті python.org зображують зміїну голову.

Наявність дружньої спільноти користувачів, поряд з дизайнерською інтуїцією Гвідо, вважається одним з головних факторів успіху Python. Розвиток мови відбувається згідно з чітко регламентованими процесами створення, обговорення, відбору та реалізації документів PEP (Python Enhancement Proposal) — пропозицій щодо розвитку Python[12].

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

У 2023 році, найпопулярнішою мовою програмування серед IT-спеціалістів згідно рейтингу IEEE Spectrum стала Python. Рейтинг 2023 року охоплював 59 мов програмування[14].

Філософія[ред. | ред. код]

Розробники мови Python є прихильниками певної філософії програмування, яку називають «The Zen of Python» («Дзен Пайтона»)[15]. Її текст можна отримати в інтерпретаторі Python за допомогою команди import this (лише один раз за сесію). Автором цієї філософії вважається Тім Пейтерс[en].

Текст філософії:

  • Гарне краще за потворне.
  • Явне краще за неявне.
  • Просте краще за складне.
  • Складне краще за заплутане.
  • Плоске краще за вкладене.
  • Розріджене краще за щільне.
  • Легкість читання має значення.
  • Особливі випадки не є настільки особливими, щоб порушувати правила.
  • Хоча практичність є важливішою за бездоганність.
  • Помилки ніколи не повинні проходити непомітно.
  • Якщо їх приховування не прописано явно.
  • Зустрівши неоднозначність, опирайтесь спокусі вгадати.
  • Має бути один — і, бажано, тільки один — очевидний спосіб зробити це.
  • Хоча спочатку він може бути й не очевидним, якщо ви не голландець[16].
  • Зараз — краще, ніж ніколи.
  • Хоча ніколи, найчастіше, — краще, ніж просто зараз.
  • Якщо реалізацію важко пояснити — задум поганий.
  • Якщо реалізацію легко пояснити — можливо, задум добрий.
  • Простори імен — чудова річ, тож робімо їх більше!
Оригінальний текст (англ.)
  • 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[ред. | ред. код]

З'явившись порівняно пізно, Python створювався під впливом багатьох мов програмування:

  • ABC — відступи (поля) для групування операторів, високорівневі структури даних (map)[17][18] (фактично, Python створювався як спроба виправити помилки, допущені при проєктуванні ABC);
  • Modula-3[en] — пакети, модулі, використання else спільно з try та except, іменовані аргументи функцій (на це також вплинув Common Lisp);
  • С, C++ — деякі синтаксичні конструкції (як пише сам Гвідо ван Россум — він використовував найбільш несуперечливі конструкції з С, щоб не викликати неприязнь у Сі-програмістів до Python[17]);
  • Smalltalk — об'єктно-орієнтоване програмування;
  • Lisp — окремі риси функціонального програмування (lambda, map, reduce, filter та інші);
  • Fortran — зрізи масивів, комплексна арифметика;
  • Miranda[en] — спискові вирази;
  • Java — модулі logging, unittest, threading (частина можливостей оригінального модуля не реалізована), xml.sax стандартної бібліотеки, спільне використання finally та except при обробці винятків, використання @ для декораторів;
  • Icon[en] — генератори.
  • TypeScript — ідея синтаксису підказок типів (type hinting). З версії Python 3.10 система підказок типів стала унікальною, «злившись» з мовою в одне ціле. До того ж у Python підказки типів ніяк не впливають на роботу інтерпретатора.

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

Портованість[ред. | ред. код]

Python портованна і працює майже на всіх відомих платформах — від КПК до мейнфреймів. Існують порти під Microsoft Windows, всі варіанти UNIX (включаючи FreeBSD та GNU/Linux), Plan 9, Mac OS та Mac OS X, iPhone OS 2.0 і вище, Palm OS, OS/2, Amiga, AS/400 та навіть OS/390[en], Symbian та Android[19].

У міру старіння платформи її підтримка в основній гілці мови припиняється. Наприклад, з версії 2.6 припинена підтримка Windows 95, Windows 98 та Windows ME.[20] Однак на цих платформах можна використовувати попередні версії Python — спільнота активно підтримує версії Python починаючи від 2.3 (для них виходять виправлення).

При цьому, на відміну від багатьох портованих систем, для всіх основних платформ Python має підтримку характерних для даної платформи технологій (наприклад, Microsoft COM/DCOM). Навіть більше, існує спеціальна версія Python для віртуальної машини Java — Jython, що дозволяє інтерпретатору виконуватися на будь-якій системі, яка підтримує Java, при цьому класи Java можуть безпосередньо використовуватися з Python й навіть бути написаними на ньому. Також кілька проєктів забезпечують інтеграцію з платформою Microsoft.NET, основні з яких — IronPython та Python.Net.

Типи й структури даних[ред. | ред. код]

Python підтримує динамічну типізацію, тобто, тип змінної визначається лише під час виконання. З базових типів слід зазначити підтримку цілих чисел довільної довжини і комплексних чисел. Python має багату бібліотеку для роботи з рядками, зокрема, кодованими в юнікоді.

З колекцій Python підтримує кортежі (tuples), списки (масиви), словники (асоціативні масиви) і від версії 2.4, множини.

Система класів підтримує множинне успадкування і метапрограмування. Будь-який тип, включаючи базові, входить до системи класів, й за необхідності можливе успадкування навіть від базових типів.

Можливості[ред. | ред. код]

Інтерактивний режим[ред. | ред. код]

Подібно Ліспу та Прологу в режимі відлагодження, інтерпретатор Python має інтерактивний режим роботи, при якому введені з клавіатури вирази відразу ж виконуються, а результат виводиться на екран. Цей режим цікавий не тільки новачкам, але й досвідченим програмістам, які можуть протестувати в інтерактивному режимі будь-який фрагмент коду, перш ніж використовувати його в основній програмі, або просто використовувати як калькулятор з великим набором функцій.

Діалог роботи з Python в інтерактивному режимі має такий вигляд:

>>> 2 ** 100 # піднесення 2 до 100-го степеня
1267650600228229401496703205376L
>>> from math import * # імпорт математичних функцій
>>> sin (pi * 0.5) # обчислення синуса від половини пі
1.0
>>> help (sorted) # допомогу по функції sorted
Help on built-in function sorted in module __builtin__:
sorted ()
   sorted (iterable, cmp=none, key=none, reverse=false) -> new sorted list

В інтерактивному режимі доступний дебагер pdb та система довідки (викликається за help()). Система допомоги працює для модулів, класів і функцій, тільки якщо ті були забезпечені рядками документації.

Крім вбудованої, існує й покращена інтерактивна оболонка IPython[21].

Об'єктно-орієнтоване програмування[ред. | ред. код]

Дизайн мови Python побудований навколо об'єктно-орієнтованої моделі програмування. Реалізація ООП в Python є елегантною, потужною та добре продуманою, але разом з тим, достатньо специфічною в порівнянні з іншими об'єктно-орієнтованими мовами.

Можливості та особливості:

  1. Класи є одночасно об'єктами з усіма нижче наведеними можливостями.
  2. Успадкування, в тому числі множинне.
  3. Поліморфізм (всі функції віртуальні).
  4. Інкапсуляція (два рівні — загальнодоступні та приховані методи і поля). Особливість — приховані члени доступні для використання та помічені як приховані лише особливими іменами.
  5. Спеціальні методи, що керують життєвим циклом об'єкта: конструктори, деструктори, розподільники пам'яті.
  6. Перевантаження операторів (усіх, крім is, '.', '=' і символьних логічних).
  7. Властивості (імітація поля за допомогою функцій).
  8. Управління доступу до полів (емуляція полів і методів, частковий доступ тощо).
  9. Методи для управління найпоширенішими операціями (істиннісне значення, len(), глибоке копіювання, серіалізація, ітерація по об'єкту, …)
  10. Метапрограмування (управління створенням класів, тригери на створення класів, та ін)
  11. Повна інтроспекція.
  12. Класові та статичні методи, класові поля.
  13. Класи, вкладені у функції та інші класи.

Функціональне програмування[ред. | ред. код]

Python підтримує парадигму функціонального програмування, зокрема:

  • функція є об'єктом;
  • функції вищих порядків;
  • рекурсія;
  • розвинена обробка списків (спискові вирази, операції над послідовностями, ітератори);
  • аналог замикань (closures);
  • часткове застосування функції;
  • можливість реалізації інших засобів на самій мові (наприклад, каррінг).

Модулі та пакети[ред. | ред. код]

Програмне забезпечення (застосунок або бібліотека) на Python оформлюється у вигляді модулів, які у свою чергу можуть бути зібрані в пакунки. Модулі можуть розташовуватися як у каталогах, так і в ZIP-архівах. Модулі можуть бути двох типів за своїм походженням: модулі, написані на «чистому» Python, і модулі розширення (extension modules), написані на інших мовах програмування. Наприклад, у стандартній бібліотеці є «чистий» модуль pickle і його аналог на Сі: cPickle. Модуль оформляється у вигляді окремого файлу, а пакет — у вигляді окремого каталогу. Підключення модуля до програми здійснюється оператором import. Після імпорту модуль представлений окремим об'єктом, що дає доступ до простору імен модуля. У ході виконання програми модуль можна перезавантажити функцією reload().

Інтроспекція[ред. | ред. код]

Python підтримує повну інтроспекцію часу виконання. Це означає, що для будь-якого об'єкта можна отримати всю інформацію про його внутрішню структуру.

Застосування інтроспекції (метапрограмування) є важливою частиною того, що називають «pythonic style», і широко застосовується в бібліотеках і фреймворках Python, таких як PyRO, Pyro[en], PLY, CherryPy, Django та інших, заощаджуючи час програміста, що ними користується.

Обробка винятків[ред. | ред. код]

Обробка винятків підтримується в Python допомогою операторів try, except, else, finally, raise, що утворюють блок обробки винятків. У загальному випадку блок має такий вигляд:

try:
    # Тут код, в якому може виникнути виняткова ситуація
    raise ExceptionType ("message")
except (Тип винятку1, Тип винятку2, ), Змінна:
    # Код в блоці виконується, якщо тип винятку збігається з одним з типів
    # (Тип винятку1, Тип винятку2, ...) або є спадкоємцем одного
    # з цих типів.
    # Отриманий виняток доступний в необов'язковій Змінній.
except (Тип винятку3, Тип винятку4, ), Змінна:
    # Кількість блоків except не обмежено
    raise # Згенерувати виняток "поверх" отриманого; без параметрів — повторно згенерувати отримане
except:
    # Буде виконано за будь-якого винятку, не обробленого типізованими блоками except
else:
    # Код блоку виконується, якщо не було отримано винятків.
finally:
    # Буде виконано в будь-якому випадку, можливо після відповідного
    # блоку except або else

Спільне використання else, except і finally стало можливо тільки починаючи з Python 2.5. Інформація про поточний виняток завжди доступна через sys.exc_info(). Крім значення винятку, Python також зберігає стан стеку аж до точки збудження винятку — так званий traceback.

На відміну від мов програмування, що компілюються, в Python використання винятку не призводить до значних накладних витрат (а часто навіть дозволяє прискорити виконання програм) і дуже широко використовується. Винятки узгоджуються з філософією Python (10-й пункт «дзену Python» — «Помилки ніколи не повинні ігноруватися») та є одним із засобів підтримки «качиної типізації».

Іноді, замість явної обробки винятків, зручніше використовувати блок with (доступний, починаючи з Python 2.5).

Ітератори[ред. | ред. код]

У програмах на Python широко використовуються ітератори. Цикл for може працювати як з послідовністю, так і з ітераторами. Усі колекції, як правило, надають ітератор. Об'єкти визначеного користувачем класу теж можуть бути ітераторами. Модуль itertools стандартної бібліотеки містить багато корисних функцій для роботи з ітераторами. На відміну від звичайних послідовностей, всі елементи яких зберігаються в пам'яті, отримання наступного елемента забезпечує генератор — спеціальна функція, звернення до якої обчислює і повертає наступний елемент генератора.

Генератори[ред. | ред. код]

Однією з цікавих можливостей мови є генератори — функції, що між викликами зберігають внутрішній стан: значення локальних змінних і поточну інструкцію (див. також: співпрограма). Генератори можуть використовуватися як ітератори для структур даних і для лінивих обчислень. Наприклад, генератор чисел Фібоначчі:

def fib():
    a, b = 1, 1
    while True:
        yield a
        a, b = b, a + b

while x in fib():
     print(x)

При виклику генератора функція негайно повертає об'єкт-ітератор, який зберігає поточну точку виконання та стан локальних змінних функції. При запиті наступного значення (за допомогою методу next(), який неявно викликається в циклі for) генератор продовжує виконання функції від попередньої точки зупину до наступного оператора yield або return.

У Python 2.4 з'явилися генераторні вирази — вирази, що дають у результаті генератор. Генераторні вирази дозволяють заощадити пам'ять там, де інакше потрібно було б використовувати список із проміжними результатами:

>>> sum(i for i in xrange (1, 100) if i % 2 != 0)
2500

У цьому прикладі підсумовуються всі непарні числа від 1 до 99.

Починаючи з версії 2.5, Python підтримує повноцінні співпроцедури: тепер в генератор можна передавати значення за допомогою методу send() та збуджувати в його контексті виняток за допомогою методу throw().

Керування контекстом виконання[ред. | ред. код]

У Python 2.5 з'явилися засоби для керування контекстом виконання блоку коду — оператор with та модуль contextlib.

Оператор може застосовуватися в тих випадках, коли до та після деяких дій обов'язково мають виконуватися якісь інші дії, незалежно від створених у блоці винятків або операторів return: файли має бути закрито, ресурси звільнено, перенаправлення стандартного введення/виведення завершено, тощо. Оператор полегшує читання коду, отже, допомагає уникати помилок.

Декоратори[ред. | ред. код]

Починаючи з версії 2.4, Python дозволяє використовувати, так звані, Декоратори[22] (не слід плутати з однойменним шаблоном проєктування) для підтримки існуючої практики перетворення функцій та методів у місці визначення (декораторів може бути декілька). Після довгих дебатів для декораторів став використовуватися символ @ у рядках, що передують визначенню функції або методу. Наступний приклад містить опис статичного методу без застосування декоратора:

def my_wonderful_method ():
    return "Деякий метод"
my_wonderful_method = staticmethod(my_wonderful_method)

і за допомогою декоратора:

@staticmethod
def my_wonderful_method ():
    return "Деякий метод"

Декоратор — це функція, першим аргументом якої є декорована функція або метод. Декоратори можна вважати елементом аспектно-орієнтованого програмування.

З версії 2.6 декоратори можна використовувати з класами, аналогічно функціям.

Інші можливості[ред. | ред. код]

У Python є ще кілька можливостей, що відрізняють його від багатьох інших мов високою гнучкістю та динамічністю.

Наприклад, клас є об'єктом, а в операторі визначення класу можна використовувати вирази в списку батьківських класів.

def getClass():
    return dict
class D(getClass()):
    pass
d = D()

Можна модифікувати багато об'єктів під час виконання, наприклад класи:

>>> class X(object): pass

>>> y = X()
>>> y.wrongMethod() # такого методу поки немає
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'X' object has no attribute 'wrongMethod'
>>> X.wrongMethod = lambda self : 'im here' # додамо його
>>> y.wrongMethod() # так як доступ до методу призводить до пошуку по __dict__ класу,
'im here' # то wrongMethod стає доступним всім екземплярам

Бібліотеки[ред. | ред. код]

Стандартна бібліотека[ред. | ред. код]

Python поставляється «з батарейками в комплекті».

Багата стандартна бібліотека є однією з привабливостей мови Python. Тут є засоби для роботи з багатьма мережевими протоколами та форматами Інтернету, наприклад, модулі для написання HTTP-серверів та клієнтів, для розбору та створення поштових повідомлень, для роботи з XML, тощо. Набір модулів для роботи з операційною системою дозволяє писати крос-платформні застосунки. Існують модулі для роботи з регулярними виразами, текстовими кодуваннями, мультимедійними форматами, криптографічними протоколами, архівами, серіалізацією даних, юніт-тестуванням та ін.

Модулі розширення та програмні інтерфейси[ред. | ред. код]

Крім стандартної бібліотеки існує багато інших, що надають інтерфейс до всіх системних викликів на різних платформах; зокрема, на платформі Win32 підтримуються всі виклики Win32 API, а також COM в обсязі не меншому, ніж у Visual Basic або Delphi. Існує велика кількість прикладних бібліотек для Python у різноманітних галузях: веброзробка, бази даних, обробка зображень, обробка тексту, чисельні методи, програми операційної системи тощо.

Для Python прийнята специфікація програмного інтерфейсу до баз даних DB-API 2 та розроблено відповідні цій специфікації пакети для доступу до різних СУБД: PostgreSQL, Oracle, Sybase, Firebird (Interbase), Informix, Microsoft SQL Server, MySQL та sqlite. На платформі Microsoft Windows доступ до БД можливий через ADO (ADOdb). Комерційний пакет mxODBC для доступу до СУБД через ODBC для платформ Windows і UNIX розроблений eGenix[23]. Для Python написано багато ORM: (SQLObject, SQLAlchemy, Dejavu, Django), виконані програмні каркаси для розробки вебзастосунків (Django, Pylons).

Бібліотека NumPy для роботи з багатовимірними масивами дозволяє досягти продуктивності наукових розрахунків, порівнянної зі спеціалізованими пакетами. SciPy використовує NumPy і надає доступ до великого спектра математичних алгоритмів (матрична алгебра — BLAS, level 1-3 і LAPACK; ШПФ).

Бібліотека WSGI[24] — інтерфейс шлюзу з вебсервером (Python Web Server Gateway Interface).

Python надає простий і зручний програмний інтерфейс C API для написання власних модулів на мовах С та C++. Інструмент SWIG дозволяє майже автоматично отримувати прив'язки для використання C/C++ бібліотек у коді на Python. Можливості цього та інших інструментів варіюються від автоматичної генерації (C/C++/Fortran)-Python інтерфейсів за спеціальними файлами (SWIG, pyste[25], SIP[26], pyfort[27]) до надання зручніших API (boost::python[28], CXX[29] та ін.) Інструмент стандартної бібліотеки ctypes дозволяє програмам Python безпосередньо викликати функції з динамічних бібліотек/DLL, написаних на C. Існують модулі, що дозволяють вбудовувати код на С/C++ прямо у вихідні файли Python, створюючи розширення «на льоту» (pyinline[30], weave[31]). Для підключення математичних функцій, особливо із застосуванням NumPy, наразі офіційно рекомендованим є Cython[32].

Інший підхід полягає у вбудовуванні інтерпретатора Python у застосунки. Python легко вбудовується в програми на Java, C/C++, Ocaml. Взаємодія Python-застосунків з іншими системами можлива також за допомогою CORBA, XML-RPC, SOAP, COM.

За допомогою Pyrex[33] можлива компіляція Python-подібної мови (додано можливість типізації) в еквівалентний Сі-код і зв'язування із зовнішніми модулями.

Експериментальний проєкт shed skin[34][35] передбачає створення компілятора для трансформації неявно типізованих Python програм в оптимізований С++ код. Починаючи з версії 0.22 shed skin дозволяє компілювати окремі функції в модулі розширень. Повна компіляція (станом на 1 липня 2007) далека від завершення.

Python та переважна більшість бібліотек до нього безкоштовні й поставляються у вихідних кодах. Навіть більше, на відміну від багатьох відкритих систем, ліцензія ніяк не обмежує використання Python у комерційних розробках та не накладає ніяких зобов'язань, крім зазначення авторських прав.

Графічні бібліотеки[ред. | ред. код]

З Python поставляється бібліотека tkinter на основі Tcl/Tk для створення крос-платформних програм з графічним інтерфейсом.

Для науково-технічної мети найбільшого поширення набуло використання matplotlib — бібліотеки з інтерфейсом, аналогічним MATLAB Plot Tool.

Існують розширення, що дозволяють використовувати всі основні GUI бібліотеки — wxPython[36], засноване на бібліотеці wxWidgets, PyGTK для GTK+, PyQt та PySide для Qt та інші. Деякі з них також надають широкі можливості для роботи з базами даних, графікою та мережами, використовуючи всі можливості бібліотеки, на якій базуються.

Для створення ігор та програм, що вимагають нестандартного інтерфейсу, можна використовувати бібліотеку Pygame. Вона також надає великі засоби роботи з мультимедіа: з її допомогою можна керувати звуком і зображеннями, відтворювати відео. Надаване pygame апаратне прискорення графіки OpenGL має більш високорівневий інтерфейс в порівнянні з PyOpenGL[37], що копіює семантику С-бібліотеки для OpenGL. Є також PyOgr[38], що забезпечує прив'язку до OGRE — високорівневої об'єктно-орієнтованої бібліотеки 3D-графіки. Крім того, існує бібліотека pythonOCC[39], що забезпечує прив'язку до середовища 3D-моделювання та симуляції OpenCascade.[40].

Для роботи з растровою графікою використовується бібліотека Python Imaging Library.

Порівняння з іншими мовами[ред. | ред. код]

Найчастіше Python порівнюють з Perl та Ruby. Ці мови також є інтерпретованими та мають приблизно однакову швидкість виконання програм. Як і Perl, Python може успішно застосовуватися для написання скриптів (сценаріїв). Як і Ruby, Python є добре продуманою системою для ООП.

Засоби функціонального програмування частково запозичені з Scheme та Icon[en].

У середовищі комерційних застосунків швидкість виконання програм на Python можуть порівнювати з Java-застосунками[41].

Попри те, що Python має досить самобутній синтаксис, одним із принципів дизайну цієї мови є принцип найменшого подиву.

Недоліки[ред. | ред. код]

Див також списки недоліків мови Python[42].

Низька швидкодія[ред. | ред. код]

Python, як і багато інших інтерпретованих мов, які не застосовують, наприклад, JIT-компілятори, мають загальний недолік — порівняно низьку швидкість виконання програм[43]. Однак, у випадку з Python цей недолік компенсується зменшенням часу розробки програми[43] У середньому, програма, написана на Python, в 2-4 рази компактніша, ніж її аналог на C++ або Java[43]. Збереження байт-коду (файли .pyc і .pyo) дозволяє інтерпретатору не витрачати зайвий час на перекомпіляцію коду модулів при кожному запуску, на відміну, наприклад, від мови Perl. Крім того, існує спеціальна JIT-бібліотека psyco[44] (проте призводить до збільшення споживання оперативної пам'яті). Ефективність psyco значною мірою залежить від архітектури програми.

Існують проєкти реалізацій мови Python, що вводять високопродуктивні віртуальні машини (ВМ) як компілятора заднього плану. Прикладами таких реалізацій може служити PyPy, що базується на LLVM; більш ранньою ініціативою є проєкт Parrot. Очікується, що використання ВМ типу LLVM призведе до тих самих результатів, що й використання аналогічних підходів для реалізацій мови Java, де низька обчислювальна продуктивність в основному подолана[45].

Низка програм/бібліотек для інтеграції з іншими мовами програмування (див. вище) надають можливість використовувати іншу мову для написання критичних ділянок.

У найпопулярнішій реалізації мови Python інтерпретатор досить великий і більш вимогливий до ресурсів, ніж в аналогічних популярних реалізаціях Tcl, Forth, LISP або Lua, що обмежує його застосування у вбудованих системах. Тим не менше, Python знайшов застосування в КПК і деяких моделях мобільних телефонів[46].

Відсутність статичної типізації[ред. | ред. код]

Відсутність статичної типізації є не стільки вадою інтерпретатора, скільки вибором розробника мови. Річ у тому, що в Python прийнята так звана «качина типізація». Через це типи переданих значень недоступні на етапі компіляції, та помилки на зразок AttributeError можуть виникати під час виконання. Відсутність статичної типізації також є однією з основних причин низької швидкодії.

Існують модулі, які дозволяють контролювати типи параметрів функцій на етапі виконання, наприклад typecheck[47] або method signature checking decorators[48]. Додавання необов'язковою статичної типізації параметрів функції заплановано для Python3000[49][50]. При цьому, однак, безпосередньо інтерпретатор не буде перевіряти типи, а тільки додавати відповідну інформацію до метаданих функції для її (інформації) подальшого використання модулями розширень.

Відсутність статичної типізації і деякі інші причини не дозволяють реалізувати в Python механізм перевантаження функцій на етапі компіляції. Можливості Python дозволяють реалізувати динамічне перевантаження на етапі виконання, що, звичайно, уповільнює виклик, бо вирішення яку саме функцію викликати проводиться при кожному зверненні і є, в загальному випадку, досить складною процедурою. Відсутність перевантаження в Python компенсують використанням функцій з динамічними параметрами.

Плани з підтримки перевантаження в Python3000[49][51] Перевантаження функцій реалізована різними сторонніми бібліотеками, в тому числі PEAK[52][53] надає надзвичайно багатий можливостями механізм перевантаження функцій з використанням довільних правил.

Неможливість модифікації вбудованих класів[ред. | ред. код]

У порівнянні з Ruby та деякими іншими мовами, в Python відсутня можливість модифікувати вбудовані класи, такі, як int, str, float, list та інші, що, однак, дозволяє Python споживати менше оперативної пам'яті і швидше працювати. Ще однією причиною введення такого обмеження є необхідність узгодження з модулями розширення. Багато модулів (з метою оптимізації швидкодії) перетворять Python-об'єкти елементарних типів до відповідних Сі-типів замість маніпуляцій з ними за допомогою Сі-API.

Глобальне блокування інтерпретатора (GIL)[ред. | ред. код]

GIL (Global Interpreter Lock) — проблема, притаманна CPython, Stackless та PyPy, але відсутня в Jython та IronPython. При своїй роботі основний інтерпретатор Python постійно використовує велику кількість потіконебезпечних даних. В основному це словники, в яких зберігаються атрибути об'єктів. Для уникнення руйнування цих даних при спільній модифікації з різних потоків перед початком виконання декількох інструкцій (за замовчуванням 100) потік інтерпретатора захоплює GIL, а після закінчення звільняє. Внаслідок цієї особливості в кожен момент часу може виконуватися тільки одна нить Python коду, навіть якщо на комп'ютері є кілька процесорів або процесорних ядер (GIL також звільняється на час виконання блокуючих операцій, таких як введення-виведення, зміни/перевірка стану синхронізуючих примітивів та інших — таким чином, якщо одна нить блокується, інші можуть виконуватися). Була зроблена спроба переходу до більш гранульованої синхронізації, проте через часті захоплення/звільнення блокувань ця реалізація виявилася занадто повільною[54]. У найближчому майбутньому перехід від GIL до інших технік не передбачається, однак є python-safethread[55] — CPython без GIL і з деякими іншими змінами (за твердженнями його авторів, на однонитевих застосунках швидкість відповідає 60-65 % від швидкості оригінальному CPython).

Ця проблема має два основних варіанти вирішення. Перший — відмова від спільного використання змінюваних даних. При цьому дані дублюються в нитях і необхідність забезпечення їхньої синхронізації (якщо така потрібна) лягає на програміста[56] Цей підхід веде до збільшення споживання оперативної пам'яті (однак не настільки сильно, як при використанні процесів).

Другий підхід — забезпечення більш гранульованої синхронізації — для окремих структур даних. У цьому випадку падає продуктивність внаслідок збільшення числа звільнень/захоплень блокувань.

Якщо необхідно паралельне виконання декількох нитей Python-коду, то можна скористатися процесами, наприклад, модулем processing[57], який імітує семантику стандартного модуля threading, але використовує процеси замість нитей. Є безліч модулів, що спрощують написання паралельних та/або розподілених застосунків на Python, таких як parallelpython[58], Pypar[59], pympi[60] та інші. GIL звільняється при виконанні коду більшості розширень, наприклад, NumPy/SciPy, дозволяючи на час розрахунків виконуватися іншому Python-ниті. Іншим рішенням може бути використання IronPython або Jython, позбавлених даного недоліку.

Реалізації[ред. | ред. код]

Python портований на всі відомі платформи — від КПК до мейнфреймів. Існують порти під Windows[61], всі варіанти UNIX[62] (включно з Linux), Plan 9[63], Mac OS і Mac OS X[64], Palm OS[65], OS/2[66], Amiga, AS/400[66] і навіть OS/390[66] і Symbian[66].

При цьому, на відміну від багатьох портованих систем, на кожній платформі Python підтримує характерні для даної платформи технології (наприклад, Microsoft COM). Крім того, існує спеціальна версія Python для віртуальної машини Java — Jython, що дозволяє інтерпретатору виконуватися на будь-якій системі, що підтримує Java, класи Java можуть безпосередньо використовуватися з Python і навіть бути написаними на Python. Нещодавно почалася розробка системи, спрямованої на повнішу інтеграцію з платформою .NET — Iron Python.

Подальша розробка[ред. | ред. код]

Python Enhancement Proposal («PEP») — це документ зі стандартизованим дизайном, що надає загальну інформацію про мову Python, включаючи нові пропозиції, описи та роз'яснення можливостей мови. PEP пропонуються як основне джерело для пропозиції нових можливостей і для роз'яснення вибору того або іншого дизайну для основних елементів мови. Видатні PEP рецензуються і коментуються BDFL.

Графік і сумісність[ред. | ред. код]

Серії Python 2.x і Python 3.x протягом кількох випусків існували паралельно, при цьому серія 2.x використовувалася для забезпечення сумісності. PEP 3000 містить більше інформації про випуски.

Python 3.0 зворотно не сумісний з попередньою серією 2.x. Код Python 2.x швидше за все буде видавати помилки при виконанні в Python 3.0. Динамічна типізація Python, разом зі змінами декількох методів словників, робить механічний переклад з Python 2.x в Python 3.0 дуже складним. Однак, утиліта «2to3» здатна зробити більшість роботи з перекладу коду, вказуючи на підозрілі їй частини за допомогою коментарів і попереджень. PEP 3000 рекомендує тримати вихідний код для серії 2.x, і робити випуски для Python 3.x за допомогою «2to3». Отриманий код не слід редагувати, поки програма повинна бути працездатною в Python 2.x.

Розробники припинили підтримувати гілку Python 2.x у січні 2020 року. Остання випущена версія гілки Python 2.x: Python 2.7. Далі розробка ведеться лише у гілці Python 3.x[67].

Можливості[ред. | ред. код]

Основні зміни, внесені до версії 3.0:[68][69]

  • Синтаксична можливість для анотації параметрів і результату функцій (наприклад, для передачі інформації про тип або документування).
  • Повний перехід на unicode для рядків.
  • Введення нового типу «незмінні байти» і типу «змінюваний буфер». Обидва необхідні для подання двійкових даних.
  • Нова підсистема вводу-виводу (модуль io), що має окремі вигляди для бінарних і текстових даних.
  • Абстрактні класи, абстрактні методи (є вже в 2.6).
  • Ієрархія типів для чисел.
  • Вирази для словників і множин {k: v for k, v in a_dict} і {el1, el2, el3} (за аналогією зі списковими виразами).
  • Зміни print з вбудованого виразу у вбудовану функцію. Це дозволить модулям робити зміни, підлаштовуючись під різне використання функції, а також спростить код. У Python 2.6 ця можливість активується введенням from __future__ import print_function.
  • Переміщення reduce (але не map або filter) з вбудованого простору в модуль functools (використання reduce істотно менш читабельне в порівнянні з циклом).
  • Видалення деяких застарілих можливостей, які підтримуються у гілці 2.x для сумісності, зокрема: класи старого стилю, цілочисельний поділ з обрізанням результату як поведінка за вмовчанням, рядкові винятки, неявний відносний імпорт, оператор exec тощо
  • Реорганізація стандартної бібліотеки.
  • Новий синтаксис для метакласів.
  • Змінений синтаксис присвоєння. Стало можливим, наприклад, надання (a, * rest, b) = range(5). З іншого боку, формальні параметри функцій на зразок def foo (a, (b, c)) більше неприпустимі.

Поєднання з табличними процесорами[ред. | ред. код]

Влітку 2023 року, згідно повідомлення Microsoft, для користувачів бета-версії Microsoft 365, Python було додано до Microsoft Excel. Нове поєднання має на меті покращити можливості аналізу та візуалізації даних в Excel, дозволяючи користувачам отримувати доступ до Python безпосередньо зі стрічки Excel. Компанія Microsoft пояснила, що користувачам тепер не потрібно більше встановлювати будь-яке додаткове програмне забезпечення або налаштовувати надбудову для доступу до функціональних можливостей, оскільки інтеграція Python до Excel буде частиною вбудованих з’єднувачів Excel та інструменту ETL Power Query[70].

Основні пропозиції[ред. | ред. код]

Перелік всіх пропозицій наведено на офіційному сайті[71] разом із їх статусом. Нижче наведено ті, які здобули найбільше поширення:

  • PEP8 Настанова щодо стилю оформлення коду[72].

Спеціалізовані підмножини/розширення Python[ред. | ред. код]

На основі Python було створено кілька спеціалізованих підмножин мови, в основному призначених для статичної компіляції в машинний код. Деякі з них:

  • RPython[73] — створена в рамках проєкту PyPy значно обмежена реалізація Python без динамізму часу виконання та деяких інших можливостей. RPython код можна компілювати в багато інших мов/платформ — C, JavaScript, Lisp, .NET[74], LLVM. На RPython написано інтерпретатор PyPy.
  • Pyrex[33] — обмежена реалізація Python, але трохи менше, ніж RPython. PyReX розширено можливостями статичної типізації типами з мови С і дозволяє вільно змішувати типізований та не типізований код. Призначений для написання модулів розширень, компілюється в код на мові С.
  • Cython[32] — розширена версія Pyrex.
  • pyastra[75] — компілятор Python коду в асемблер для PIC архітектури.
  • Shed Skin[35] — призначений для компіляції неявно статично типізованого Python коду в оптимізований код на мові C++, проєкт далекий від завершення.
  • PyScript — це фронтенд-фреймворк[76] для створення програм на Python, вбудованих у HTML-код, для виконання в браузері. Дозволяє імпортувати більшість модулів Python.

Застосування[ред. | ред. код]

Python Powered

Python — стабільна та поширена мова. Вона використовується в багатьох проєктах та в різних якостях: як основна мова програмування або для створення розширень та інтеграції додатків. На Python реалізована велика кількість проєктів, також вона активно використовується для створення прототипів майбутніх програм.

Python використовується в багатьох великих компаніях[77].

Документація та підручники[ред. | ред. код]

Опис стандартних об'єктів та модулів, дивіться Python Library Reference. Python Reference Manual містить формальніше визначення мови.

Щоб писати розширення на C та C++, читайте Extending and Embedding the Python Interpreter та Python/C API Reference.

  • Марк Пілігрим. Пориньте у Python 3. 

Інтегровані середовища розробки[ред. | ред. код]

Для Python існує кілька спеціалізованих середовищ розробки, зокрема, IDLE, Thonny, PyCharm,PyScripter, Spyder (останній призначено для наукових розробок), а також розширення для Visual Studio Code і плагін PyDev для Eclipce[78].

Див. також[ред. | ред. код]

Джерела[ред. | ред. код]

  1. а б History and License - Python documentation
  2. Thomas Wouters (2 жовтня 2023). Python 3.12.0 (final) now available. Python Insider. Архів оригіналу за 10 жовтня 2023. Процитовано 25 жовтня 2023. 
  3. Donovan, Ryan (23 квітня 2020). The final Python 2 release marks the end of an era. Stackoverflow Blog. Stack Overflow. Архів оригіналу за 16 жовтня 2020. Процитовано 09 жовтня 2020. 
  4. Python 3.13.0 alpha 1 is now available. Thomas Wouters. Архів оригіналу за 22 жовтня 2023. Процитовано 25 жовтня 2023. 
  5. Архівована копія. Архів оригіналу за 16 грудня 2019. Процитовано 1 січня 2020. 
  6. The python Open Source Project on Open Hub: Languages Page — 2006.
  7. The Python Programming Language Source Code — 2007.
  8. Архівована копія. Архів оригіналу за 6 січня 2018. Процитовано 28 серпня 2008. 
  9. Guido van Rossum, Python Reference Manual, release 2.4.4, 18 October 2006
  10. The Making of Python. Архів оригіналу за 1 вересня 2016. Процитовано 4 липня 2010. 
  11. Архівована копія. Архів оригіналу за 17 лютого 2016. Процитовано 4 липня 2010. 
  12. Index of Python Enhancement Proposals (PEPs). Архів оригіналу за 28 січня 2007. Процитовано 4 липня 2010. 
  13. Python 3.0 Release. Архів оригіналу за 2 червня 2009. Процитовано 4 липня 2010. 
  14. IEEE Spectrum опублікувала рейтинг найпопулярніших мов програмування 2023 року. // Автор: Артем Житкевич. 30.08.2023
  15. PEP 20 — The Zen of Python. Архів оригіналу за 17 липня 2005. Процитовано 22 серпня 2014. 
  16. Жартівливий натяк на національність Гвідо
  17. а б Foreword for «Programming Python» (1st ed.). Архів оригіналу за 6 січня 2018. Процитовано 28 серпня 2008. 
  18. The Making of Python. Архів оригіналу за 6 червня 2017. Процитовано 4 липня 2010. 
  19. Python on Android (англійською). www.damonkohler.com. Архів оригіналу за 28 січня 2011. Процитовано 19 грудня 2009. 
  20. Port-Specific Changes: Windows. Python v2.6.1 documentation. What's New in Python 2.6 (англійською). Python Software Foundation. Архів оригіналу за 28 січня 2011. Процитовано 11 грудня 2008. 
  21. IPython. Архів оригіналу за 4 серпня 2018. Процитовано 20 червня 2019. 
  22. PEP318. Архів оригіналу за 6 листопада 2013. Процитовано 5 липня 2010. 
  23. — Professional Python Software, Skills and Services[недоступне посилання з серпня 2019]
  24. PEP333. Архів оригіналу за 9 червня 2021. Процитовано 5 липня 2010. 
  25. Pyste Documentation. Архів оригіналу за 30 серпня 2008. Процитовано 5 липня 2010. 
  26. Архівована копія. Архів оригіналу за 19 квітня 2008. Процитовано 5 липня 2010. 
  27. Архівована копія. Архів оригіналу за 8 лютого 2007. Процитовано 5 липня 2010. 
  28. Boost.Python. Архів оригіналу за 3 лютого 2007. Процитовано 5 липня 2010. 
  29. PyCXX: Write Python Extensions in C. Архів оригіналу за 3 лютого 2007. Процитовано 5 липня 2010. 
  30. PyInline: Mix Other Languages directly Inline with your Python. Архів оригіналу за 15 січня 2007. Процитовано 5 липня 2010. 
  31. Weave. Архів оригіналу за 6 липня 2010. Процитовано 5 липня 2010. 
  32. а б Cython: C-Extensions for Python. Архів оригіналу за 11 серпня 2007. Процитовано 5 липня 2010. 
  33. а б Pyrex. Архів оригіналу за 26 вересня 2018. Процитовано 5 липня 2010. 
  34. Shedskin | Download Shedskin software for free at SourceForge.net. Архів оригіналу за 11 червня 2010. Процитовано 5 липня 2010. 
  35. а б Shed Skin — An Optimizing Python-to-C++ Compiler. Архів оригіналу за 11 серпня 2011. Процитовано 5 липня 2010. 
  36. wxPython. Архів оригіналу за 9 червня 2021. Процитовано 5 липня 2010. 
  37. Архівована копія. Архів оригіналу за 15 червня 2011. Процитовано 5 липня 2010. 
  38. PyOgre: Ogre Wiki. Архів оригіналу за 29 січня 2009. Процитовано 5 липня 2010. 
  39. pythonOCC, 3D CAD/CAE/PLM development framework for the Python programming language. Архів оригіналу за 8 серпня 2011. Процитовано 5 липня 2010. 
  40. Open CASCADE Technology, 3D modeling & numerical simulation. Архів оригіналу за 18 березня 2009. Процитовано 5 липня 2010. 
  41. Результати однієї зі спроб порівняння. Архів оригіналу за 31 серпня 2012. Процитовано 6 липня 2010. 
  42. zephyrfalcon.org::labs::10 Python pitfalls. Архів оригіналу за 10 серпня 2013. Процитовано 6 липня 2010. 
  43. а б в Python/C++ GNU g++. Computer Language Benchmarks Game. ???. Архів оригіналу за 28 січня 2011. Процитовано 1 липня 2009. 
  44. Psyco (англ.) — JIT-компілятор для Python, що дозволяє збільшити швидкість роботи програм в 3-10 разів
  45. unladen-swallow. A faster implementation of Python. code.google. Архів оригіналу за 28 січня 2011. Процитовано 22 червня 2009. «Goals: ... Produce a version of Python at least 5x faster than CPython» 
  46. Python for S60 — OpenSource. Архів оригіналу за 6 серпня 2009. Процитовано 6 липня 2010. 
  47. Typechecking module for Python. Архів оригіналу за 17 серпня 2010. Процитовано 6 липня 2010. 
  48. Method signature checking decorators «Python recipes» ActiveState Code. Архів оригіналу за 13 лютого 2008. Процитовано 6 липня 2010. 
  49. а б PEP-3107. Архів оригіналу за 8 травня 2007. Процитовано 6 липня 2010. 
  50. PEP-3100. Архів оригіналу за 19 червня 2010. Процитовано 6 липня 2010. 
  51. PEP-3124. Архів оригіналу за 3 липня 2007. Процитовано 6 липня 2010. 
  52. FrontPage — The PEAK Developers Center. Архів оригіналу за 12 травня 2008. Процитовано 6 липня 2010. 
  53. PEAK-Rules. Архів оригіналу за 23 липня 2008. Процитовано 6 липня 2010. 
  54. Python 3000 FAQ. Архів оригіналу за 9 листопада 2020. Процитовано 6 липня 2010. 
  55. — Project Hosting on Google Code
  56. perlthrtut — perldoc.perl.org. Архів оригіналу за 22 травня 2008. Процитовано 6 липня 2010. 
  57. Python Package Index: processing 0.52. Архів оригіналу за 13 жовтня 2007. Процитовано 6 липня 2010. 
  58. Parallel Python — Home. Архів оригіналу за 28 травня 2010. Процитовано 6 липня 2010. 
  59. Архівована копія. Архів оригіналу за 6 січня 2010. Процитовано 6 липня 2010. 
  60. pyMPI.sourceforge.net: Putting the py in MPI. Архів оригіналу за 18 жовтня 2007. Процитовано 6 липня 2010. 
  61. Python for Windows [1] [Архівовано 11 вересня 2014 у Wayback Machine.]
  62. Python for UNIX [2] [Архівовано 26 серпня 2014 у Wayback Machine.]
  63. Python for Plan 9[3] [Архівовано 26 серпня 2014 у Wayback Machine.]
  64. Python for Mac OS X[4] [Архівовано 26 серпня 2014 у Wayback Machine.]
  65. Python for Palm OS[5] [Архівовано 22 червня 2013 у Wayback Machine.]
  66. а б в г Python for Other Platforms | SourceForge.net[6] [Архівовано 27 листопада 2020 у Wayback Machine.]
  67. Python endoflife.date (англ.). endoflife.date. Архів оригіналу за 18 вересня 2021. Процитовано 18 вересня 2021. 
  68. What's New In Python 3.0 — Python v3.0.1 documentation. Архів оригіналу за 4 жовтня 2008. Процитовано 5 липня 2010. 
  69. Overview — Python v3.0.1 documentation. Архів оригіналу за 21 липня 2009. Процитовано 5 липня 2010. 
  70. Microsoft додала Python до Excel. // Автор: Артем Житкевич. 22.08.2023
  71. PEP 0 -- Index of Python Enhancement Proposals (PEPs). python.org. Архів оригіналу за 1 липня 2018. Процитовано 30 червня 2018.  (англ.)
  72. PEP 8 -- Style Guide for Python Code. python.org. Архів оригіналу за 29 червня 2018. Процитовано 30 червня 2018.  (англ.)
  73. PyPy (coding-guide). Архів оригіналу за 7 липня 2007. Процитовано 5 липня 2010. 
  74. PyPy (carbonpython). Архів оригіналу за 12 жовтня 2011. Процитовано 5 липня 2010. 
  75. Pyastra: python assembler translator. Архів оригіналу за 9 листопада 2020. Процитовано 12 травня 2022. 
  76. Serdar Yegulalp (JUN 15, 2022). Intro to PyScript: Run Python in your web browser. InfoWorld. Подія сталася на 3:00 AM PDT. Процитовано 26 липня 2022. 
  77. Python Success Stories. Архів оригіналу за 18 червня 2010. Процитовано 5 липня 2010. 
  78. 9 Best Python IDEs and Code Editors. Процитовано 27 липня 2022. 

Посилання[ред. | ред. код]