Знаймо

Додати знання

приховати рекламу

Цей текст може містити помилки.

Python



План:


Введення

Логотип Python, 1990-2005

Python ( [Paɪθ ⟨ə⟩ n] ; Пайтон, широко використовується також російськомовне вимова пітон) [2] - високорівнева мова програмування загального призначення з акцентом на продуктивність розробника і читаність коду. Синтаксис ядра Python мінімалістичний. У той же час стандартна бібліотека включає великий обсяг корисних функцій.

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

Еталонної реалізацією Python є Лари CPython, що підтримує більшість активно використовуваних платформ [3]. Він поширюється вільно під дуже ліберальної ліцензією, що дозволяє використовувати його без обмежень у будь-яких додатках, включаючи пропрієтарні [4]. Є реалізації інтерпретаторів для JVM (з можливістю компіляції), MSIL (з можливістю компіляції), LLVM та інших. Проект PyPy пропонує реалізацію Пітона на самому Пітоні, що зменшує витрати на зміни мови та постановку експериментів над новими можливостями.

Python - активно розвивається мова програмування, нові версії (з додаванням / зміною мовних властивостей) виходять приблизно раз у два з половиною роки. Внаслідок цього і деяких інших причин на Python відсутні ANSI, ISO або інші офіційні стандарти, їх роль виконує CPython.


1. Філософія

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

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

Оригінальний текст (Англ.)
  • Beautiful is better than ugly.
  • Explicit is better than implicit.
  • Simple is better than complex.
  • Complex is better than complicated.
  • Flat is better than nested.
  • Sparse is better than dense.
  • Readability counts.
  • Special cases aren't special enough to break the rules.
  • Although practicality beats purity.
  • Errors should never pass silently.
  • Unless explicitly silenced.
  • In the face of ambiguity, refuse the temptation to guess.
  • There should be one - and preferably only one - obvious way to do it.
  • Although that way may not be obvious at first unless you're Dutch.
  • Now is better than never.
  • Although never is often better than 'right now'.
  • If the implementation is hard to explain, it's a bad idea.
  • If the implementation is easy to explain, it may be a good idea.
  • Namespaces are one honking great idea - let's do more of those!
  • Красиве краще, ніж потворне.
  • Явна краще, ніж неявне.
  • Просте краще, ніж складне.
  • Складне краще, ніж заплутане.
  • Плоске краще, ніж вкладене.
  • Розріджений краще, ніж щільне.
  • Читаність має значення.
  • Особливі випадки не настільки особливі, щоб порушувати правила.
  • При цьому практичність важливіше бездоганності.
  • Помилки ніколи не повинні замовчуватися.
  • Якщо не замовчуються явно.
  • Зустрівши двозначність, відкинь спокусу вгадати.
  • Повинен існувати один - і, бажано, тільки один - очевидний спосіб зробити це.
  • Хоча він спочатку може бути і не очевидний, якщо ви не голландець [6].
  • Зараз краще, ніж ніколи.
  • Хоча ніколи часто краще, ніж прямо зараз.
  • Якщо реалізацію складно пояснити - ідея погана.
  • Якщо реалізацію легко пояснити - ідея, можливо, хороша.
  • Простору імен - відмінна штука! Будемо робити їх побільше!

2. Історія

Розробка мови Python була почата в кінці 1980-х років [7] співробітником голландського інституту CWI Гвідо ван Россум. Для розподіленої ОС Amoeba потрібний розширюваний скриптова мова, і Гвідо почав писати Python на дозвіллі, запозичивши деякі напрацювання для мови ABC (Гвідо брав участь у розробці цієї мови, орієнтованого на навчання програмуванню). У лютому 1991 Гвідо опублікував вихідний текст в ньюсгруппе alt.sources [8]. З самого початку Python проектувався як об'єктно-орієнтована мова.

. Py

