Резюме

ред.

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

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

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

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

Щодо опису стандартних об'єктів та модулів, див. Python Library Reference. Python Reference Manual дає більш формальне визначення мови. Щоб писати розширення на C та C++, читайте Extending and Embedding the Python Interpreter та Python/C API Reference. Існує також кілька книжок, що детально розглядають Пайтон.

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

Щоб розігріти ваш апетит

ред.

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

Інша ситуація: можливо вам потрібно працювати з кількома бібліотеками, написаними на C, але традиційний цикл "написання-компіляція-тестування-компіляція" занадто повільний. Вам потрібно розробити програму швидше. Можливо ви написали програму, яка потребує мови розширення, але вам не хочеться створювати нову мову, писати та налагоджувати її інтерпретатор, і потім прив'язувати його до вашої програми.

У таких випадках Пайтон може бути саме тією мовою, що потрібна. Його легко використовувати, у той же час це справжня мова програмування, що має багатшу структуру та підтримує написання більших програм, ніж традиційна оболонка. З іншого боку, Пайтон пропонує зручніше та детальніше виявлення помилок ніж С, і, будучи мовою дуже високого рівня, він має вмонтовані високорівневі типи даних, зокрема гнучкі масиви та словники, для ефективного створення яких на мові С потрібно кілька днів. Завдяки загальнішим типам даних, Пайтон може бути застосований для вирішення набагато ширшого кола проблем, ніж така мова як AWK, чи навіть Perl; водночас багато речей можуть бути створені на Пайтоні так само просто, як і на цих мовах.

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

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

Пайтон дозволяє створювати дуже компактні та читабельні програми. Типова програма, написана на Пайтоні — набагато коротша ніж еквівалентна програма на C чи C++, що відбувається з таких причин:

  • структури даних високого рівня дозволяють виразити складні операції за допомогою однієї інструкції
  • групування інструкцій в блоки робиться за допомогою виділення відступами замість фігурних дужок
  • декларація змінних чи аргументів не потрібна

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

Між іншим, мова називається на честь комедійного шоу від Бі-Бі-Сі "Monty Python's Flying Circus" ("Летючий цирк Монті Пайтона") і не має жодного відношення до рептилій. Жарти про Монті Пайтона не лише дозволяються, але й заохочуються!

Тепер, коли ви всі вже мабуть полюбили Пайтон, ви напевно хочете докладніше ознайомитися з цією мовою. Оскльки найкращий спосіб вивчити мову — це працювати з нею, отож і ми рекомендуємо вам це зробити якнайшвидше.

У наступному розділі йтиметься про механіку користування інтерпретатором. Це доволі банальна, але істотна для розуміння подальших прикладів інформація.

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

Виклик інтерпретатора

ред.
Див. також: Інтерпритатори мов програмування

Якщо інтерпретатор мови Пайтон встановлено, його місцезнаходженням зазвичай є /usr/local/bin/python. Якщо додати /usr/local/bin до змінної оболонки Юнікса PATH (шляхи до файлів що виконуються), то це дасть змогу викликати інтерпретатор за допомогою команди

python

Місце, де живе інтерпретатор, може бути задане під час інсталяції. Якщо ви не певні, де знаходиться виконуваний файл Пайтон, то виконайте команду: which python або запитайте місцевого ґуру чи системного адміністратора (/usr/local/python, наприклад, є популярною альтернативою).

Ввід символу "кінець файла" (Control-D на Unix, Control-Z на Windows) змусить інтерпретатор вийти зі статусом нуль. Якщо це не працює, залишити інтерпретатор можна за допомогою таких команд:

import sys; sys.exit()

А часто просто

exit()

Редагування рядка в інтерпретаторі загалом не дуже складне. На Юніксі той, хто встановив інтерпретатор, міг також додати підтримку бібліотеки GNU для зчитування рядка (GNU readline library), котра надає ширші можливості інтерактивного редагування та пам'ятає історію команд. Чи не найшвидший спосіб перевірити, чи можливе редагування рядка — це введення Control-P відразу після запуску інтерпретатора. Якщо ви чуєте гудок, то редагування рядка діє; див. Додаток A для докладнішої інформації. Якщо ж нічого не відбулося або "P" виведено на консоль, то ця функція недоступна; ви зможете видаляти попередні символи лише один за одним.

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

Інший спосіб запуску інтерпретатора — це "python -c "команда" [аргумент] ...", що виконує дії, задані командою, подібно до того, як діє опція оболонки -c. Тому що інструкції Пайтона часто містять пробіли та інші спеціальні (з перспективи оболонки) символи, найкраще взяти команду в подвійні лапки.

Слід зауважити, що існує різниця між "python файл" і "python ‹ файл". В останьому випадку виклики таких функцій як input() і raw_input(), спробують зчитати ввід з файла. Оскільки парсер уже повністю зчитав файл ще до того, як почалося виконання програми, то сама програма відразу ж отримає кінець файла. У попередньому ж випадку (і це у більшості випадків саме те, що потрібно), ці функції отримають ввід з того файла чи пристрою, що під'єднаний до стандартного вводу інтерпретатора.

Коли використовується файл зі скриптом, інколи буває потрібно розпочати діалоговий режим по закінченні програми. Це можна зробити за допомогою опції -i перед скриптом. (З наведених вище причин цей метод не діє, коли скрипт зчитано зі стандартного вводу).

Передача аргументів

ред.

