<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://lib.custis.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lic</id>
		<title>CustisWiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="https://lib.custis.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lic"/>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Lic"/>
		<updated>2026-05-04T19:38:50Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Python&amp;diff=2705</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Python&amp;diff=2705"/>
				<updated>2008-05-06T05:38:16Z</updated>
		
		<summary type="html">&lt;p&gt;Lic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Python''' современный, очень популярный, красивый, мощный и удобный интерпретируемый, расширяемый и встраиваемый, объектно-ориентированный язык (со множественным наследованием), включающий даже элементы функционального программирования. Т.е. это живой язык, активно использующийся для программирования как «обычных», пользовательских приложений, с переносимым оконным (см. например wxPython), или веб-приложений (см. например Zope). Растет его сфера использования в научных целях, для прототипирования и разработки новых алгоритмов, для анализа или визуализации данных (см. например [http://www.scipy.org Scientific Python]).&lt;br /&gt;
Здесь, мы рассмотрим только базовые свойства синтаксиса, чтобы можно было устранить непонимание текстов, отдельных, не больше страничек, функций и процедур на Python, а за всем остальным, добро пожаловать на http://www.python.org.&lt;br /&gt;
&lt;br /&gt;
Здесь мы представим краткое введение в язык Python, в первую очередь для того, чтобы обеспечить однозначное понимание представленных на языке Python алгоритмов. &lt;br /&gt;
&lt;br /&gt;
Вообще, трудно найти другой язык, одновременно пригодный для обучения с одной стороны, и достаточно мощный, для реализации реальных приложений (включая научные). Дело в том, что автор Питона (Guido van Rossum) долгое время участвовал в проекте создания языка обучения программированию ABC, который должен был заменить BASIC, и вынес из проекта несколько ценных идей, как минимизировать синтаксические накладные расходы, которые необходимы в реальном языке программирования (сложные декларации, открытия/закрытия блоков), избежав при этом каббалистического минимализма (доступных только адептам пониманию взаимодействия спецсимволов типа &lt;br /&gt;
 &amp;quot;&amp;lt;\@\%\$\^&amp;quot;&amp;gt;) &lt;br /&gt;
в языках типа Perl.&lt;br /&gt;
&lt;br /&gt;
В питоне была применена идея синтаксического выделения блоков с помощью отступов (в пределах блока отступ должен быть одинаков), кроме того операторы, начинающие вложенный блок, должны, для повышения читаемости, отделяться двоеточием:&lt;br /&gt;
&amp;lt;code-python&amp;gt;&lt;br /&gt;
        if len(EP)&amp;gt;0: # ищем вершину, к которой можно добавить цикл&lt;br /&gt;
            for i in range(0,len(EP)):&lt;br /&gt;
                if G.degree(EP[i])&amp;gt;0:&lt;br /&gt;
                    v=EP[i]&lt;br /&gt;
                    break&lt;br /&gt;
        else: # Подготавливаем пока пустой EP к присоединению цикла &lt;br /&gt;
            v=G.nodes()[0] # выбираем первую попавшуюся вершину&lt;br /&gt;
            EP.append(v)   # и добавляем ее в EP&lt;br /&gt;
            i=0    &lt;br /&gt;
&amp;lt;/code-python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее, все переменные в питоне являются однотипными ссылками на объекты. Таким образом, устраняется необходимость декларации переменных, переменная определяется в момент первого присваивания и тип хранимого в ней объекта может быть переопределен последующими присваиваниями. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code-python&amp;gt;&lt;br /&gt;
def euler_circuit(G):&lt;br /&gt;
    EP=[]  # Эйлеров цикл - массив вершин.&lt;br /&gt;
&amp;lt;/code-python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кстати, можно присваивать одно и то же значение нескольким переменным одновременно:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; x = y = z = 0 # Присвоим нуль переменным x,y,z&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; x&lt;br /&gt;
 0&lt;br /&gt;
&lt;br /&gt;
Также, интерпретатор берет на себя все управление памятью (резервирование, сборка мусора и т. п.).&lt;br /&gt;
&lt;br /&gt;
Непосредственно в язык встроенны не только примитивные типы данных, &lt;br /&gt;
как числа и строки, но и более сложные структуры: &lt;br /&gt;
Кортежи (touples):&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; a=(3,2,1);&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print a[0];&lt;br /&gt;
 3&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print a[2];&lt;br /&gt;
 1&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(к сожалению, индексы в Pythonе, также как и в C, 0-based — увы).&lt;br /&gt;
&lt;br /&gt;
Эффективно реализованные словари или хэши (hash):&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; passwords={'stas': 'mysecret555', 'olga': 'mobydick'};&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print passwords['stas'];&lt;br /&gt;
 mysecret555&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print passwords['olga'];&lt;br /&gt;
 mobydick&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; passwords['oleg']='hellraiser';&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print passwords['oleg'];&lt;br /&gt;
 hellraiser&lt;br /&gt;
&lt;br /&gt;
Списки или последовательности (list) (включая операции по slicinгу):&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; a=[1,2,4,8,16,32];&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print a[3];&lt;br /&gt;
 8&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print a[3:];&lt;br /&gt;
 [8, 16, 32]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print a[:3];&lt;br /&gt;
 [1, 2, 4]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print a[1:3];&lt;br /&gt;
 [2, 4]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; a.append(64);&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print a&lt;br /&gt;
 [1, 2, 4, 8, 16, 32, 64]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; a.insert(0,-22);&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print a&lt;br /&gt;
 [-22, 1, 2, 4, 8, 16, 32, 64]&lt;br /&gt;
&lt;br /&gt;
Теперь перечислим основные операторы.&lt;br /&gt;
&lt;br /&gt;
Оператор '''if''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code-python&amp;gt;&lt;br /&gt;
   if x &amp;lt; 0:&lt;br /&gt;
      x = 0&lt;br /&gt;
   elif x == 0:&lt;br /&gt;
      print 'Это число - нуль'&lt;br /&gt;
   elif x == 1:&lt;br /&gt;
      print 'Это число - 1'&lt;br /&gt;
   else:&lt;br /&gt;
      print `Это число больше единицы'&lt;br /&gt;
&amp;lt;/code-python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Оператор '''for''' имеет вид &lt;br /&gt;
  for некая_переменная in некий_диапазон : &lt;br /&gt;
&lt;br /&gt;
Блок кода после заголовка выполняется, пока ''некая_переменная'' принадлежит ''некому_диапазону'' (причем этот диапазон может быть списком, числовой последовательностью, массивом каких-либо значений), а если нужно просто организовать цикл «от a до b», то для этого можно воспользоваться функцией ''range(a,b+1)'', которая вернет соответствующий список:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code-python&amp;gt;&lt;br /&gt;
  for i in range(0,len(EP)):&lt;br /&gt;
      if G.degree(EP[i])&amp;gt;0:&lt;br /&gt;
          v=EP[i]&lt;br /&gt;
          break&lt;br /&gt;
&amp;lt;/code-python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Да, для выхода из цикла можно использовать оператор '''break'''.&lt;br /&gt;
&lt;br /&gt;
Есть и цикл '''while''', который выполняется пока истинно указанное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code-python&amp;gt;&lt;br /&gt;
    while (N&amp;gt;0):&lt;br /&gt;
        if ((N % 2)==0):&lt;br /&gt;
            X=X*X % m&lt;br /&gt;
            N=N/2&lt;br /&gt;
        else:&lt;br /&gt;
            y=y*X %m&lt;br /&gt;
            N=N-1&lt;br /&gt;
        print N,X,y&lt;br /&gt;
&amp;lt;/code-python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Понятна и проста декларация любой функции или процедуры (заметим, что декларации могут быть вложенными):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code-python&amp;gt;&lt;br /&gt;
def gcd(a, b):&lt;br /&gt;
    print a,b&lt;br /&gt;
    if a == 0:&lt;br /&gt;
            return b&lt;br /&gt;
    return gcd(b % a, a)&lt;br /&gt;
&amp;lt;/code-python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для возврата значений (тип которых, кстати, может быть тоже любым), очевидно, используется '''return'''.&lt;br /&gt;
&lt;br /&gt;
А оператор '''print''' печатает содержимое переданных ему аргументов, пытаясь придать печатный вид кортежам, спискам и словарям.&lt;br /&gt;
&lt;br /&gt;
== Строковые литералы ==&lt;br /&gt;
Очень эстетически приятной вещью в [[Python]]е является многообразие строчных литералов — т. е. строковых констант. Литералы могут быть однострочные и многострочные, использовать escape-последовательности или не использовать, &lt;br /&gt;
что дает возможность замечательным образом вставлять в [[Python]]-код блоки текста на других языках (программирования или разметки), например:&lt;br /&gt;
&amp;lt;code-python&amp;gt;&lt;br /&gt;
 strSQL = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
     SELECT a, b, c, d &lt;br /&gt;
     FROM   vtable &lt;br /&gt;
     WHERE a=5&lt;br /&gt;
 &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/code-python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code-python&amp;gt;&lt;br /&gt;
 strTeX = r'''&lt;br /&gt;
  \vspace{1cm} {\Large %s}&lt;br /&gt;
  \vspace{1cm} &lt;br /&gt;
  \begin{center}  Вариант %s&lt;br /&gt;
  \end{center}&lt;br /&gt;
 ''' % (strTitle, intVariant)&lt;br /&gt;
&amp;lt;/code-python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. упрощая стандартную документацию, можно сказать что кавычки для литералов могут быть &lt;br /&gt;
* одинарными или двойными в смысле выбора символа &amp;lt;tt&amp;gt;'&amp;lt;/tt&amp;gt; или &amp;lt;tt&amp;gt;&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* и одинарными или троекратными в смысле повторения — троекратные удобны для многострочных блоков, чтобы не мучаться, добавляя в конец каждой строки escape-символ перевода — &amp;lt;tt&amp;gt;\r&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Также, перед первой кавычкой строкового литерала может идти префикс (один или несколько символов), поясняющих тип константы — обычная, юникод или raw-строка. Например префикс «r» (raw) избавляет (упрощенно говоря — точнее см. документацию к [[Python]]) символ «\» от его escape-функции, что дает, например возможность, без проблем включать блоки текста в [[TeX]]-разметке.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Программирование]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Lic</name></author>	</entry>

	</feed>