4715

Базові поняття програмування на мові Python

Лекция

Информатика, кибернетика и программирование

Спершу доведеться розібратися з певними базовими поняттями. Не варто їх заучувати – достатньо їх зрозуміти хоча би на інтуїтивному рівні. Згодом, під час практичної роботи, все встане на свої місця. Алгоритми і програми П...

Украинкский

2012-11-25

168.5 KB

7 чел.

1. Базові поняття

Спершу доведеться розібратися з певними базовими поняттями. Не варто їх заучувати – достатньо їх зрозуміти хоча би на інтуїтивному рівні. Згодом, під час практичної роботи, все встане на свої місця.

1.1. Алгоритми і програми

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

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

Алгоритм – це описаний зі всіма подробицями спосіб отримання результатів, що задовольняють поставленим умовам, за початковими даними. Програма – це послідовність машинних інструкцій, що описує алгоритм. Зрозуміло, для того, щоб написати програму, потрібно придумати алгоритм.

Комп'ютерні програми зазвичай складаються на спеціальних мовах програмування.

1.2. Мови програмування і рівні абстракції

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

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

Змінна – в програмуванні це буквене позначення області пам'яті, в якій зберігається деяке значення.

Для перекладу мнемокодів у машинні інструкції та імен змінних в адреси комірок пам'яті використовувалася спеціальна програма – транслятор. Мови мнемо-кодів отримали назву асемблерів.

Технології розробки продовжували розвиватися, фахівці шукали нові підходи і незабаром стали викристалізовуватися ідеї, які згодом лягли в основу так званого структурного підходу.

Було відмічено, що всі обчислення зводяться до наступних елементарних дій:

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

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

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

Але, мови високого рівня мають багато переваг:

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

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

Крім того, в змінних, що призначені для зберігання цілих чисел неможливо зберегти, наприклад, рядок.

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

1.3. Формальні і природні мови

Розберемося, чим мови програмування відрізняються від природних мов. Існує два види мов: природні і формальні.

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

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

Формальні мови характерні тим, що мають чіткі синтаксичні правила. Наприклад, 3+3=6 є синтаксично правильним математичним записом, а 3=+6$ – ні. H2O – синтаксично правильна хімічна формула речовини, а 2Zz – ні.

Коли ви читаєте пропозицію природною мовою або вираз на формальній мові, ви визначаєте його структуру, часто не усвідомлено. Цей процес називається синтаксичним аналізом або синтаксичним розбором. Еквівалентний англомовний термін – parsing.

Наприклад, коли ви читаєте фразу «Мама мила раму», ви по пропусках визначаєте початок та кінець слів і лише після цього знаходите підмет («мама») і присудок («мила»). Розібравши синтаксичну структуру, ви можете зрозуміти її сенс – семантику.

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

Використання символу $ у формулі 3=+6$ не має сенсу, і це є однією з причин, чому воно невірне з погляду математики. Та ж проблема в «хімічній» формулі 2Zz: у таблиці Менделєєва немає елементу з позначенням Zz.

Другий тип синтаксичних помилок пов'язаний з неправильною структурою виразів, тобто послідовністю символів. Вираз 3=+6$ має невірну структуру, оскільки відразу після знаку рівності не може слідувати знак додавання. Аналогічно, в молекулярних формулах використовуються нижні індекси, але вони не можуть йти перед позначенням хімічного елементу.

Хоча формальні і природні мови мають багато загального, вони мають ряд важливих відмінностей:

1. Однозначність

У природних мовах безліч ідіом і метафор; часто люди визначають значення фраз залежно від ситуації, в якій вони використовуються. Формальні мови розроблені так, щоб виключити неоднозначність виразів. Це означає, що вираз повинен мати тільки одне значення контексту.

2. Надмірність

Для того, щоб позбавитися від неоднозначності і уникнути нерозумінь у природних мовах використовується надмірність: визначення і доповнення.

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

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

В математиці є цілий розділ, присвячений теорії формальних мов. Саме на математичному апараті цієї теорії засновані синтаксичні аналізатори трансляторів.

1.4. Інтерпретатори і компілятори

Існує два типи трансляторів, що перетворюють початковий код програм у машинні команди: інтерпретатори і компілятори.

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

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