Назва мови відбулося зовсім не від виду плазунів. Автор назвав мову на честь популярного британського комедійного телешоу 1970-х " Літаючий цирк Монті Пайтона ". Втім, все одно назву мови частіше асоціюють саме зі змією, ніж з фільмом - піктограми файлів в KDE або в Microsoft Windows і навіть емблема на сайті python.org (до виходу версії 2.5) зображують зміїні голови.

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

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


2.1. Вплив інших мов на Python

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

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

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


3. Портіруемость

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

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

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


4. Типи і структури даних

Python підтримує динамічну типізацію, тобто тип змінної визначається лише під час виконання. Тому замість "привласнення значення змінної" краще говорити про "зв'язуванні значення з деяким ім'ям". У Пітоні є вбудовані типи: булеві, рядки, Unicode -рядки, цілі числа довільної точності, числа з плаваючою комою, комплексні числа і деякі інші. З колекцій Python підтримує кортежі (tuples), списки, словники (асоціативні масиви) і, починаючи з версії 2.4, безлічі. Всі значення в Пітоні є об'єктами, у тому числі функції, методи, модулі, класи.

Додати новий тип можна або написавши клас (class), або визначивши новий тип в модулі розширення (наприклад, написаному мовою C). Система класів підтримує успадкування (одиночне і множинне) і метапрограмування. Можливо успадкування від більшості вбудованих типів і типів розширень.

Всі об'єкти діляться на посилальні і атомарні. До атомарним відносяться int, long, complex і деякі інші. При присвоєнні атомарних об'єктів копіюється їх значення, у той час як для посилальних копіюється тільки покажчик на об'єкт, таким чином, обидві змінні після присвоювання використовують одне і те ж значення. Посилальні об'єкти бувають змінювані і незмінні. Наприклад, рядки і кортежі є незмінними, а списки, словники та багато інших об'єктів - змінними. Кортеж в Пітоні є, по суті, незмінним списком. У багатьох випадках кортежі працюють швидше списків [15], тому якщо ви не плануєте змінювати послідовність, то краще використовувати саме їх.


5. Синтаксис і семантика

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

5.1. Оператори

Набір операторів досить традиційний. Ось деякі з них:

  • умовний оператор if (якщо). Альтернативний блок після else (інакше). Якщо умов і альтернатив кілька, можна використовувати elif (скор. від else if).
  • оператори циклу while (поки) і for (для). Всередині циклу можливе застосування break і continue для переривання циклу і переходу відразу до наступної ітерації відповідно.
  • оператор визначення класу class.
  • оператор визначення функції, методи чи генератора def. Усередині можливе застосування return (повернення) для повернення з функції або методу, а в разі генератора - yield (давати).
  • оператор обробки виключень try - except - else або try - finally (починаючи з версії 2.5, можна використовувати finally, except і else в одному блоці).
  • оператор pass нічого не робить. Використовується для порожніх блоків коду.

Однією з цікавих синтаксичних особливостей мови є виділення блоків коду за допомогою відступів (прогалин чи табуляцій), тому в Пітоні відсутні операторні дужки begin / end, як у мові Паскаль, або фігурні дужки, як у Сі. Такий "трюк" дозволяє скоротити кількість рядків і символів в програмі і привчає до "хорошому" стилю програмування. З іншого боку, поведінка і навіть коректність програми може залежати від початкових прогалин у тексті. Деякі критики мови вважають таку поведінку неінтуітівним і незручним.


5.2. Вирази

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

Окремо варто згадати операцію форматування для рядків (працює за аналогією з printf() з Сі), яка використовує той же символ, що і взяття залишку від ділення:

 >>>  print  (  "Здрастуй,% s!"  %  "Мир"  )  Здрастуй  ,  Світ  ! 

Python має зручні цепочечниє порівняння. Такі умови в програмах - не рідкість:

 1  <=  a  <  10  and  1  <=  b  <  20 

