Програмування на python частина 1

Чи варто вивчати Python?

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

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

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

Тому ким би не був Новомосковсктель даної статті - досвідченим програмістом або новачком в області розробки ПО, відповіддю на питання, який є і назвою цього розділу, має стати переконливе «так».

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

архітектура Python

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

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

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

Також Python є мовою загального призначення, тому може застосовуватися практично в будь-якій області розробки ПО (standalone, клієнт-сервер, Web-додатки) і в будь-якій предметній області. Крім того, Python легко інтегрується з уже існуючими компонентами, що дозволяє впроваджувати Python в уже написані програми.

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

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

Середовище виконання Python

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

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

На даний момент існують три відомих реалізації середовища виконання для Python: CPython, Jython і Python.NET. Як можна здогадатися з назви, перша середа реалізована на мові C, друга на мові Java, а остання - на платформі .NET.

Середовище виконання Jython - це реалізація Python для роботи з віртуальною Java-машиною (JVM). Підтримується будь-яка версія JVM, починаючи з версії 1.2.2 (поточна версія Java - 1.6). Для роботи з Jython потрібна встановлена ​​Java-машина (середовище виконання Java) і певне знання мови програмування Java. Вміти писати вихідний код на мові Java не обов'язково, проте доведеться мати справу c JAR-файлами і Java-апплетами, а також документацією в форматі JavaDOC.

Яку версію середовища вибрати - залежить виключно від уподобань програміста, взагалі ж рекомендується тримати на комп'ютері і CPython, і Jython, так як вони не конфліктують між собою, а взаємно доповнюють один одного. Середа CPython працює швидше, так як немає проміжного рівня у вигляді JVM; крім того, оновлені версії Python спочатку випускають саме в вигляді середовища CPython. Однак Jython може використовувати будь-який клас Java в якості модуля розширення і працювати на будь-якій платформі, для якої існує реалізація JVM.

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

Початок роботи з Python

Перш ніж почати використовувати Python, необхідно встановити його середовище виконання - в даній статті це CPython і відповідно інтерпретатор python. Існують різні способи установки: досвідчені користувачі можуть самі скомпілювати Python з його загальнодоступного вихідного коду, також можна завантажити з Web-сайту www.python.org вже готові виконувані файли для конкретної операційної системи, нарешті, багато дистрибутиви Linux поставляються з вже встановленим інтерпретатором Python. У цій статті використовується версія Python 2.x для ОС Windows, проте представлені приклади можна запускати на будь-якої версії Python.

Після того як програма установки розгорне виконувані файли Python в зазначений каталог, необхідно перевірити значення наступних системних змінних:

  • PATH. У цієї змінної повинен міститися шлях до каталогу, де встановлений Python, щоб його могла знайти операційна система.
  • PYTHONHOME. Ця змінна повинна містити тільки шлях до каталогу, де встановлений Python. Також в цьому каталозі повинен міститися підкаталог lib, в якому буде виконуватися пошук стандартних модулів Python.
  • PYTHONPATH. Мінлива зі списком каталогів, що містять модулі розширення, які будуть підключатися до Python (елементи списку повинні бути розділені системним роздільником).
  • PYTHONSTARTUP. Чи не обов'язкова змінна, яка визначає шлях до сценарієм Python, який повинен виконуватися кожного разу при запуску інтерактивного сеансу інтерпретатора Python.

Командний рядок для роботи з інтерпретатором має наступну структуру.

PYTHONHOME \ python (опції) [-з команда | файл зі сценарієм | -]

Інтерактивний режим роботи Python

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

Значення обчисленого виразу зберігається в спеціальну змінну з ім'ям «Одиночне підкреслення» (_), так що його можна використовувати в наступних виразах. Завершити інтерактивний сеанс можна сполучення клавіш Ctrl-Z в ОС Windows або Ctrl-D в ОС Linux.

Для перевірки правильності встановлення та працездатності Python можна виконати наступні команди:

c: \> python- v
c: \> python -c "import time; print time.asctime () "

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

Основи синтаксису Python

Нижче наведено дуже важливий аспект, який може здатися дивним програмістам, які вивчають Python в якості другої мови програмування. Справа в тому, що в Python немає символу, який би відповідав за відділення виразів один від одного в вихідному коді, як, наприклад, крапка з комою (;) в C ++ або Java. Крапка з комою дозволяє розділити кілька інструкцій, якщо вони знаходяться на одній фізичній рядку. Також відсутня така конструкція, як фігурні дужки <>, що дозволяє об'єднати групу інструкцій в єдиний блок.

Типи даних, які використовуються в Python

Типи даних, які використовуються в Python, також збігаються з іншими мовами - цілі і речові типи даних; додатково підтримується комплексний тип даних - з реальною і уявною частиною (приклад такого числа - 1.5J або 2j, де J є квадратний корінь з -1). Python підтримує рядки, які можуть бути укладені в одинарні, подвійні або потрійні лапки, при цьому рядки, як і в Java, є immutable-об'єктами, тобто не можуть змінювати своє значення після створення.

Є в Python і логічний тип даних bool c двома варіантами значення - True і False. Однак в старих версіях Python такого типу даних не було, і, крім того, будь-який тип даних міг бути приведений до логічного значення True або False. Всі числа, відмінні від нуля, і непусті рядки або колекції з даними трактувалися як True, а порожні і нульові значення розглядалися як False. Ця можливість збереглася і в нових версіях Python, проте для підвищення Новомосковскемості коду рекомендується використовувати для логічних змінних тип bool. У той же час, якщо необхідно підтримувати зворотну сумісність зі старими реалізаціями Python, то в якості логічних змінних варто використовувати 1 (True) або 0 (False).

Функціональність для роботи з наборами даних

В Python визначені три типи колекцій для зберігання наборів даних:

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

Список - це змінна впорядкована послідовність елементів. Елементи списку також розділяються комами, але задаються вже в квадратних дужках. Для створення списків пропонується функція list ().

Словник є хеш-таблицею, що зберігає елемент разом з його ідентифікатором-ключем. Наступний доступ до елементів виконується теж по ключу, тому одиниця зберігання в словнику - це пара об'єкт-ключ і пов'язаний з ним об'єкт-значення. Словник - це змінна, але не впорядкована колекція, так що порядок елементів в словнику може змінюватися з часом. Здається словник в фігурних дужках, ключ відділяється від значення двокрапкою, а самі пари ключ / значення розділяються комами. Для створення словників доступна функція dict ().

У лістингу 1 наведені приклади різних колекцій, доступних в Python.

Лістинг 1. Види колекцій, доступні в Python

Визначення функцій в Python

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

Синтаксис визначення функцій в Python вкрай простий; з урахуванням викладених вище вимог:

Як видно, необхідно використовувати службове слово def, двокрапка і відступи. Викликати функцію також дуже просто:

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

Якщо функція дуже проста і складається з одного рядка, то її можна визначити прямо на місці використання, в Python подібна конструкція називається лямбда-функцією (lambda). lambda-функція - це анонімна функція (без власного імені), тілом якої є оператор return, який повертає значення деякого виразу. Такий підхід може виявитися зручним в деяких ситуаціях, однак варто зауважити, що повторне використання подібних функцій неможливо ( «де народився, там і пригодився»).

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

висновок