Крім того, такі програми виконуються швидше за рахунок того, що комп'ютеру не доводиться кожного разу перед запуском програми виконувати її розбір і перетворення у зрозумілий для себе вигляд.

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

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

Мова Python є інтерпретованою, оскільки написані на ній програми виконує інтерпретатор.

1.5. Перша програма

Настав час запустити інтерпретатор Python і написати першу програму.

Існує два способи використання інтерпретатора:

  •  Командний режим
  •  Режим виконання програм з файлів.

Якщо в командному рядку інтерпретатора Python ви наберете команду, то інтерпретатор тут же виведе результат її виконання:

>>> print "Hello world!"

Hello world!

Ми набрали команду print "Hello world!", тобто дали вказівку вивести на екран рядок Hello world!, і в наступному рядку інтерпретатор вивів те, що ми просили.

Ми також можемо записати програму у файл і використовувати інтерпретатор для того щоб її виконати. Такий файл називають сценарієм або скриптом (від англ. script – сценарій). Наприклад, використовуючи текстовий редактор, створимо файл prog1.py з наступним змістом: print "Hello world!"

Назви файлів, що містять програми на Python, прийнято завершувати  розширенням .py. Для того, щоб виконати програму, ми маємо передати інтерпретатору як параметр назву скрипта:

$ python prog1.py

Hello world!

У інших програмних середовищах метод запуску програм може відрізнятися, але принцип виклику інтерпретатора залишиться таким же.

  •  Вправа. Спробуйте змінити свою першу програму так, щоб в ній з'явилися синтаксичні помилки: спочатку помилка, пов'язана з нерозпізнаною синтаксичною одиницею (тобто незрозумілим словом), а потім – з неправильною структурою програми (можна спробувати поміняти місцями синтаксичні одиниці).

1.6. Що таке відлагодження?

Програмування – досить складний процес, і цілком природно, коли програміст припускається помилки. Так повелося, що програмні помилки називають «багами» (від англ. bug – жучок). В сленгу програмістів воно використовується достатньо часто разом із словом «глюк». Процес пошуку і усунення помилок в англомовній літературі прийнято позначати терміном debugging ми ж називатимемо його відлагодженням.

Існує три типи помилок, які можуть виникнути в програмах:

  •  синтаксичні помилки (syntax errors),
  •  помилки виконання (runtime errors),
  •  семантичні помилки (semantic errors).

Щоб знаходити і виправляти їх швидше, має сенс навчитися їх розрізняти.

1.6.1. Синтаксичні помилки (syntax errors)

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

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

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

1.6.2. Помилки виконання (runtime errors)

Другий тип помилок зазвичай виникає під час виконання програми (їх прийнято називати винятковими ситуаціями або, коротко – виключеннями, по-англійськи exceptions). Такі помилки мають іншу причину. Якщо в програмі виникає виключення, то це означає, що по ходу виконання відбулося щось непередбачене: наприклад програмі було передано некоректне значення, або програма спробувала розділити якесь значення на нуль, що неприпустимо з погляду дискретної математики. Якщо операційна система надсилає запит на негайне завершення програми, то також виникає виключення. Але в простих програмах це достатньо рідкісне явище, тому можливо, з ними ви зіткнетеся не відразу.

1.6.3. Семантичні помилки (semantic errors)

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

У таких випадках проблема полягає в тому, що семантика написаної програми відрізняється від того, що ви мали на увазі. Пошук таких помилок – завдання нетривіальне, оскільки доводиться переглядати результати роботу програми і розбиратися, що програма робить насправді.

1.6.4. Процес відлагодження

Уміння відлагоджувати програми є дуже важливим навиком для програміста. Процес відлагодження вимагає великих інтелектуальних зусиль і концентрації уваги, але є одним з найцікавіших занять.

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

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

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

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

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

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

1.7 Довідкова система

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

Для спрощення роботи програміста в Python передбачена вбудована змінна __doc__ (починається і закінчується парами символів підкреслення), у якій зазвичай зберігається мінімальна довідкова інформація:

>>> print str.__doc__

str(object)-> string

Return а nice string representation of the object.