Крім того, логічні операції ( or і and) є ледачими : якщо для обчислення значення операції досить перший операнд, цей операнд і є результатом, в іншому випадку обчислюється другий операнд логічної операції. Це грунтується на властивостях алгебри логіки : наприклад, якщо один аргумент операції "АБО" ( or) є істиною, то і результат цієї операції завжди є істиною. У випадку, якщо другий операнд є складним виразом, це дозволяє скоротити витрати на його обчислення. Цей факт широко використовувався до версії 2.5 замість умовної конструкції:

 (  a  <  b  )  and  "Менше"  or  "Більше або дорівнює" 

Вбудовані типи даних, як правило, мають особливий синтаксис для своїх літералів (записаних у вихідному коді констант):

 "Рядок"  +  'Рядок'  "" "Теж рядок" ""  u  "Юнікод-рядок"  True  or  False  # Булеві літерали  3.14  # Число з плаваючою комою  012  +  0xA  # Числа в вісімковій і шістнадцятковій системах числення  1  + 2j  # Комплексне число  [  1  ,  2  ,  "A"  ]  # Список  (  1  ,  2  ,  "A"  )  # Кортеж  {  'A'  :  1  ,  'B'  :  'B'  }  # Словник  lambda  x: x **  2  # Анонімна функція 

Для списків (і інших послідовностей) Python пропонує набір операцій над зрізами. Особливістю є індексація, яка може здатися новачкові дивною, але розкриває свою узгодженість у міру використання. Індекси елементів списку починаються з нуля. Запис зрізу s[N:M] означає, що в зріз потрапляють всі елементи від N включно до M не включаючи. В якості ілюстрації можна подивитися приклад роботи з послідовностями.


5.3. Імена

Ім'я (ідентифікатор) може починатися з латинської літери будь-якого регістра або підкреслення, після чого в імені можна використовувати і цифри. Як ім'я не можна використовувати ключові слова (їх список можна дізнатися за import keyword; print keyword.kwlist) і небажано перевизначати вбудовані імена. Імена, що починаються на підкреслення, мають спеціальне значення [16].