Якщо назва скрипту і додаткові аргументи відомі інтерпретатору, то вони можуть бути отримані всередині скрипту із системної змінної sys.argv, котра являє собою список рядків. Довжина списку — принаймні один елемент; якщо ж ні скрипту, ані аргументів не подано, sys.argv[0] є порожнім рядком. Якщо назва скрипта задана як '-'(що означає стандартний ввід), то відповідно і sys.argv[0] має значення '-'. Якщо використано ключ командного рядка -c, то sys.argv[0] отримує '-c'. Якщо використано -m модуль, sys.argv[0] отримує повну назву заданого модуля. Опції, задані після -c команда або -m модуль не використовуються інтерпретатором, а залишаються у sys.argv для опрацювання командою чи модулем.

Діалоговий режим

ред.

Коли команди зчитуються з терміналу, інтерпретатор працює у так званому діалоговому режимі. У цьому режимі кожен рядок починається головним запрошенням до вводу, здебільшого три знаки "більше" ("›››"); для продовження вводу рядок починається вторинним запрошенням до вводу, зазвичай три крапки ("... "). Інтерпретатор виводить коротеньке вітання, що складається з номера версії та авторських прав:

python
Python 1.5.2b2 (#1, Feb 28 1999, 00:02:06)  [GCC 2.8.1] on sunos5
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam

Продовження вводу потрібно при вводі багаторядкової конструкції. Розгляньмо як приклад конструкцію з if:

>>>the_world_is_flat = 1
>>>if the_world_is_flat:
...     print "Дивись не впади!"
... 
Дивись не впади!

Інтерпретатор і його середовище

ред.

Обробка помилок

ред.

Якщо трапилась помилка, інтерпретатор видає повідомлення про помилку разом з станом стеку. В діалоговому режимі він повертається до головного запрошення до вводу. Якщо дані було отримано з файла, інтерпретатор вийде з ненульовим статусом після того, як виведе дані стека. (Винятки, що контролюються оператором except у конструкції try у цьому контексті не вважаються помилками). Окремі помилки є безумовно фатальними і тому зумовлюють вихід програми з ненульовим статусом. Усі повідомлення про помилки виводяться на стандартний потік виводу помилок (stderr). Нормальний вивід з команд, що виконуються, подається на стандартний вивід.

Якщо ввести символ переривання (зазвичай Control-C чи DEL) у відповідь на головне чи вторинне запрошення до вводу, весь ввід буде проігноровано й інтерпретатор повернеться до голового запрошення до вводу. (Цього може не статися через певну проблему із пакунком GNU Readline). Якщо ввести символ переривання під час виконання якоїсь команди, то утвориться виняток "переривання клавіатурою" (KeyboardInterrupt), який можна впіймати за допомогою конструкції try.

Виконання скриптів на мові Python

ред.

На Юнікс-подібних системах скрипти, написані на Пайтоні, можуть виконуватися безпосередньо, як скрипти оболонки, якщо додати рядок

#! /usr/bin/env python

(припускається, що за тією адресою встановлений інтерпретатор) на початку скрипта і задати виконуваний статус для файла. "#!" повинні бути першими двома символами файла. На окремих системах цей перший рядок повинен закінчитися юніксовим символом кінця рядка ("\n"), а не макінтошевим ("\r") чи віндовсним ("\r\n"). Зауважте, що символ "#" у мові Пайтон означає початок коментаря.

Файлу можна надати виконуваного статусу за допомогою команди chmod:

$ chmod +x myscript.py

Кодування джерела

ред.

Файл, що містить програму, написану на Пайтоні, може бути створений на основі кодування відмінного від ASCII. Найкращий спосіб вказати кодування — це додати спеціальний коментар відразу після рядка з "#!":

# -*- coding: кодування -*-

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

Якщо ваш текстовий редактор дозволяє зберігати файли у кодуванні UTF-8 з притаманною йому позначкою порядку байтів (byte order mark або BOM), то ви можете використовувати її замість вищезгаданої декларації. Інтегроване середовище для розробки програм на Пайтоні (IDLE) має цю властивість, якщо задано Options/General/Default Source Encoding/UTF-8. (Опції/Загальне/Стандартне кодування джерела/UTF-8) Слід зауважити, що старіші версії Пайтона (2.2 і раніші) не розуміють цієї позначки, не розуміє її й операційна система у файлах з "#!".

Кодування UTF-8 (задане через підпис чи декларацію) дозволяє використовувати переважну більшість мов світу одночасно як у коментарях, так і для задання рядкових констант. Використання символів, що не належать до ASCII, у ідентифікаторах не дозволяється. Щоб відобразити ці символи належним чином ваш редактор повинен розпізнати, що файл закодовано в UTF-8, та використовувати шрифт, здатний відобразити всі символи файла.

Стартові файли для діалогового режиму

ред.

Коли ви використовуєте Пайтон у діалоговому режимі, часто потрібно виконувати певні стандартні команди кожного разу, коли включено інтерпретатор. Цього можна досягти шляхом задання змінної середовища PYTHONSTARTUP, яка вказує на файл з потрібними стартовими командами. Це схоже на використання файла .profile в оболонках Юнікса.

Цей файл зчитується лише в діалоговому сеансі, а не тоді, коли Пайтон виконує команди зі скрипту, чи коли /dev/tty явно задано як джерело усіх команд (в усьому іншому цей сеанс подібний до діалогового). Цей файл виконується у тому ж іменному просторі, де і всі інші діалогові команди. Таким чином, об'єкти, імпортовані та визначенні у ньому, можуть використовуватися безпосередньо під час діалогового сеансу. У цьому файлі також можливо змінити символи вводу sys.ps1 та sys.ps2.

Якщо потрібно зчитати додаткові стартові файли з поточного каталогу, то цього можна досягти за допомогою коду на зразок

if os.path.isfile('.pythonrc.py'): 
    execfile('.pythonrc.py')

Якщо стартовий файл потрібно використати у скрипті, то ця дія повинна бути явно вказана:

import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
    execfile(filename)



наступний
Неформальний вступ до мови Python