If the argument is а string, the return value is the same object.

>>>

Функція str() «представилася» і вивела інформацію про себе: які параметри вона приймає, якого типу значення повертає, і коротко «розповіла», що вона робить.

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

>>> help(tuple)

Help on class tuple in module __builtin__:

class tuple(object)

|  tuple() -> an empty tuple

|  tuple(sequence) -> tuple initialized from sequence's items

|  

|  If the argument is a tuple, the return value is the same object.

|  

|  Methods defined here:

|  

|  __add__(...)

|      x.__add__(y) <==> x+y

|  

|  __contains__(...)

|      x.__contains__(y) <==> y in x

|  

|  __eq__(...)

|      x.__eq__(y) <==> x==y

|  

……………..

|  index(...)

|      T.index(value, [start, [stop]]) -> integer -- return first index of value.

|      Raises ValueError if the value is not present.

|  

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

|  Data and other attributes defined here:

|  

|  __new__ = <built-in method __new__ of type object at 0x1E1CC678>

|      T.__new__(S, ...) -> a new object with type S, a subtype of T

Вихід з довідкової системи здійснюється клавішею [Q].

1.7. Коментарі в програмах

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

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

В Python коментарі позначаються символом # – рядки, що починаються з цього символу, просто ігноруються інтерпретатором і ніяк не впливають на її трансляцію і виконання. Не допускається використання перед символом # лапок:

>>> а = “Це рядок” #Це коментар

>>> b = “#Це вже НЕ коментар”

Крім того, коментарями варто забезпечувати і функції. Для цього передбачений ще один спосіб багаторядкового коментування, воно починається і  закінчується трьома подвійними лапками ”””

def printTwice(value):

"""Описание функції printTwice()

Дана функція набуває значення і виводить його двічі, розділивши пропуском."""

print value, value

Як бачите, коментарі з описом функцій повинні знаходитися відразу після заголовка функції. Вони полягають з подвійні лапки три рази і можуть займати декілька рядків. Більш того, в Python передбачена можливість виведення цих коментарів. Для цього досить скористатися вбудованою змінною __doc__ (починається і закінчується парами символів підкреслення):

>>> print printTwice.__doc__

Опис функції printTwice()

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

Цей же коментар виведе команда довідкової системи Python help(printTwice).

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

1.8. Створення скриптів

Не дивлячись на зручність використання інтерактивного режиму роботи, часто потрібно зберегти початковий програмний код для подальшого використання. В такому разі готуються файли з програмним кодом, які передаються інтерпретатору на виконання. По відношенню до мов програмування, що інтерпретуються, часто початковий код називають скриптом. Файли з кодом на Python зазвичай мають розширення *.py.

Підготувати скрипти можна в середовищі IDLE. Для цього, після запуску середовища в меню потрібно вибрати команду File New Window (Crtl + N), відкриється нове вікно.

Потім бажано відразу зберегти файл з розширенням *.py. командою FileSave As. За замовченням, файл буде збережено в корні C:\Python26. Після того, як код буде написано, слід знов зберегти файл.

Увага: якщо набирати код, не зберігши файл на початку, то не буде здійснюватися підсвічування синтаксису.

Для запуску скрипту потрібно виконати команду меню Run Run Module (F5). Після цього в першому вікні (де "працює" інтерпретатор) з'явиться результат виконання коду.

Насправді скрипти можна писати в будь-якому текстовому редакторі (бажано, щоб він підтримував підсвічування синтаксису мови Python). Також існують спеціальні програми для розробки, що надають додаткові можливості і зручності.

Запускати підготовлені файли можна не тільки в IDLE, але і в консолі за допомогою команди python адрес/имя_файла.

Крім того, існує можливість налаштувати виконання скриптів за допомогою подвійного кліка по файлу (у Windows дана можливість присутня спочатку).

1.9 Поняття модуля

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

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

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

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

Модулі підключаються до програми (або іншого модуля) з допомогою оператора import, після якого імена з простору імен модуля стають доступними.

Які саме імена стають доступні, визначає оператор import: варіант import module робить доступним рівне одне ім'я - ім'я модуля module, та зате через це ім'я можна використовувати всі глобальні імена модуля у вигляді module.name.