У кожній точці програми Лари має доступ до трьох просторів імен (тобто відображенням імен в об'єкти): локальному, глобальному і вбудованому.

Області видимості імен можуть бути вкладеними один в одного (всередині обумовленою функції видно імена з навколишнього блоку коду). На практиці з областями видимості і зв'язуванням імен пов'язано кілька правил "гарного тону", про які можна докладніше довідатися з документації.


5.4. Рядки документації

Python пропонує механізм документування коду pydoc. На початок кожного модуля, класу, функції вставляється рядок документації - docstring ( англ. ). Рядки документації залишаються в коді на момент часу виконання, і в мову вбудований доступ до документації [17], що використовується сучасними IDE (наприклад, Eclipse).

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


5.5. Директиви

Починаючи з Python 2.3, для використання в тексті програми символів, що не входять в ASCII, необхідно явно вказувати кодування вихідного коду на початку модуля, наприклад:

 # -*- Coding: utf-8 -*- 

Після цього можна, наприклад, використовувати кирилицю в Unicode-літералах.

6. Можливості

6.1. Інтерактивний режим

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

Так виглядає спілкування з Пітоном в інтерактивному режимі:

 >>>  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 [18] і bpython [19].


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

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

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

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

6.3. Функціональне програмування

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

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

6.4. Модулі і пакети

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


6.5. Інтроспекція

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

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


6.6. Обробка виключень

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

 try  :  # Тут код, який може викликати виключення  raise  Exception  (  "Message"  )  # Exception, це один із стандартних типів виключення (всього лише клас),  # Може використовуватися будь-який інший, в тому числі свій  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).


6.7. Ітератори

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


6.8. Генератори

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

При виклику генератора функція негайно повертає об'єкт-ітератор, який зберігає поточну точку виконання і стан локальних змінних функції. При запиті наступного значення (за допомогою методу 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().


6.9. Управління контекстом виконання

В Python 2.5 з'явилися кошти для управління контекстом виконання блоку коди - оператор with і модуль contextlib. Див: приклад.

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


6.10. Декоратори

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

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

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

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

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

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


6.11. Інші можливості

У 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  ""  ,  line  1  ,  in  <  module  >  AttributeError  :  'X'  object  has no attribute  'WrongMethod'  >>>  X.  wrongMethod  =  lambda  self  :  'Im here'  # Додамо його  >>>  y.  wrongMethod  (  )  # Так як доступ до методу призводить до пошуку по __dict__ класу,  'Im here'  # То wrongMethod стає доступним всім екземплярам 

7. Бібліотеки

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

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

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


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

Крім стандартної бібліотеки існує безліч бібліотек, що надають інтерфейс до всіх системним викликам на різних платформах; зокрема, на платформі 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 [21]. Для Пітона написано багато ORM (SQLObject, SQLAlchemy, Dejavu, Django), виконані програмні каркаси для розробки веб-додатків (Django, Pylons).

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

На стадії розробки [23] знаходиться WSGI - інтерфейс шлюзу з веб-сервером (Python Web Server Gateway Interface).

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

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

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

Експериментальний проект Shedskin передбачає створення компілятора для трансформації неявно типізованих Python програм у оптимізований С + + код. Починаючи з версії 0.22 Shedskin дозволяє компілювати окремі функції в модулі розширень.

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


7.3. Графічні бібліотеки

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

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

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

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


8. Приклади програм

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

9. Профілювання та оптимізація коду

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

 from  timeit  import  Timer  def  case1  (  )  :  # А. інкрементальні конкатенації в циклі  s  =  ""  for  i  in  range  (  10000  )  : S +  =  str  (  i  )  def  case2  (  )  :  # Б. через проміжний список і метод join  s  =  [  ]  for  i  in  range  (  10000  )  : S.  append  (  str  (  i  )  )  s  =  ""  .  join  (  s  )  def  case3  (  )  :  # В. списковому вираз і метод join  return  ""  .  join  (  [  str  (  i  )  for  i  in  range  (  10000  )  ]  )  def  case4  (  )  :  # Г. генераторне вираз і метод join  return  ""  .  join  (  str  (  i  )  for  i  in  range  (  10000  )  )  for  v  in  range  (  1  ,  5  )  :  print  (  Timer  (  "Func ()"  ,  "From __main__ import case% s as func"  % V  )  .  timeit  (  200  )  ) 

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

Тут є кілька очевидних правил:

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

Python має такі особливості та пов'язані з ними правила оптимізації:

  • Виклик функцій є досить дорогою операцією, тому всередині вкладених циклів потрібно намагатися уникати виконання функцій або, наприклад, переносити цикл в функції. Функція, обробна послідовність, ефективніше, ніж обробка тій же послідовності в циклі викликом функції.
  • Намагайтеся винести з глибоко вкладеного циклу все, що можна вирахувати на зовнішніх циклах. Доступ до локальних змінних більш швидкий, ніж до глобальних, або чим доступ до полів.
  • Оптимізатор psyco може допомогти прискорити роботу модуля програми за умови, що модуль не використовує динамічних властивостей мови Пітон.
  • У випадку, якщо модуль проводить масовану обробку даних і оптимізація алгоритму і коду не допомагає, можна переписати критичні ділянки, скажімо, на мові Сі чи Pyrex.

Інструмент під назвою Pychecker [37] допоможе проаналізувати вихідний код на Пітоні і видати рекомендації по знайденим проблем (наприклад, невикористовувані імена, зміна сигнатури методу при його перевантаження і т. п.). В ході такого статичного аналізу вихідного коду можуть бути виявлені і помилки. Pylint [38] покликаний вирішувати близькі завдання, але має ухил у бік перевірки стилю коду.


10. Порівняння з іншими мовами

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

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

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

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


10.1. Недоліки

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

10.1.1. Низька швидкодія

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

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

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

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


10.1.2. Відсутність статичної типізації

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

Існують модулі, які дозволяють контролювати типи параметрів функцій на етапі виконання, наприклад typecheck [45] або method signature checking decorators [46]. Необов'язкова декларація типів для параметрів функції добавлена ​​в Python 3, Лари при цьому не перевіряє типи, а тільки додає відповідну інформацію до метаданих функції для подальшого використання цієї інформації модулями розширень. [47]

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

 len  =  lambda  x: x.  __len__  (  )  # Це лише приклад 

Реалізації та опис [48] [49], приклад реалізації простий перевантаження також є в прикладах програм на Python.

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


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

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


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

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

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

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

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

У версії 3.2 буде впроваджений змінений GIL [61] [62]. Основні нововведення:

  • Переключення за таймаут, а не за кількістю опкодов - у попередній версії GIL звільнявся через кожні 100 операцій. Але операція може виконуватися від наносекунд, до доль секунд. У новій версії блокування буде зніматися кожні 5 мілісекунд;
  • Зменшення накладних витрат і збільшення ефективності у випадку частих перемикань - у деяких системах (в основному в MacOS X) спостерігаються проблема з ефективністю блокування, коли GIL вже захоплений: системні виклики стають дорогими. У новій версії затримки будуть зменшені;
  • Зменшення затримок при перемиканні потоків завдяки введенню механізму примусового перемикання потоку та пріоритетних запитів (коли потік виконує пріоритетний запит, то GIL звільняється якомога швидше).

11. Реалізації

CPython є основною, але не єдиною реалізацією мови програмування Python. Існують також наступні реалізації:

Jython - реалізація Python, що використовує JVM в якості середовища виконання. Дозволяє прозоро використовувати Java бібліотеки [63].

PyS60 [44] - реалізація мови для смартфонів фірми Nokia на платформі Series60.

IronPython - Python для Microsoft. NET і Mono. Компілює Python програми в MSIL, таким чином надаючи повну інтеграцію с. NET системою [64].

Stackless - також написана на С реалізація Python. Це не повноцінна реалізація, а патчі до CPython. Надає розширені можливості багатопотокового програмування і значно більшу глибину рекурсії.

Python for. NET [65] - ще одна реалізація Python для . NET. На відміну від IronPython ця реалізація не компілює Python код в MSIL, а тільки надає інтерпретатор, написаний на C #. Дозволяє використовувати. NET збірки з Python коду.

PyPy [66] - реалізація Python, написана на Python. Дозволяє легко перевіряти нові можливості. У PyPy крім стандартного CPython включені можливості Stackless, Psyco, модифікація AST "на льоту" і багато іншого. У проект інтегровані можливості аналізу Python коду та трансляція в інші мови і байткод віртуальних машин ( C, LLVM, Javascript,. NET з версії 0.9.9). Починаючи з 0.9.0, можлива повністю автоматична трансляція інтерпретатора на C, в результаті чого досягається швидкість, прийнятна для використання (в 2-3 рази повільніше ніж CPython при відключеному JIT для версії 0.9.9). JIT знаходиться в активній доопрацювання.

python-safethread [55] - версія CPython без GIL, що дозволяє одночасно виконувати Python потоки на всіх доступних процесорах. Внесено також деякі інші зміни.

Unladen Swallow [43] - розпочатий Google проект з розробки високоефективного, максимально сумісного з CPython JIT-компілятора на базі LLVM. Згідно з планами з розвитку Python [67] вихідний код Unladen Swallow буде злитий з кодом CPython у версії 3.3 [джерело не вказано 152 дні]. Починаючи з цієї версії Unladen Swallow буде невід'ємною частиною CPython.

tinypy [68] - мінімалістична версія Python. Частина можливостей CPython не реалізована.


12. Подальша розробка

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

12.1. Графік і сумісність

Серії Python 2.x і Python 3.x протягом кількох випусків будуть існувати паралельно, при цьому серія 2.x буде використовуватися для сумісності і швидше за все в неї будуть включені деякі можливості серії 3.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.


12.2. Можливості

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

  • Синтаксична можливість для анотації параметрів і результату функцій (наприклад, для передачі інформації про тип або документування).
  • Повний перехід на 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)) більш неприпустимі.

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

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

