|
Персональные инструменты |
|||
|
PythonМатериал из CustisWikiВерсия от 11:50, 6 мая 2008; StasFomin (обсуждение | вклад) Python современный, очень популярный, красивый, мощный и удобный интерпретируемый, расширяемый и встраиваемый, объектно-ориентированный язык (со множественным наследованием), включающий даже элементы функционального программирования. Т.е. это живой язык, активно использующийся для программирования как «обычных», пользовательских приложений, с переносимым оконным (см. например wxPython), или веб-приложений (см. например Zope). Растет его сфера использования в научных целях, для прототипирования и разработки новых алгоритмов, для анализа или визуализации данных (см. например Scientific Python). Здесь, мы рассмотрим только базовые свойства синтаксиса, чтобы можно было устранить непонимание текстов, отдельных, не больше страничек, функций и процедур на Python, а за всем остальным, добро пожаловать на http://www.python.org. Здесь мы представим краткое введение в язык Python, в первую очередь для того, чтобы обеспечить однозначное понимание представленных на языке Python алгоритмов. Вообще, трудно найти другой язык, одновременно пригодный для обучения с одной стороны, и достаточно мощный, для реализации реальных приложений (включая научные). Дело в том, что автор Питона (Guido van Rossum) долгое время участвовал в проекте создания языка обучения программированию ABC, который должен был заменить BASIC, и вынес из проекта несколько ценных идей, как минимизировать синтаксические накладные расходы, которые необходимы в реальном языке программирования (сложные декларации, открытия/закрытия блоков), избежав при этом каббалистического минимализма (доступных только адептам пониманию взаимодействия спецсимволов типа "<\@\%\$\^">) в языках типа Perl. В питоне была применена идея синтаксического выделения блоков с помощью отступов (в пределах блока отступ должен быть одинаков), кроме того операторы, начинающие вложенный блок, должны, для повышения читаемости, отделяться двоеточием: if len(EP)>0: # ищем вершину, к которой можно добавить цикл for i in range(0,len(EP)): if G.degree(EP[i])>0: v=EP[i] break else: # Подготавливаем пока пустой EP к присоединению цикла v=G.nodes()[0] # выбираем первую попавшуюся вершину EP.append(v) # и добавляем ее в EP i=0 Далее, все переменные в питоне являются однотипными ссылками на объекты. Таким образом, устраняется необходимость декларации переменных, переменная определяется в момент первого присваивания и тип хранимого в ней объекта может быть переопределен последующими присваиваниями. def euler_circuit(G): EP=[] # Эйлеров цикл - массив вершин. Кстати, можно присваивать одно и то же значение нескольким переменным одновременно: >>> x = y = z = 0 # Присвоим нуль переменным x,y,z >>> x 0 Также, интерпретатор берет на себя все управление памятью (резервирование, сборка мусора и т. п.). Непосредственно в язык встроенны не только примитивные типы данных, как числа и строки, но и более сложные структуры: Кортежи (touples): >>> a=(3,2,1); >>> print a[0]; 3 >>> print a[2]; 1 >>> (к сожалению, индексы в Pythonе, также как и в C, 0-based — увы). Эффективно реализованные словари или хэши (hash): >>> passwords={'stas': 'mysecret555', 'olga': 'mobydick'}; >>> print passwords['stas']; mysecret555 >>> print passwords['olga']; mobydick >>> passwords['oleg']='hellraiser'; >>> print passwords['oleg']; hellraiser Списки или последовательности (list) (включая операции по slicinгу): >>> a=[1,2,4,8,16,32]; >>> print a[3]; 8 >>> print a[3:]; [8, 16, 32] >>> print a[:3]; [1, 2, 4] >>> print a[1:3]; [2, 4] >>> a.append(64); >>> print a [1, 2, 4, 8, 16, 32, 64] >>> a.insert(0,-22); >>> print a [-22, 1, 2, 4, 8, 16, 32, 64] Теперь перечислим основные операторы. Оператор if: if x < 0: x = 0 elif x == 0: print 'Это число - нуль' elif x == 1: print 'Это число - 1' else: print `Это число больше единицы'
for некая_переменная in некий_диапазон : Блок кода после заголовка выполняется, пока некая_переменная принадлежит некому_диапазону (причем этот диапазон может быть списком, числовой последовательностью, массивом каких-либо значений), а если нужно просто организовать цикл «от a до b», то для этого можно воспользоваться функцией range(a,b+1), которая вернет соответствующий список: for i in range(0,len(EP)): if G.degree(EP[i])>0: v=EP[i] break Да, для выхода из цикла можно использовать оператор break. Есть и цикл while, который выполняется пока истинно указанное выражение: while (N>0): if ((N % 2)==0): X=X*X % m N=N/2 else: y=y*X %m N=N-1 print N,X,y Понятна и проста декларация любой функции или процедуры (заметим, что декларации могут быть вложенными): def gcd(a, b): print a,b if a == 0: return b return gcd(b % a, a) Для возврата значений (тип которых, кстати, может быть тоже любым), очевидно, используется return. А оператор print печатает содержимое переданных ему аргументов, пытаясь придать печатный вид кортежам, спискам и словарям. Строковые литералыОчень эстетически приятной вещью в Pythonе является многообразие строчных литералов — т. е. строковых констант. Литералы могут быть однострочные и многострочные, использовать escape-последовательности или не использовать, что дает возможность замечательным образом вставлять в Python-код блоки текста на других языках (программирования или разметки), например: strSQL = """ SELECT a, b, c, d FROM vtable WHERE a=5 """ или strTeX = r''' \vspace{1cm} {\Large %s} \vspace{1cm} \begin{center} Вариант %s \end{center} ''' % (strTitle, intVariant) Т.е. упрощая стандартную документацию, можно сказать что кавычки для литералов могут быть
Также, перед первой кавычкой строкового литерала может идти префикс (один или несколько символов), поясняющих тип константы — обычная, юникод или raw-строка. Например префикс «r» (raw) избавляет (упрощенно говоря — точнее см. документацию к Python) символ «\» от его escape-функции, что дает, например возможность, без проблем включать блоки текста в TeX-разметке. У насРекомендован к инсталляции стандартная версия (не ActiveState), версия 2.4 (2.5 еще слишком сыровата - не все пакеты к ней существуют). x:\python.org\python-2.4.4.msi Статья реплицируется в SMWiki, SBWiki, RDWiki, GZWiki, DPWiki, HRWiki, CBWiki, ORWiki, RAWiki, ITWiki, CRMWiki, NordeaWiki, EvolWiki, TMSWiki.
Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion». Репликация: База Знаний «Заказных Информ Систем» → «Python» |
||