У варіанті from module import name з модуля імпортується вказане ім'я або список імен. У варіанті from module import * з модуля імпортуються всі імена. Хоча автор модуля може обмежити цей список, а у відсутності такого обмеження не імпортуються імена, що починаються з підкреслення, - вважається, що це внутрішні імена модуля, що не входять до його публічного інтерфейсу.

Імпортування модулів

import <модуль1> [, <модуль2> ]*

Під’єднує зовнішні модулі.

from <модуль> import <имя1> [, <имя2> ]*

Імпортування імен (функцій, класів, змінних тощо) з <модуля>. 

from <модуль> import *

Імпортує всі імена з <модуля>, за виключенням імен, що починаються з символу  "_". 

Стандартна бібліотека Python

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

Розглянемо докладніше стандартну бібліотеку Python. Бібліотека складається з кількох розділів.

  •  По-перше, модулі, що дають доступ до нутрощів інтерпретатора і особливостей мови і реалізації.
  •  По-друге, модулі для маніпуляції з рядками, у тому числі і з юнікодовими рядками.
  •  Модулі, що дають доступ до системної бібліотеки, в першу чергу математичні функції.
  •  Модулі для написання тестів в стилі Extreme Programming.
  •  Модулі для (відносно) переносимого способу доступу до функцій операційної системи.
  •  У бібліотеку ж входить простій покроковий відлагоджувач та профілірувальник - засіб знаходження "вузьких місць" коду.
  •  Окремий великий розділ бібліотеки - мережні протоколи і засоби Інтернет; Python - відмінний інструмент для написання клієнтів і серверів, CGI, парсеров HTML/XML і т.д.

Модулі

Перший важливий модуль - sys, модуль доступу до Системи. Не операційній системі, а Системі. Тобто до інтерпретатора. Найпопулярніша функція з цього модуля - exit, тобто завершення роботи інтерпретатора. Втім, вона в модулі не єдина. Ще є функції отримання інформації про останнє виключення, хуки для відлагоджувачів та профілірувальників, і тому подібні "потрухи" інтерпретатора. Декілька цікавих змінних - стандартні потоки введення/виводу - stdin, stdout і stderr.

Модулів, що тісно пов'язані з інтерпретатором

Модуль gc дозволяє управляти збіркою сміття.

Модуль atexit дає можливість кожному модулю зареєструвати функцію деинициализации, яка викличеться при завершенні програми.

У модулі types перераховані всі вбудовані типи даних, так що програміст може виконати перевірку if type(myvar) == types.ListType...

Модуль inspect - для інтроспективної об'єктів під час виконання.

Модуль traceback дозволяє отримати і роздрукувати інформацію про виключення. Parser дійсно дає доступ до внутрішнього парсеру мови, а imp дозволяє управляти імпортом модулів. Здавалося б, навіщо їм управляти? Дуже просто - раптом програма розповсюджується в нестандартному вигляді або на нестандартному носієві, скажімо, в zip-файлі. Тут можливість імпортувати модулі особливим чином програмістові сильно стане в нагоді.

Модулі marshal, pickle і shelve дозволяють серіалізовувати об'єкти, тобто перетворювати їх на потік байт, який потім можна зберегти у файл або передати по мережі. Згодом серіалізовані об'єкти можна відновити засобами тих же модулів. Marshal вміє серіалізовувати тільки вбудовані типи даних, включаючи Python-овський байт-код. Цей модуль використовується самим інтерпретатором для завантаження збереженого байт-коду з файлу при імпорті модуля. Pickle не вміє серіалізовувати і відновлювати байт-код, і це зроблено спеціально, для безпеки, щоб програміст був упевнений, що не отримає по мережі вірус в байт-коді. Зате у pickle є засоби, за допомогою яких програміст може управляти серіалізацією і відновленням своїх об'єктів. Модуль shelve дозволяє зберігати серіалізовані об'єкти в дискових хешах (BERKELEYDB, (G/N) DBM).

Модулі dumbdbm, dbm, gdbm, bsddb надають доступ до відповідних вбудованих баз даних.

Модуль anydbm є оболонкою з єдиним API, який дозволяє використовувати будь-яку базу даних.