RPython [71] - створена в рамках проекту PyPy сильно обмежена реалізація Python без динамізму, виконавчі та деяких інших можливостей. RPython код можна компілювати в безліч інших мов / платформ - C, JavaScript, Lisp,. NET [72], LLVM. На RPython написаний Лари PyPy.

Pyrex [31] - обмежена реалізація Python, але трохи менше, ніж RPython. PyReX розширено можливостями статичної типізації типами з мови С і дозволяє вільно змішувати типізований і не типізований код. Призначений для написання модулів розширень, компілюється в код на мові С.

Cython [73] - розширена версія Pyrex.

pyastra [74] - компілятор Python коду в асемблер для PIC архітектури.

Проект Shedskin [75] - призначений для компіляції неявно статично типізованого Python коду в оптимізований код на мові С + +.


14. Застосування

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

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

Примітки

  1. Розширення. Py використовується для файлів з вихідним текстом програм,. Pyw - для програм з графічним інтерфейсом користувача (в основному в Windows, файли з таким розширенням будуть запущені без запуску консолі), у файлах з розширенням. Pyc Лари зберігає скомпільований байт-код, в. pyo - оптимізований скомпільований байт-код,. pyd використовується для зберігання бінарного коду динамічних бібліотек DLL (у Windows)
  2. Творець мови Гвідо ван Россум наполягає, що назва походить не від рептилії і не від міфічної істоти, а від телевізійного шоу " Літаючий цирк Монті Пайтона ". Див: http://docs.python.org/faq/general # why-is-it-called-python - docs.python.org / faq / general # why-is-it-called -python, однак стилізоване зображення змії давно стало неофіційним символом мови і є елементом офіційного логотипу.
  3. About Python - www.python.org/about/
  4. Python 2.5 license - www.python.org/2.5/license.html
  5. PEP 20 - The Zen of Python - www.python.org/peps/pep-0020.html
  6. Жартівливий натяк на національність Гвідо
  7. The Making of Python - www.artima.com / intv / pythonP.html
  8. http://svn.python.org/view/ * checkout * / python / trunk / Misc / HISTORY - svn.python.org / view / * checkout * / python / trunk / Misc / HISTORY
  9. Index of Python Enhancement Proposals (PEPs) - www.python.org/dev/peps/
  10. Python 3.0 Release - python.org/download/releases/3.0 /
  11. 1 2 Foreword for "Programming Python" (1st ed.) - www.python.org/doc/essays/foreword/
  12. The Making of Python - www.artima.com/intv/python2.html
  13. Python on Android - www.damonkohler.com/2008/12/python-on-android.html (Англ.) . www.damonkohler.com. архіві - www.webcitation.org/5w4n0S15k з першоджерела 28 січня 2011.
  14. Port-Specific Changes: Windows - docs.python.org/whatsnew/2.6.html # port-specific-changes-windows (Англ.) . Python v2.6.1 documentation. What's New in Python 2.6. Python Software Foundation. архіві - www.webcitation.org/5w4n1Glim з першоджерела 28 січня 2011.
  15. Are tuples more efficient than lists in Python? - Stack Overflow - stackoverflow.com/questions/68630/are-tuples-more-efficient-than-lists-in-python
  16. 2.3.2. Reserved classes of identifiers - docs.python.org / reference / lexical_analysis.html # reserved-classes-of-identifiers. Python documentation (18 жовтня 2009). Фотогалерея - www.webcitation.org/5w4n2As6O з першоджерела 28 січня 2011.
  17. ... Цілісність великих проектів на Python будується на двох речах: тести і doc-рядок - softwaremaniacs.org/blog/2005/12/08/django /
  18. http://ipython.scipy.org/ - ipython.scipy.org /
  19. bpython interpreter - www.bpython-interpreter.org/
  20. PEP318 - www.python.org/dev/peps/pep-0318/
  21. eGenix.com - Professional Python Software, Skills and Services - egenix.com /
  22. numarray Home Page - www.stsci.edu / resources / software_hardware / numarray
  23. PEP333 - www.python.org/dev/peps/pep-0333/
  24. Pyste Documentation - www.boost.org / libs / python / pyste / index.html
  25. http://www.riverbankcomputing.co.uk/sip/ - www.riverbankcomputing.co.uk/sip/
  26. http://pyfortran.sourceforge.net/ - pyfortran.sourceforge.net /
  27. Boost.Python - www.boost.org/libs/python/doc/
  28. PyCXX: Write Python Extensions in C - cxx.sourceforge.net /
  29. PyInline: Mix Other Languages ​​directly Inline with your Python - pyinline.sourceforge.net /
  30. Weave - www.scipy.org / Weave
  31. 1 2 Pyrex - www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
  32. wxPython - www.wxpython.org/
  33. PyOpenGL - The Python OpenGL Binding - pyopengl.sourceforge.net /
  34. PyOgre: Ogre Wiki - www.ogre3d.org/wiki/index.php/PyOgre
  35. pythonOCC, 3D CAD / CAE / PLM development framework for the Python programming language - www.pythonocc.org/
  36. Open CASCADE Technology, 3D modeling & numerical simulation - www.opencascade.org/
  37. PyChecker: a python source code checking tool - pychecker.sourceforge.net /
  38. pylint (analyzes Python source code looking for bugs and signs of poor quality.) (Logilab.org) - www.logilab.org/view?rql=Any X WHERE X eid 857
  39. Результати однієї зі спроб порівняння - shootout.alioth.debian.org /
  40. zephyrfalcon.org:: labs:: 10 Python pitfalls - zephyrfalcon.org / labs / python_pitfalls.html
  41. 1 2 3 Python / C + + GNU g + + - shootout.alioth.debian.org/u32/benchmark.php? test = all & lang = python & lang2 = gpp & box = 1. Computer Language Benchmarks Game. ???. архіві - www.webcitation.org/5w4n30Deb з першоджерела 28 січня 2011.
  42. Psyco - psyco.sf.net / (Англ.) - JIT-компілятор для Python, що дозволяє збільшити швидкість роботи програм в 3-10 разів
  43. 1 2 unladen-swallow. A faster implementation of Python - code.google.com / p / unladen-swallow / wiki / ProjectPlan. code.google. - "Goals: ... Produce a version of Python at least 5x faster than CPython" Статичний - www.webcitation.org/5w4n3soB7 з першоджерела 28 січня 2011.
  44. 1 2 Python for S60 - OpenSource - wiki.opensource.nokia.com/projects/PyS60
  45. Typechecking module for Python - oakwinter.com / code / typecheck /
  46. Method signature checking decorators "Python recipes" ActiveState Code - aspn.activestate.com/ASPN/Cookbook/Python/Recipe/426123
  47. PEP-3107 - www.python.org/dev/peps/pep-3107/
  48. http://alpha.sec.ru/ ~ aiv / python / overload / - alpha.sec.ru / ~ aiv / python / overload /
  49. http://python.com.ua/doc/overload.html - python.com.ua / doc / overload.html
  50. FrontPage - The PEAK Developers 'Center - peak.telecommunity.com / DevCenter / FrontPage
  51. PEAK-Rules - peak.telecommunity.com / DevCenter / RulesReadme
  52. PEP-3124 - www.python.org/dev/peps/pep-3124/
  53. overloading-lib - code.google.com / p / overloading-lib /, Бібліотека динамічного перевантаження функцій і методів заснованої на типах аргументів для мови python
  54. Python 3000 FAQ - www.artima.com/weblogs/viewpost.jsp?thread=211200
  55. 1 2 python-safethread - Project Hosting on Google Code - code.google.com / p / python-safethread /
  56. perlthrtut - perldoc.perl.org - perldoc.perl.org / perlthrtut.html
  57. Python Package Index: processing 0.52 - pypi.python.org / pypi / processing
  58. Parallel Python - Home - www.parallelpython.com/
  59. http://datamining.anu.edu.au/ ~ ole / pypar / - datamining.anu.edu.au / ~ ole / pypar /
  60. pyMPI.sourceforge.net: Putting the py in MPI - pympi.sourceforge.net /
  61. What's New In Python 3.2 - Python v3.2b2 documentation - docs.python.org/dev/whatsnew/3.2.html # multi-threading
  62. [Python-Dev] Reworking the GIL - mail.python.org/pipermail/python-dev/2009-October/093321.html
  63. The Jython Project - www.jython.org/
  64. IronPython - www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython
  65. Python for. NET - pythonnet.sourceforge.net /
  66. net.net - The first domain name on the Internet! - codespeak.net / pypy
  67. PEP 3146 - Merging Unladen Swallow into CPython - www.python.org/dev/peps/pep-3146/
  68. tinypy:: home - www.tinypy.org/
  69. What's New In Python 3.0 - Python v3.0.1 documentation - docs.python.org/dev/3.0/whatsnew/3.0.html
  70. Overview - Python v3.0.1 documentation - docs.python.org/3.0/index.html
  71. PyPy [coding-guide] - codespeak.net / pypy / dist / pypy / doc / coding-guide.html # restricted-python
  72. PyPy [carbonpython] - codespeak.net / pypy / dist / pypy / doc / carbonpython.html
  73. Cython: C-Extensions for Python - www.cython.org/
  74. Pyastra: python assembler translator - pyastra.sourceforge.net
  75. Помилка цітірованіяНеверний тег ; для виносок shed-skin-blog немає текст
  76. Python Success Stories - www.python.org / about / success / usa