Модуль whichdb дозволяє визначити, в якому форматі є поточна база даних.

String - модуль для маніпуляції з рядками без регулярних виразів. Тут зібрані функції для пошуку підрядка в рядку, заміни і тому подібне.

Регулярні вирази - в модулі re. Довгий час цей модуль був інтерфейсом до бібліотеки PCRE (Perl-Compatible Regular Expressions), але в Python 2.0 був повністю переписаний для того, щоб працювати не тільки з ASCII-рядками, але і з юнікодом.

Модуль locale дає доступ до функцій локалізації, наявних в операційній системі; при установки локалі цей модуль модифікує змінні модуля string відповідно до встановленої локалі.

Модулі для інтерфейсу з операційною системою

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

Модуль thread містить низькорівневий переносимий інтерфейс до потоків (ниткам, "легким" процесам) операційної системи.

Модуль threading містить класи - високорівневі оболонки модуля thread в стилі Java; тут є класи Thread, Lock, Condition, Event, Semaphore.

Модуль mmap надає переносимий інтерфейс до файлів, що відображаються в пам'ять.

Модулі glob і fnmatch дозволяють маніпулювати шаблонами імен файлів.

Бібліотека signal дозволяє встановлювати обробники для асинхронних подій (POSIX signals в тих ОС, яких ці сигнали підтримують).

Окрему групу складають модулі, специфічні для юнікса:

  •  posix і posixfile (низькорівневі частини модуля os),
  •  pwd і grp (доступ до функцій паролів, отримання інформації про користувачів і групи користувачів),
  •  модуль crypt,
  •  модулі tty і pty (функції терміналу і псевдотерміналу),
  •  модуль fcntl (доступ до системних викликів fcntl і ioctl),
  •  модуль resource (системні виклики get/set-rlimit, getrusage),
  •  модуль syslog,
  •  модулі pipes і cmd.

Є модулі для доступу до зовнішніх бібліотек.

Модулі zlib/gzip/zipfile дають доступ до відповідних функцій компресії (архівації).

Модулі readline і rlcompleter - до бібліотеки GNU readline.

Бібліотеки math, cmath, random дають програмістові доступ до широкого спектру математичних функцій.

Декілька модулів криптографії, з яких 2 для доступу не до алгоритмів шифрування і дешифровки, а до хешам, - модулі md5 і sha.

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

У дистрибутив Python входить інтерфейс до графічної бібліотеки Tk (насправді в цьому інтерфейсі захований повноцінний Tcl :), самі Tcl/Tk в дистрибутив не входять, їх треба ставити окремо. Є декілька простих модулів для маніпулювання аудіофайлами і файлами зображень.

Мережні протоколи

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

Ця частина бібліотеки влаштована ієрархічно, модулі тут залежать один від одного і один одного інтенсивно використовують. У самому низу знаходяться модулі socket і select. Модуль socket надає об'єктно-орієнтований інтерфейс до функцій мережевих бібліотек ОС. Підтримуються всі види сокетів і всі мережеві протоколи - TCP/IP (включаючи IPv6), UNIX domain, IPX/SPX, і т.д. Модуль select дає доступ до системних викликів select і poll.

Модуль cgi - модуль номер один для написання CGI-скриптів. Модуль дає доступ до переданої від браузера форми, дозволяє перевірити наявність даних, витягнути і обробити ці дані і т.п.

Модулі httplib, ftplib, gopherlib, poplib, imaplib, nntplib, smptlib, telnetlib дають доступ до клієнтських частин відповідних протоколів. Бібліотека urllib дозволяє мати доступ до мережевих ресурсів, URL, що задається; вона, звичайно, використовує бібліотеки httplib, ftplib і nntplib.

Бібліотека urllib2 - складніша версія urllib; вона містить код для доступу до мережевих ресурсів через прокси з авторизацією.

Модуль Cookie дозволяє створювати і обробляти "куки" - блоки інформації, що пересилаються між браузером і HTTP-сервером в цілях створення сесій.

Бібліотека Python містить засоби створення серверів.

Модуль SocketServer містить базові класи, на основі яких пишуться як потокові (TCP), так і датаграммные (UDP) сервери, як многопроцессные (використовуючі os.fork()), так і багатопотокові (multithreading).

Модуль BaseHTTPServer містить базові класи для створення HTTP-серверів.

Модуль SimpleHTTPServer розвиває ці базові класи і дозволяє програмістові писати реакції на запити GET, HEAD і POST.

Модуль CGIHTTPServer дозволяє розширювати функціональність сервера зовнішніми програмами.

Модулі asyncore і asynchat дозволяють писати асинхронні (на основі select/poll) клієнти і сервери. Найбільш відомі асинхронні сервери - однопоточный многопротокольный сервер Medusa і зроблений на її основі багатопотоковий ZServer, що є ядром сервера web-застосувань Zope. Найбільш відомий клієнт: Asynchronous HTTP Client.

Крім мережевих протоколів, Python дозволяє маніпулювати і з даними, бігаючими поверх цих протоколів. Модуль rfc822 дозволяє читати дані у форматі відповідного RFC і отримувати інформацію про заголовки повідомлення.

Модуль mimetools розширює rfc822 у бік відповідного стандарту і дозволяє розбирати складні складені повідомлення.

Модуль MimeWriter дозволяє їх створювати.

Модулі binhex, uu, binascii, base64, quopri дозволяють кодувати і декодувати тексти.

Модулі mailcap, mimetypes, netrc, robotparse витягують інформацію з відповідних файлів.

Модулі mailbox і mhlib дозволяють читати поштові скриньки у форматі UNIX mbox і MH.

Модулі sgmllib, htmllib і xmllib дозволяють створювати парсери для файлів відповідних форматів. Модуль sgmllib підтримує підмножина SGML, достатня лише для обробки HTML. Модуль htmllib розширює попередній модуль у бік написання текстових форматеров для HTML. А ось xmllib дійсно містить повноцінні парсеры XML. Парсеров цих буває 2 типи - що працюють зі всім деревом відразу (DOM, Document Object Model) і розбір, керований подіями (SAX). Бібліотека ця до того ж містить хуки, що дозволяють адміністраторові встановити поверх неї іншу версію, не стираючи старої; існує декілька альтернативних реалізацій, що використовують ці хуки: PyXML і 4Suite. Всі ці бібліотеки використовують низькорівневий парсер Expatякий не входить в дистрибутив Python; його треба встановлювати окремо.

Інші модулі

Крім перерахованих модулів стандартної бібліотеки, що входять в дистрибутив інтерпретатора, для Python існує маса додаткових модулів, які можна узяти в Інтернеті. Існує навіть каталог таких модулів, що називається Парнас. Є навіть комерційні фірми, що випускають модулі для Python, - і багато хто з цих модулів доступний вільно! На перше місце я поставлю фірму Zope Corporationщо вільно віддає сервер web-застосувань Zope. Окрім них відомі PythonWare / Secret Labs з своїми модулями PIL (Python Imaging Library), xmlrpclib, soaplib, нова версія Tkinter, Pythonware Sound Toolkit; ReportLab з своєю бібліотекою генерації PDF; Numerical Python - розширення Python для ефективної обробки матриць; Scientific Python - для наукових розрахунків (використовує NumPy); eGenix з своїми модулями mxDateTime (маніпуляції з датами і часом), mxtextTools (ефективна обробка текстів), mxODBC (комерційний модуль для доступу до реляційних БД, в т.ч. і з юнікса).

Існують модулі, що дозволяють вбудовувати інтерпретатор Python в Apache. Найпростіший з них PyApache. Mod_Python складніший, він інтенсивніше кешує байт-код, має об'єктно-орієнтований API, дозволяє писати хендлери для Апача. Mod_Snake дозволяє писати хендлери для Апача 2.0.

Велика кількість модулів для доступу до баз даних, і не тільки реляційним, наприклад PyBSDDB для доступу до BerkeleyDB3. Модулі для доступу до реляційних БД задовольняють специфікації Python DB API 2.0: PyGreSQL для доступу до PostgreSQL (модуль входить в дистрибутив POSTGRESQL); MySQLdb для доступу до MYSQL.