Література

Російською мовою
На англійській мові
  • Mark Pilgrim. Dive Into Python 3 - diveintopython3.org/d/diveintopython3-pdf-latest.zip. Apress, 2009
  • David Beazley, Guido Van Rossum. Python: Essential Reference. New Riders Publishing, 1999
  • Martin C. Brown. Python: The Complete Reference. McGraw-Hill Professional Publishing, 2001
  • Wesley J. Chun. Core Python Programming. Prentice Hall PTR, 2000
  • Alan Gauld. Learn to Program Using Python: A Tutorial for Hobbyists, Self-Starters, and Those Who Want to Learn the Art of Programming. Addison-Wesley Professional, 2001
  • John E. Grayson. Python and Tkinter Programming. Manning Publications Company, 1999
  • Rashi Gupta. Making use of Python. Wiley, 2002
  • Mark Hammond, Andy Robinson. Python Programming on Win32. O'Reilly, 2000
  • Christopher A. Jones, Fred L. Drake. Python & XML. O'Reilly & Associates, 2001
  • Ivan Van Laningham. Teach Yourself Python in 24 Hours. Sams, 2000
  • Amos Latteier, Michel Pelletier. The Zope Book. New Riders Publishing, 2001
  • Frederik Lundh. Python Standard Library. O'Reilly & Associates, 2001
  • Mark Lutz, David Ascher. Learning Python. O'Reilly, 1999
  • Mark Lutz. Programming Python (2nd Edition). O'Reilly & Associates, 2001
  • Albert Sweigart. Invent Your Own Computer Games with Python - pythonbook.coffeeghost.net /. CC license

Цей текст може містити помилки.

Схожі роботи | скачати
© Усі права захищені
написати до нас
Рейтинг@Mail.ru