Крім Tk, програми з графічним інтерфейсом на Python можна писати з використанням багатьох інших бібліотек: WxPython для WxWidgets; PyGTK для GTK; а бібліотека Python XLib є повністю переписаною  бібліотекою xlib! PLWM - це Window Mnager написаний на Python.


 

А также другие работы, которые могут Вас заинтересовать

82501. Общая характеристика англо-саксонской правовой системы (правовой семьи общего права) 25.43 KB
  Данная семья характеризуется следующими признаками: основным источником права выступает судебный прецедент правила поведения сформулированные судьями в их решениях по конкретному делу и распространяющиеся на аналогичные дела; ведущая роль в формировании права правотворчестве отводится суду который в этой связи занимает особое положение в системе государственных органов; на первом месте находятся не обязанности а права человека и гражданина защищаемые прежде всего в судебном порядке; главенствующее значение имеет в первую очередь...
82503. Характеристика прецедента как источника права в системе общего права Англии 25.62 KB
  Решения высшей инстанции – палаты лордов – обязательны для всех других судов. Апелляционный суд состоящий из двух отделений гражданского и уголовного обязан соблюдать прецеденты палаты лордов и свои собственные а его решения обязательны для всех нижестоящих судов. Высокий суд все его отделения связан прецедентами обеих вышестоящих инстанций его решения обязательны для всех нижестоящих инстанций а также не будучи строго обязательны влияют на рассмотрение дел в его отделениях. Окружные и магистратские суды обязаны следовать...
82504. Общая характеристика судебной системы Великобритании 25.93 KB
  Судебная система Великобритании включает в себя: магистратские суды – рассматривают как правило без участия присяжных заседателей преступления не представляющие значительной общественной опасности преступления по обвинительному акту тяжкие преступления гражданские иски административные дела; суды графств – являются основными судами первой инстанции по гражданским делам; Верховный суд Великобритании. Особенности судебной системы Великобритании проявляются в наличии следующих судов: Королевский суд Лондона – это высшая инстанция...
82505. Формирование американского права 27.12 KB
  Ллевелина Традиции общего права выделяются три периода развития американского права: первый – с 1800 г. Богдановская выделяет четыре этапа в развитии американского права. Первый – этап утверждения прецедентного права в колониальный период.
82506. Особенности и тенденции развития современного американского права 27.6 KB
  Федеративное устройство США ставит на повестку дня вопрос о единстве правовой системы страны. Наличие Конституции США ограничивает свободу действий как законодательных так и судебных органов в части внесения изменений в организацию правосудия. Втретьих реализация принципа разделения властей дополняет с введением судебного контроля за конституционностью законов При этом Верховный суд США напоминает скорее законодательный чем правоприменительный орган особенно когда создаваемая им норма распространяется не на рассматриваемое дело а на дела...
82507. Характеристика судебной системы США 26.5 KB
  Кроме того в систему федеральных судов входят так называемые специализированные суды имеющие отдельную компетенцию с правом вынесения приговоров и решений налоговый суд суд по делам военнослужащих суд по таможенным и патентным делам претензионный суд. Районные суды рассматривают уголовные и гражданские дела в качестве суда первой инстанции. Апелляционные окружные суды осуществляют проверку решений районных судов а также рассматривают жалобы на решения ряда административных квазисудебных органов например Национального управления...
82508. Общая характеристика мусульманской правовой семьи 28.91 KB
  История развития мусульманской правовой системы неразрывно связана с формированием мусульманской религиозной культуры. Но в Коране было упомянуто о том что мнение единое во всей мусульманской общине не может быть неверным. Иджма мнение по правовым вопросам авторитетных ученыхтеологов которое представлено как мнение всей мусульманской общины.
82509. Общая характеристика правовых систем стран Дальнего Восток 26.29 KB
  К отличительным критериям на основе которых можно определить к какой правовой семье следует отнести ту или иную правовую систему принадлежит также восприятие права как исключительно важного социального инструмента регулирования общественных отношений. Поэтому описание китайского и японского права позволит выявить некоторые важные и характерные элементы общей дальневосточной концепции права. Все западные правовые системы независимо от того относятся ли они к семье романогерманского или общего права едины в том что важнейшие вопросы...