Пользователь
0,0
рейтинг
26 июля 2007 в 12:22

Разработка → Основы языка программирования Python за 10 минут перевод

Python Logo

На сайте Poromenos' Stuff была
опубликована статья, в которой, в сжатой форме,
рассказывают об основах языка Python. Я предлагаю вам перевод этой статьи. Перевод не дословный. Я постарался подробнее объяснить некоторые моменты, которые могут быть непонятны.
Если вы собрались изучать язык Python, но не можете найти подходящего руководства, то эта
статья вам очень пригодится! За короткое время, вы сможете познакомиться с
основами языка Python. Хотя эта статья часто опирается
на то, что вы уже имеете опыт программирования, но, я надеюсь, даже новичкам
этот материал будет полезен. Внимательно прочитайте каждый параграф. В связи с
сжатостью материала, некоторые темы рассмотрены поверхностно, но содержат весь
необходимый метриал.

Основные свойства



Python не требует явного объявления переменных, является регистро-зависим (переменная var не эквивалентна переменной Var или VAR — это три разные переменные) объектно-ориентированным языком.

Синтаксис



Во первых стоит отметить интересную особенность Python. Он не содержит операторных скобок (begin..end в pascal или {..}в Си), вместо этого блоки выделяются отступами: пробелами или табуляцией, а вход в блок из операторов осуществляется двоеточием. Однострочные комментарии начинаются со знака фунта «#», многострочные — начинаются и заканчиваются тремя двойными кавычками «"""».
Чтобы присвоить значение пременной используется знак «=», а для сравнения —
«==». Для увеличения значения переменной, или добавления к строке используется оператор «+=», а для уменьшения — «-=». Все эти операции могут взаимодействовать с большинством типов, в том числе со строками. Например

<blockquote>>>> myvar = <font color="#ff4500">3</font>
>>> myvar += <font color="#ff4500">2</font>
>>> myvar -= <font color="#ff4500">1</font>
<font color="#808080">"""Это многострочный комментарий 
Строки заключенные в три двойные кавычки игнорируются"""</font>
>>> mystring = <font color="#483d8b">"Hello"</font>
>>> mystring += <font color="#483d8b">" world."</font>
>>> <font color="#ff7700"><b>print</b></font> mystring
Hello world.
<font color="#808080"># Следующая строка меняет 
	значения переменных местами. (Всего одна строка!)</font>
>>> myvar, mystring = mystring, myvar</blockquote>


Структуры данных

Python содержит такие структуры данных как списки (lists), кортежи (tuples) и словари (dictionaries). Списки — похожи на одномерные массивы (но вы можете использовать Список включающий списки — многомерный массив), кортежи — неизменяемые списки, словари — тоже списки, но индексы могут быть любого типа, а не только числовыми. "Массивы" в Python могут содержать данные любого типа, то есть в одном массиве может могут находиться числовые, строковые и другие типы данных. Массивы начинаются с индекса 0, а последний элемент можно получить по индексу -1 Вы можете присваивать переменным функции и использовать их соответственно.

<blockquote>>>> sample = <span style="color: black;">[</font><font color="#ff4500">1</font>, <span style="color: black;">[</font><font color="#483d8b">"another"</font>, <font color="#483d8b">"list"</font><span style="color: black;">]</font>, <span style="color: black;">(</font><font color="#483d8b">"a"</font>, <font color="#483d8b">"tuple"</font><span style="color: black;">)</font><span style="color: black;">]</font> <font color="#808080">#Список состоит из целого числа, другого списка и кортежа</font>
>>> mylist = <span style="color: black;">[</font><font color="#483d8b">"List item 1"</font>, <font color="#ff4500">2</font>, <font color="#ff4500">3</font>.<font color="#ff4500">14</font><span style="color: black;">]</font> <font color="#808080">#Этот список содержит строку, целое и дробное число</font>
>>> mylist<span style="color: black;">[</font><font color="#ff4500">0</font><span style="color: black;">]</font> = <font color="#483d8b">"List item 1 again"</font> <font color="#808080">#Изменяем первый (нулевой) элемент листа mylist</font>
>>> mylist<span style="color: black;">[</font>-<font color="#ff4500">1</font><span style="color: black;">]</font> = <font color="#ff4500">3</font>.<font color="#ff4500">14</font> <font color="#808080">#Изменяем последний элемент листа</font>
>>> mydict = <span style="color: black;">{</font><font color="#483d8b">"Key 1"</font>: <font color="#483d8b">"Value 1"</font>, <font color="#ff4500">2</font>: <font color="#ff4500">3</font>, <font color="#483d8b">"pi"</font>: <font color="#ff4500">3</font>.<font color="#ff4500">14</font><span style="color: black;">}</font> <font color="#808080">#Создаем словарь, с числовыми и целочисленным индексами</font>
>>> mydict<span style="color: black;">[</font><font color="#483d8b">"pi"</font><span style="color: black;">]</font> = <font color="#ff4500">3</font>.<font color="#ff4500">15</font> <font color="#808080">#Изменяем элемент словаря под индексом "pi".</font>
>>> mytuple = <span style="color: black;">(</font><font color="#ff4500">1</font>, <font color="#ff4500">2</font>, <font color="#ff4500">3</font><span style="color: black;">)</font> <font color="#808080">#Задаем кортеж</font>
>>> myfunction = <font color="#008000">len</font> <font color="#808080">#Python позволяет таким образом объявлять синонимы функции</font>
>>> <font color="#ff7700"><b>print</b></font> myfunction<span style="color: black;">(</font><font color="#008000">list</font><span style="color: black;">)</font> 
<font color="#ff4500">3</font></blockquote>


Вы можете использовать часть массива, задавая первый и последний индекс через двоеточие «:». В таком случае вы получите часть массива, от первого индекса до второго не включительно. Если не указан первый элемент, то отсчет начинается с начала массива, а если не указан последний — то масив считывается до последнего элемента. Отрицательные значения определяют положение элемента с конца. Например:

<blockquote>>>> mylist = <span style="color: black;">[</font><font color="#483d8b">"List item 1"</font>, <font color="#ff4500">2</font>, <font color="#ff4500">3</font>.<font color="#ff4500">14</font><span style="color: black;">]</font>
>>> <font color="#ff7700"><b>print</b></font> mylist<span style="color: black;">[</font>:<span style="color: black;">]</font> <font color="#808080">#Считываются все элементы массива</font>
<span style="color: black;">[</font><font color="#483d8b">'List item 1'</font>, <font color="#ff4500">2</font>, <font color="#ff4500">3</font>.<font color="#ff4500">1400000000000001</font><span style="color: black;">]</font>
>>> <font color="#ff7700"><b>print</b></font> mylist<span style="color: black;">[</font><font color="#ff4500">0</font>:<font color="#ff4500">2</font><span style="color: black;">]</font> <font color="#808080">#Считываются нулевой и первый элемент массива.</font>
<span style="color: black;">[</font><font color="#483d8b">'List item 1'</font>, <font color="#ff4500">2</font><span style="color: black;">]</font>
>>> <font color="#ff7700"><b>print</b></font> mylist<span style="color: black;">[</font>-<font color="#ff4500">3</font>:-<font color="#ff4500">1</font><span style="color: black;">]</font> <font color="#808080">#Считываются элементы от нулевого (-3) до второго (-1) (не включительно)</font>
<span style="color: black;">[</font><font color="#483d8b">'List item 1'</font>, <font color="#ff4500">2</font><span style="color: black;">]</font>
>>> <font color="#ff7700"><b>print</b></font> mylist<span style="color: black;">[</font><font color="#ff4500">1</font>:<span style="color: black;">]</font> <font color="#808080">#Считываются элементы от первого, до последнего</font>
<span style="color: black;">[</font><font color="#ff4500">2</font>, <font color="#ff4500">3</font>.<font color="#ff4500">14</font><span style="color: black;">]</font></blockquote>


Строки

Строки в Python обособляются кавычками двойными «"» или одинарными «'». Внутри двойных ковычек могут присутствовать одинарные или наоборот. К примеру строка «Он сказал 'привет'!» будет выведена на экран как «Он сказал 'привет'!». Если нужно использовать строку из несколько строчек, то эту строку надо начинать и заканчивать тремя двойными кавычками «"""». Вы можете подставить в шаблон строки элементы из кортежа или словаря. Знак процента «%» между строкой и кортежем, заменяет в строке символы «%s» на элемент кортежа. Словари позволяют вставлять в строку элемент под заданным индексом. Для этого надо использовать в строке конструкцию «%(индекс)s». В этом случае вместо «%(индекс)s» будет подставлено значение словаря под заданным индексом.

<blockquote>>>><b>print</b> <font color="#483d8b">"Name: %s<span style="color: #000099; font-weight: bold;">\n</font>Number: %s<span style="color: #000099; font-weight: bold;">\n</font>String: %s"</font> % <span style="color: black;">(</font>my<b>class</b>.<span style="color: black;">name</font>, <font color="#ff4500">3</font>, <font color="#ff4500">3</font> * <font color="#483d8b">"-"</font><span style="color: black;">)</font>
Name: Poromenos
Number: <font color="#ff4500">3</font>
String: ---
 
strString = <font color="#483d8b">"""Этот текст расположен
на нескольких строках"""</font>
 <br />>>> <font color="#ff7700"><b>print</b></font> <font color="#483d8b">"This %(verb)s a %(noun)s."</font> % <span style="color: black;">{</font><font color="#483d8b">"noun"</font>: <font color="#483d8b">"test"</font>, <font color="#483d8b">"verb"</font>: <font color="#483d8b">"is"</font><span style="color: black;">}</font>
This is a test.</blockquote>


Операторы

Операторы while, if, for составляют операторы перемещения. Здесь нет аналога оператора select, так что придется обходиться if. В операторе for происходит сравнение переменной и списка. Чтобы получить список цифр до числа <number> — используйте функцию range(<number>). Вот пример использования операторов

<blockquote>rangelist = <font color="#008000">range</font><span style="color: black;">(</font><font color="#ff4500">10</font><span style="color: black;">) </font><font color="#808080">#Получаем список из десяти цифр (от 0 до 9)</font>
>>> <font color="#ff7700"><b>print</b></font> rangelist
<span style="color: black;">[</font><font color="#ff4500">0</font>, <font color="#ff4500">1</font>, <font color="#ff4500">2</font>, <font color="#ff4500">3</font>, <font color="#ff4500">4</font>, <font color="#ff4500">5</font>, <font color="#ff4500">6</font>, <font color="#ff4500">7</font>, <font color="#ff4500">8</font>, <font color="#ff4500">9</font><span style="color: black;">]</font>
<font color="#ff7700"><b>for</b></font> number <font color="#ff7700">in</font> rangelist: <font color="#808080">#Пока переменная number (которая каждый раз увеличивается на единицу) входит в список... </font>
    <font color="#808080"># Проверяем входит ли переменная</font>
    <font color="#808080"># numbers в кортеж чисел </font><span style="color: black;">(</font><font color="#ff4500">3</font>, <font color="#ff4500">4</font>, <font color="#ff4500">7</font>, <font color="#ff4500">9</font><span style="color: black;">)</font>
    <font color="#ff7700"><b>if</b></font> number <font color="#ff7700">in</font> <span style="color: black;">(</font><font color="#ff4500">3</font>, <font color="#ff4500">4</font>, <font color="#ff4500">7</font>, <font color="#ff4500">9</font><span style="color: black;">)</font>: <font color="#808080">#Если переменная number входит в кортеж (3, 4, 7, 9)...</font>
        <font color="#808080"># Операция «<b>break</b>» обеспечивает</font>
        <font color="#808080"># выход из цикла в любой момент</font>
        <font color="#ff7700"><b>break</b></font> 
    <font color="#ff7700"><b>else</b></font>:
        <font color="#808080"># «<b>continue</b>» осуществляет "прокрутку"</font>
        <font color="#808080"># цикла. Здесь это не требуется, так как после этой операции </font>
        <font color="#808080"># в любом случае программа переходит опять к обработке цикла</font>
        <font color="#ff7700"><b>continue</b></font>
<font color="#ff7700"><b>else</b></font>:
    <font color="#808080"># «<b>else</b>» указывать необязательно. Условие выполняется</font>
    <font color="#808080"># если цикл не был прерван при помощи «<b>break</b>».</font>
    <font color="#ff7700"><b>pass</b></font> <font color="#808080"># Ничего не делать</font>
 
<font color="#ff7700"><b>if</b></font> rangelist<span style="color: black;">[</font><font color="#ff4500">1</font><span style="color: black;">]</font> == <font color="#ff4500">2</font>:
    <font color="#ff7700"><b>print</b></font> <font color="#483d8b">"The second item (lists are 0-based) is 2"</font>
<font color="#ff7700"><strong>elif</strong></font> rangelist<span style="color: black;">[</font><font color="#ff4500">1</font><span style="color: black;">]</font> == <font color="#ff4500">3</font>:
    <font color="#ff7700"><b>print</b></font> <font color="#483d8b">"The second item (lists are 0-based) is 3"</font>
<font color="#ff7700"><b>else</b></font>:
    <font color="#ff7700"><b>print</b></font> <font color="#483d8b">"Dunno"</font>
 
<font color="#ff7700"><strong>while</strong></font> rangelist<span style="color: black;">[</font><font color="#ff4500">1</font><span style="color: black;">]</font> == <font color="#ff4500">1</font>:
    <font color="#ff7700"><b>pass</b></font></blockquote>


Функции

Для объявления функции служит ключевое слово «def». Аргументы функции задаются в скобках после названия функции. Можно задавать необязательные аргументы, присваивая им значение по умолчанию. Функции могут возвращать кортежи, в таком случае надо писать возвращаемые значения через запятую. Ключевое слово «lambda» служит для объявления элементарных функций .

<blockquote><font color="#808080"># arg2 и arg3 - необязательые аргументы, принимают значение объявленное по умолчни,</font>
<font color="#808080"># если не задать им другое значение при вызове функци.</font>
<font color="#ff7700"><b>def</b></font> myfunction<span style="color: black;">(</font>arg1, arg2 = <font color="#ff4500">100</font>, arg3 = <font color="#483d8b">"test"</font><span style="color: black;">)</font>:
    <font color="#ff7700"><b>return</b></font> arg3, arg2, arg1
<font color="#808080">#Функция вызывается со значением первого аргумента - "Argument 1", второго - по умолчанию, и третьего - "Named argument"</font>.
>>>ret1, ret2, ret3 = myfunction<span style="color: black;">(</font><font color="#483d8b">"Argument 1"</font>, arg3 = <font color="#483d8b">"Named argument"</font><span style="color: black;">)</font>
<font color="#808080"># ret1, ret2 и ret3 принимают значения "Named argument", 100, "Argument 1" соответственно</font>
>>> <font color="#ff7700"><b>print</b></font> ret1, ret2, ret3
Named argument <font color="#ff4500">100</font> Argument <font color="#ff4500">1</font>
 
<font color="#808080"># Следующая запись эквивалентна <b>def</b> f(x): <b>return</b> x + 1</font>
functionvar = <font color="#ff7700"><b>lambda</b></font> x: x + <font color="#ff4500">1</font>
>>> <font color="#ff7700"><b>print</b></font> functionvar<span style="color: black;">(</font><font color="#ff4500">1</font><span style="color: black;">)</font>
<font color="#ff4500">2</font></blockquote>


Классы

Язык Python ограничен в множественном наследовании в классах. Внутренние переменные и внутренние методы классов начинаются с двух знаков нижнего подчеркивания «__» (например «__myprivatevar»). Мы можем также присвоить значение переменной класса извне. Пример:

<blockquote><font color="#ff7700"><b>class</b></font> My<b>class</b>:
    common = <font color="#ff4500">10</font>
    <font color="#ff7700"><b>def</b></font> <span style="color: #0000cd;">__init__</font><span style="color: black;">(</font><font color="#008000">self</font><span style="color: black;">)</font>:
        <font color="#008000">self</font>.<span style="color: black;">myvariable</font> = <font color="#ff4500">3</font>
    <font color="#ff7700"><b>def</b></font> myfunction<span style="color: black;">(</font><font color="#008000">self</font>, arg1, arg2<span style="color: black;">)</font>:
        <font color="#ff7700"><b>return</b></font> <font color="#008000">self</font>.<span style="color: black;">myvariable</font>
 
    <font color="#808080"># Здесь мы объявили класс My<b>class</b>. Функция __init__ вызывается автоматически при инициализации классов.</font>
>>> classinstance = My<b>class</b><span style="color: black;">()</font> <font color="#808080"># Мы инициализировали класс и переменная myvariable приобрела значение 3 как заявлено в методе инициализации</font>
>>> classinstance.<span style="color: black;">myfunction(</font><font color="#ff4500">1</font>, <font color="#ff4500">2</font><span style="color: black;">)</font> <font color="#808080">#Метод myfunction класса My<b>class</b> возвращает значение переменной myvariable</font>
<font color="#ff4500">3</font>
<font color="#808080"># Переменная common объявлена во всех классах</font>
>>> classinstance2 = My<b>class</b><span style="color: black;">()</font>
>>> classinstance.<span style="color: black;">common</font>
<font color="#ff4500">10</font>
>>> classinstance2.<span style="color: black;">common</font>
<font color="#ff4500">10</font>
<font color="#808080"># Поэтому, если мы изменим ее значение в классе My<b>class</b></font> <font color="#808080">изменятся</font>
<font color="#808080"># и ее значения в объектах, инициализированных классом My<b>class</b> </font>
>>> Myclass.<span style="color: black;">common</font> = <font color="#ff4500">30</font>
>>> classinstance.<span style="color: black;">common</font>
<font color="#ff4500">30</font>
>>> classinstance2.<span style="color: black;">common</font>
<font color="#ff4500">30</font>
<font color="#808080"># А здесь мы не изменяем переменную класса. Вместо этого</font>
<font color="#808080"># мы объявляем оную в объекте и присваиваем ей новое значение </font>
>>> classinstance.<span style="color: black;">common</font> = <font color="#ff4500">10</font>
>>> classinstance.<span style="color: black;">common</font>
<font color="#ff4500">10</font>
>>> classinstance2.<span style="color: black;">common</font>
<font color="#ff4500">30</font>
>>> Myclass.<span style="color: black;">common</font> = <font color="#ff4500">50</font>
<font color="#808080"># Теперь изменение переменной класса не коснется </font>
<font color="#808080"># переменных объектов этого класса</font>
>>> classinstance.<span style="color: black;">common</font>
<font color="#ff4500">10</font>
>>> classinstance2.<span style="color: black;">common</font>
<font color="#ff4500">50</font>
 
<font color="#808080"># Следующий класс является наследником класса My<b>class</b></font>
<font color="#808080"># наследуя его свойства и методы, ктому же класс может </font>
<font color="#808080"># наследоваться из нескольких классов, в этом случае запись  </font>
<font color="#808080"># такая: <b>class</b> Otherclass(Myclass1, Myclass2, MyclassN)</font>
<font color="#ff7700"><b>class</b></font> Otherclass<span style="color: black;">(</font>Myclass<span style="color: black;">)</font>:
    <font color="#ff7700"><b>def</b></font> <span style="color: #0000cd;">__init__</font><span style="color: black;">(</font><font color="#008000">self</font>, arg1<span style="color: black;">)</font>:
        <font color="#008000">self</font>.<span style="color: black;">myvariable</font> = <font color="#ff4500">3</font>
        <font color="#ff7700"><b>print</b></font> arg1
 
>>> classinstance = Otherclass<span style="color: black;">(</font><font color="#483d8b">"hello"</font><span style="color: black;">)</font>
hello
>>> classinstance.<span style="color: black;">myfunction(</font><font color="#ff4500">1</font>, <font color="#ff4500">2</font><span style="color: black;">)</font>
<font color="#ff4500">3</font>
<font color="#808080"># Этот класс не имеет совйтсва test, но мы можем </font>
<font color="#808080"># объявить такую переменную  для объекта. Причем</font>
<span style=";;;color: #808080; font-style: italic;"># tэта переменная будет членом только <b>class</b>instance.</font>
>>> classinstance.test = <font color="#ff4500">10</font>
>>> classinstance.test
<font color="#ff4500">10</font></blockquote>


Исключения

Исключения в Python имеют структуру try-except [exceptionname]:

<blockquote><font color="#ff7700"><b>def</b></font> somefunction<span style="color: black;">()</font>:
    <font color="#ff7700"><b>try</b></font>:
        <font color="#808080"># Деление на ноль вызывает ошибку</font>
        <font color="#ff4500">10</font> / <font color="#ff4500">0</font>
    <font color="#ff7700"><b>except</b></font> <font color="#008000">ZeroDivisionError</font>:
		<font color="#808080"># Но программа не "Выполняет недопустимую операцию"</font>
		<font color="#808080"># А обрабатывает блок исключения соответствующий ошибке «ZeroDivisionError»</font>
        <font color="#ff7700"><b>print</b></font> <font color="#483d8b">"Oops, invalid."</font>
 
>>> fn<b>except</b><span style="color: black;">()</font>
Oops, invalid.</blockquote>


Импорт

Внешние библиотеки можно подключить процедурой «import [libname]», где [libname] — название подключаемой библиотеки. Вы так же можете использовать команду «from [libname] import [funcname]», чтобы вы могли использовать функцию [funcname] из библиотеки [libname]

<blockquote><font color="#ff7700"><b>import</b></font> <font color="#dc143c;">random</font> <font color="#808080">#Импортируем библиотеку «random»</font>
<font color="#ff7700"><b>from</b></font> <font color="#dc143c;">time</font> <font color="#ff7700"><b>import</b></font> clock <font color="#808080">#И заодно функцию «clock» из библиотеки «time»</font>
 
randomint = <font color="#dc143c;">random</font>.<span style="color: black;">randint</font><span style="color: black;">(</font><font color="#ff4500">1</font>, <font color="#ff4500">100</font><span style="color: black;">)</font>
>>> <font color="#ff7700"><b>print</b></font> randomint
<font color="#ff4500">64</font></blockquote>


Работа с файловой системой



Python имеет много встроенных библиотек. В этом примере мы попробуем сохранить в бинарном файле структуру списка, прочитать ее и сохраним строку в текстовом файле. Для преобразования структуры данных мы будем использовать стандартную библиотеку «pickle»

<blockquote><font color="#ff7700"><b>import</b></font> <font color="#dc143c;">pickle</font>
mylist = <span style="color: black;">[</font><font color="#483d8b">"This"</font>, <font color="#483d8b">"is"</font>, <font color="#ff4500">4</font>, <font color="#ff4500">13327</font><span style="color: black;">]</font>
<font color="#808080"># Откроем файл C:\binary.dat для записи. Символ «r» </font>
<font color="#808080"># предотвращает замену специальных сиволов (таких как \n, \t, \b и др.).</font>
myfile = <font color="#008000">file</font><span style="color: black;">(</font>r<font color="#483d8b">"C:<span style="color: #000099;">\b</font>inary.dat"</font>, <font color="#483d8b">"w"</font><span style="color: black;">)</font>
<font color="#dc143c;">pickle</font>.<span style="color: black;">dump(</font>mylist, myfile<span style="color: black;">)</font>
myfile.<span style="color: black;">close()</font>
 
myfile = <font color="#008000">file</font><span style="color: black;">(</font>r<font color="#483d8b">"C:<span style="color: #000099;">\t</font>ext.txt"</font>, <font color="#483d8b">"w"</font><span style="color: black;">)</font>
myfile.<span style="color: black;">write(</font><font color="#483d8b">"This is a sample string"</font><span style="color: black;">)</font>
myfile.<span style="color: black;">close()</font>
 
myfile = <font color="#008000">file</font><span style="color: black;">(</font>r<font color="#483d8b">"C:<span style="color: #000099; font-weight: bold;">\t</font>ext.txt"</font><span style="color: black;">)</font>
>>> <font color="#ff7700"><b>print</b></font> myfile.<span style="color: black;">read()</font>
<font color="#483d8b">'This is a sample string'</font>
myfile.<span style="color: black;">close()</font>
 
<font color="#808080"># Открываем файл для чтения</font>
myfile = <font color="#008000">file</font><span style="color: black;">(</font>r<font color="#483d8b">"C:<span style="color: #000099; font-weight: bold;">\b</font>inary.dat"</font><span style="color: black;">)</font>
loadedlist = <font color="#dc143c;">pickle</font>.<span style="color: black;">load(</font>myfile<span style="color: black;">)</font>
myfile.<span style="color: black;">close()</font>
>>> <font color="#ff7700"><b>print</b></font> loadedlist
<span style="color: black;">[</font><font color="#483d8b">'This'</font>, <font color="#483d8b">'is'</font>, <font color="#ff4500">4</font>, <font color="#ff4500">13327</font><span style="color: black;">]</font></blockquote>


Особенности

  • Условия могут комбинироваться. 1 < a < 3 выполняется тогда, когда а больше 1, но меньше 3.
  • Используйте операцию «del» чтобы очищать переменные или элементы массива.
  • Python предлагает большие возможности для работы со списками. Вы можете использовать операторы объявлении структуры списка. Оператор for позволяет задавать элементы списка в определенной последовательности, а if — позволяет выбирать элементы по условию.

<blockquote>>>> lst1 = <span style="color: black;">[</font><font color="#ff4500">1</font>, <font color="#ff4500">2</font>, <font color="#ff4500">3</font><span style="color: black;">]</font>
>>> lst2 = <span style="color: black;">[</font><font color="#ff4500">3</font>, <font color="#ff4500">4</font>, <font color="#ff4500">5</font><span style="color: black;">]</font>
>>> <font color="#ff7700"><b>print</b></font> <span style="color: black;">[</font>x * y <font color="#ff7700"><b>for</b></font> x <font color="#ff7700">in</font> lst1 <font color="#ff7700"><b>for</b></font> y <font color="#ff7700">in</font> lst2<span style="color: black;">]</font>
<span style="color: black;">[</font><font color="#ff4500">3</font>, <font color="#ff4500">4</font>, <font color="#ff4500">5</font>, <font color="#ff4500">6</font>, <font color="#ff4500">8</font>, <font color="#ff4500">10</font>, <font color="#ff4500">9</font>, <font color="#ff4500">12</font>, <font color="#ff4500">15</font><span style="color: black;">]</font>
>>> <font color="#ff7700"><b>print</b></font> <span style="color: black;">[</font>x <font color="#ff7700"><b>for</b></font> x <font color="#ff7700">in</font> lst1 <font color="#ff7700"><b>if</b></font> <font color="#ff4500">4</font> > x > <font color="#ff4500">1</font><span style="color: black;">]</font>
<span style="color: black;">[</font><font color="#ff4500">2</font>, <font color="#ff4500">3</font><span style="color: black;">]</font>
<font color="#808080"># Оператор «any» возвращает true, если хотя   </font>
<font color="#808080"># бы одно из условий, входящих в него, выполняется.</font>
>>> any<span style="color: black;">(</font>i % <font color="#ff4500">3</font> <font color="#ff7700"><b>for</b></font> i <font color="#ff7700">in</font> <span style="color: black;">[</font><font color="#ff4500">3</font>, <font color="#ff4500">3</font>, <font color="#ff4500">4</font>, <font color="#ff4500">4</font>, <font color="#ff4500">3</font><span style="color: black;">])</font>
<font color="#008000">True</font>
<font color="#808080"># Следующая процедура подсчитывает количество </font>
<font color="#808080"># подходящих элементов в списке</font>
>>> <font color="#008000">sum</font><span style="color: black;">(</font><font color="#ff4500">1</font> <font color="#ff7700"><b>for</b></font> i <font color="#ff7700">in</font> <span style="color: black;">[</font><font color="#ff4500">3</font>, <font color="#ff4500">3</font>, <font color="#ff4500">4</font>, <font color="#ff4500">4</font>, <font color="#ff4500">3</font><span style="color: black;">]</font> <font color="#ff7700"><b>if</b></font> i == <font color="#ff4500">3</font><span style="color: black;">)</font>
<font color="#ff4500">3</font>
>>> <font color="#ff7700"><b>del</b></font> lst1<span style="color: black;">[</font><font color="#ff4500">0</font><span style="color: black;">]</font>
>>> <font color="#ff7700"><b>print</b></font> lst1
<span style="color: black;">[</font><font color="#ff4500">2</font>, <font color="#ff4500">3</font><span style="color: black;">]</font>
>>> <font color="#ff7700"><b>del</b></font> lst1</blockquote>


  • Глобальные переменные объявляются вне функций и могут быть прочитанны без каких либо объявлений. Но если вам необходимо изменить значение глобальной переменной из функции, то вам необходимо объявить ее в начале функции ключевым словом «global», если вы этого не сделаете, то Python объявит переменную, доступную только для этой функции.

<blockquote>number = <font color="#ff4500">5</font>
 
<font color="#ff7700"><b>def</b></font> myfunc<span style="color: black;">()</font>:
    <font color="#808080"># Выводит 5</font>
    <font color="#ff7700"><b>print</b></font> number
 
<font color="#ff7700"><b>def</b></font> anotherfunc<span style="color: black;">()</font>:
    <font color="#808080"># Это вызывает исключение, поскольку глобальная апеременная </font>
    <font color="#808080"># не была вызванна из функции. Python в этом случае создает </font>
    <font color="#808080"># одноименную переменную внутри этой функции и доступную</font>
    <font color="#808080"># только для операторов этой функции.</font>
    <font color="#ff7700"><b>print</b></font> number
    number = <font color="#ff4500">3</font>
 
<font color="#ff7700"><b>def</b></font> yetanotherfunc<span style="color: black;">()</font>:
    <font color="#ff7700"><b>global</b></font> number
    <font color="#808080"># И только из этой функции значение переменной изменяется.</font>
    number = <font color="#ff4500">3</font></blockquote>


Эпилог

Разумеется в этой статье не описываются все возможности Python. Я надеюсь что эта статья поможет вам, если вы захотите и в дальнейшем изучать этот язык программирования.

Преимущества Python

  • Скорость выполнения программ написанных на Python очень высока. Это связанно с тем, что основные библиотеки Python
    написаны на C++ и выполнение задач занимает меньше времени, чем на других языках высокого уровня.
  • В связи с этим вы можете писать свои собственные модули для Python на C или C++
  • В стандартныx библиотеках Python вы можете найти средства для работы с электронной почтой, протоколами
    Интернета, FTP, HTTP, базами данных, и пр.
  • Скрипты, написанные при помощи Python выполняются на большинстве современных ОС. Такая переносимость обеспечивает Python применение в самых различных областях.
  • Python подходит для любых решений в области программирования, будь то офисные программы, вэб-приложения, GUI-приложения и т.д.
  • Над разработкой Python трудились тысячи энтузиастов со всего мира. Поддержкой современных технологий в стандартных библиотеках мы можем быть обязаны именно тому, что Python был открыт для всех желающих.
Перевод: Poromenos' Stuff
@Michael_P
карма
42,8
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (160)

  • +2
    спасибо!
    • +1
      Пожалуйста!
  • 0
    Большое спасибо за перевод! Хоть и вряд ли буду на нем писать, но язык очень интересный. Прямо получил удовольствие от изучения =)
    • +1
      Я тоже получил удовольствие от перевода. Вот как все здорово!
  • 0
    Хоть коротенькое описание основных преимуществ языка бы было..
    • 0
      Пожалуйста!
      • 0
        Спасибо )
        Я слышал, он еще архитектурно более удобен для работы с большим количеством сложно взаимосвязанных объектов ..
  • 0
    "Скорость выполнения программ написанных на Python очень высока."
    В сравнении с чем? :)
    И еще у Вас, кажется, пункты 2 и 3 в списке преимуществ перепутаны местами.
    Еще, я бы "list comprehension" перевел бы как "охват списков".
    А вообще хорошая статья и хороший перевод.
    • 0
      Да, вы правы. Исправил.
    • 0
      по сравнению с ruby и php ;)
    • 0
      > по сравнению с ruby и php
      Более того, по сравнению с перлом. По крайней мере, я наблюдал такое у себя, на самописных идентичных скриптах на питоне и перле. Холивары по этому поводу прошу не устраивать, сам перл люблю. Но тем не менее... :)
      • 0
        Я с Вами согласен, но не худо было бы что-то подобное указать в статье :) Поэтому я вопрос и задал.
        • 0
          Думается мне, перл с питоном сравнивать почти так же опасно, как макос с линухом, будут войны многостраничные ;)
          • +3
            Да ладно, все уже давно сравнили до нас: http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=python&lang2=perl
            :)
            • 0
              что за бред? в приведенной выше сцылке питон слин почти всем...

              113 Perl 1,651.96 1,884 1134
              140 Icon 2,042.74 1,228 1271
              147 Python 2,144.89 2,424 1056
              163 PHP 2,381.86 5,636 1273
  • 0
    Огромное спасибо за замечательную работу!
  • 0
    Исключеия -> Исключения
  • +1
    "Python требует не требует явного объявления переменных"
    что бы это значило?...
    • 0
      Например в паскале необходимо перед использованием объявлять переменную в блоке описания переменных. А здесь нет.
      • 0
        blinnn.... "требует не требует" chto znachit?
        • 0
          Это значит что ошибки не возникнет.
          • +2
            значит чего-то я в жизни не понимаю.
          • НЛО прилетело и опубликовало эту надпись здесь
            • 0
              Минус влепил не я, но я наконец понял в чем дело. Сам не заметил опечатку. Испраил!
  • +1
    Кажется лучшее введение в этот язык:
    Magnus Lie Hetland «Мгновенный Python»
    http://www.fortunecity.com/skyscraper/motorola/668/rus/koi/python/belanov/instpy-r.html
    • 0
      Мне кажется материал почти в два раза больше.
      • 0
        Но статья действительно, хорошая. А эта статья с упором на то, чтобы рассказать о Python кратко.
        • 0
          Это у вас получилось, и надо сказать, неплохо... В букмарки однозначно, а то часто спрашивают: «Что бы почитать для начала»
    • +1
      Там уже нет.
      Есть на сайте автора, тут: http://hetland.org/writing/instant-python.html
  • 0
    Исправьте в тексте "картеж" на "кортеж" =)
    • 0
      Какой картеж, подумала Алиса (с) :)
  • 0
    И ортеж" все-таки
    • 0
      Да. Я уже все исправил.
      • 0
        Сори за дабл-пост. Глюк.
    • 0
      Я уже все исправил.
  • 0
    Статья понравилась, так коротко и в то же время полно наверное нигде не видел. Про исключения можно добавить, что в Питоне есть конструкции try-except-finally (начиная с 2.5).
  • 0
    "Вы можете шаблон строки и подставить в него элементы из кортежа или словаря." как-то неправильно звучит )
  • –3
    Очень много грамматических ошибок, читать не приятно :(

    По языку. Не нравится он мне :) Ни капли не жалею, что не стал его изучать :)
    Что именно не нравится:

    Блоки - их просто не видно. Понадобится редактор, который подсвечивает весь блок, от такого глаза быстро устанут.

    Срезы - это просто конец света list[0:2]. С 0 по 2 элемент не включительно! Это ж надо было такое придумать? Есть аргументы? Приведите их пожалуйста.

    Очень понравились условные операторы.

    Преимущества языка какие-то просто громко сказанные. Никогда не поверю, что Python удобнее Perl, и тем более богаче :) Может быть где-то быстрее, но в сегодняшнем мире программирования скорость не главное :) Современные технологии основанные на XML и XSL на производительность просто забивают, так что скорость тут не аргумент. Хотя все зависит от поставленной задачи :)

    В связи с этим вы можете писать свои собственные модули для Python на C или C++

    Ну это просто смешно. Сами подумайте, много ли вы писали модулей для PHP? Для Python напишите ровно столько же ;) Модули должны писаться на том же языке! Для Perl, например, можно писать модули на Perl (и таких большинство) и на Си (для самых требовательных задач), причем используются они одинаково с точки зрения интерфейса.

    В итоге мне понравились только условные операторы.
    Все сказанное сугубо IMHO.
    • 0
      Во первых прошу прощения за грамматические ошибки. Постарался все проверить, но видимо проверил не все… А теперь по порядку:
      1. Не буду спорить с вами о предпочтениях.
      2. Я объяснил так, потому что так понятно. Если мы используем list[0:2], то на выходе мы получим значения list[0], list[1], list[2]. Вот так, а [2] мы уже не получаем. По моему написанно вполне доступно.
      3. а) Каждый выбирает то что ему удобнее.
      б) «Хотя все зависит от поставленной задачи» — вот именно! Для одной поставленной задачи может 2-3 мкс не важны, но в другой эти мкс могут вылиться в что-то большее.
      в) Я говорю что вы можете писать модули для Python. А вот кому это надо — другой вопрос. Возможно просто вы с ними не знакомы.
      4. Я рад, что вам понравились условные операторы.
      • 0
        1. Последняя строчка в моем посте должна была исключить это Ваше замечание ;) IMHO есть IMHO.
        2. Написано доступно, претензия не Вам, а языку. Конструкция не очевидна.
      • 0
        На самом деле, как мне кажется, для бо́льшей простоты понимания конструкцию list[0:2] можно описать как «взять два элемента списка начиная с нулевого»; в этом случае срез как раз берёт элементы с нулевого по второй исключая элемент с индексом 2.
        • 0
          А как нсчет конструкции List[5:7]? По моему как раз выражение «невключительно» описывает большинство ситуаций.
          • 0
            Логично. Я этот момент как-то упустил из виду.
    • 0
      > Блоки - их просто не видно. Понадобится редактор, который подсвечивает весь блок, от такого глаза быстро устанут.
      Если код слеплен так, что отступ блока на пробел больше, чем предыдущего, это не беда языка, это диагноз программиста. При стандартных табовых отступах с размером таба в 4 пробела, как рекомендуется, блоки чудесно видно.
      > Срезы - это просто конец света list[0:2]. С 0 по 2 элемент не включительно! Это ж надо было такое придумать?
      Считайте, что второе значение - это не индекс, а размер среза. Т.е. в указанном list[0:2] мы имеем дело со срезом, начинающимся с элемента с индексом 0 и содержащего в себе 2 элемента - нулевой и первый. Что здесь не так?
      • 0
        Сами хоть поняли что сказали?
        1) Не важно какой отступ, хоть в 10 пробелов, блок все равно явно не выделен. Если между блоками нет пустой строки, они сливаются. Кстати, стандартный "табовый" отступ - 8 пробелов ;)
        2) Пример list[5:6] полностью опровергает ваше высказывание и возвращает только элемент list[5]. Если хотите, можете считать, что второе значение это размер среза, на здоровье ;)
        • 0
          Сам понял. В отличие от многих других, я часто понимаю, что говорю.
          1. А ставить пустую строку в Питоне Вам религия не позволяет? Насчет стандарта - если не секрет, где Вы его взяли? Я считаю стандартом рекомендации автора языка. А Вы?
          2. Спасибо Вам огромное, буду считать не здоровье. Тем не менее, я не услышал ответа на вопрос, что не так в подобной записи. Вы считаете, что "не включительно" не имеет право на существование только потому, что не нравится лично Вам?
          • 0
            1. Я не использую Питон, т.к. он меня полностью не устраивает.
            Насчет стандарта. Здесь ищем высказывание Если разметка не задана, то по умолчанию применяется значение -8 - "стандарт" табуляций системы UNIX

            Из 2 явно следует, что Вы не понимаете о чем говорите. Вы не правы и не признаете этого.
            Я считаю, что "не включительно" в данном контексте просто не интуитивно.
            Если я хочу получить элементы с 5 по 7, мне понятнее будет написать list[5:7], а не list[5:8]. Язык должен читаться.
            • 0
              НАсчет п.2 я с вами согласен. Под записью [5:7] я бы тоже понимал от 5 до семи включительно. Поэтому и уделил внимание записи невключительно. Подумал что это вам и не понравилось.
            • 0
              А Вас не смущает, что для обращения к первому элементу массива в большинстве языков надо написать что-то вроде arr[0]?
              • 0
                Обсуждаемая проблема меня больше смущает.
                С нуля в мире компьютеров считается практически все еще с момента их (компьютеров) зарождения. Так что этот момент никого смущать не должен.
                • 0
                  Ну так отсчеты массива с нуля и особенности механизма срезов в питоне - одного поля ягоды.
                  В общем, мне кажется, что я спорю о вкусе устриц с тем, кто их не ел.
                  • 0
                    Насчет устриц.
                    Мне кажется, что Вы кроме них ничего не ели ;)
                    • 0
                      А Вам почему так кажется?
                      Мне, например, потому что судя по Вашим комментариям в этом топике, вы не написали и десятка строк кода на Питоне, но при этом ничтоже сумняшеся критикуете его, рассказываете, что не удобно и что плохо сделано.
                      • 0
                        Да, не писал. Не пользовался.
                        И не буду пользоваться. Почему? Да потому что синтаксис языка изначально не позволяет мне оформлять код так, как мне нравится. У меня нет свободы, а ее очень люблю.

                        Потом про срезы. Такой формат просто неочевиден. Это самое запутывающее, что я только встречал.

                        И потом, в конце моего поста русским по белому написано IMHO! И это самое IMHO ни в коем случае не должно совпадать ни с Вашим, ни с чьим-либо другим.

                        P.S. Я с Вами общаюсь на русском языке, и всякие вставки типа "ничтоже сумняшеся" есть элементарное неуважение.
                        • 0
                          IMHO - это не белый билет. Если вы выносите своё мнение на общий вид, то будьте готовы, что оно столкнется с другим таким же IMHO. Например, с моим.

                          P.S. Вы мне только что буквально вынесли мозг. Чем Вам не нравится выражение "ничтоже сумняжеся"? Это абсолютно нормальное русское крылатое выражение.
                          • 0
                            Извините за крылатое выражение, не знал. Очень похоже на украинский язык.
                            • 0
                              Какая досада, всю жизнь в Украине прожил, но ни разу не приходило в голову, что это украинский язык. Впрочем, судя по "могущему" русскому, Вы чувствуете себя вполне свободно в суждениях о том, чего не знаете.
            • –1
              1. Насчет стандарта. Повторяю еще раз: автором языка рекомендован размер таба в 4 пробела. Что касается tabs:
              man tabs
              The following options shall be supported:
              -n Specify repetitive tab stops separated by a uniform number of column positions, n, where n is a single-digit decimal number. The default usage of tabs with no arguments shall be equivalent to tabs-8.
              Как видите, ничего и близко похожего на "Особое значение имеет разметка -8: для системы UNIX она является стандартной" из Вашего документа. Откровенно говоря, это больше похоже на домыслы переводчика. Если уж пользуемся документацией, давайте ссылаться на ОРИГИНАЛЫ, а не на не очень удачные переводы.
              По поводу того, что Питон Вы не используете. ВЫ заявили, что в Питоне блоки сливаются потому, что между блоками нельзя поставить пустую строку. Когда Вам указали, что пустую строку поставить можно, ВЫ же заявили, что это значения не имеет, потому что Питон Вы не используете. Ловкий ход, что тут скажешь.
              Из 2 не следует ровным счетом ничего. Я НЕ говорил, что второй индекс - это размер среза. Я сказал, что для КОНКРЕТНОГО приведенного Вами примера его можно трактовать так. Вы же заявили, что "не включительно" - это однозначно плохо. Только после долгой дискуссии Вы сказали, что Вы так считаете. Если бы так было сказано изначально, спора по этому поводу и не возникло бы.
              • 0
                The default usage of tabs with no arguments shall be equivalent to tabs-8

                Вами же и написано ;)
                Всем известно, что значение по умолчанию - скорее всего стандартное.

                Остальной текст вы выдумали.
                Доказательства:
                http://michael-p.habrahabr.ru/blog/21477… - тут нигде не сказано о том, что нельзя поставить пустую строку :)
                http://michael-p.habrahabr.ru/blog/21477… - Вы говорите что "второе значение - это не индекс, а размер среза". А потом даете описание (именно описание) конкретного (именно конкретного) примера в Вашем неправильном трактовании.
                Вы мне приписываете слова, которых я не говорил - вот что "однозначно плохо".
                • +1
                  Написано о значении по умолчанию для отдельной программы. Почему Вы пытаетесь представить это как стандарт для написания кода?

                  > http://michael-p.habrahabr.ru/blog/21477… - тут нигде не сказано о том, что нельзя поставить пустую строку
                  Ваши слова:
                  1. Блоки - их просто не видно
                  2. Не важно какой отступ, хоть в 10 пробелов, блок все равно явно не выделен. Если между блоками нет пустой строки, они сливаются

                  Здесь русским языком сказано, что блоки не видно потому, что между ними нет пустой строки. Получается, что минус языка состоит в том, что Вы не желаете ставить между блоками пустую строку. Как ни крути, такой логики я не понимаю.
                  > Вы говорите что "второе значение - это не индекс, а размер среза". А потом даете описание (именно описание) конкретного (именно конкретного) примера в Вашем неправильном трактовании.
                  Ну если в качестве аргументов начал приводиться порядок слов, то тут спорить уже не о чем.
                  > Вы мне приписываете слова, которых я не говорил.
                  Чушь. Большая часть Ваших реплик бездоказательна. Приведите мне ЦИТАТЫ того, что я "выдумал" или "приписал" Вам.
                  • 0
                    Спорить с Вами нет смысла :)
                    Про значение для отдельной программы. Табуляция в 8 символов изначально стандартна для UNIX. 4 пробела просто удобнее и практически все используют. 4 симфола де-факто, 8 де-юре.

                    Насчет порядка слов. Мы общаемся на русском языке, а в нем очень многое зависит именно от порядка слов. Именно за счет этого он великий и могущий. Так что прежде чем что-то написать, подумайте как это поймут другие.

                    Насчет приписывания. "ВЫ заявили, что в Питоне блоки сливаются потому, что между блоками нельзя поставить пустую строку" - Ваши слова. Я такого не заявлял. Это нигде не написано! Если Вы не можете по человечески интерпретировать написанное - это Ваша проблема.

                    "Вы же заявили, что "не включительно" - это однозначно плохо." Уж извините, но такого я точно не заявлял. Это Вы придумали.

                    Продолжать разговор не имеет смысла.
                    • 0
                      Смысла не имеет, это точно. Но одна поправка насчет языка. Он-то, конечно, великий. Но вот только не МОГУЩИЙ, а МОГУЧИЙ. Может быть, стоит овладеть языком, прежде чем рассказывать, как им пользоваться?
                      • 0
                        Опечатка есть опечатка.
                        "Спасибо Вам огромное, буду считать не здоровье" тоже многого стоит в таком случае. А вот порядок слов, и, тем более, правильность речи, это куда более качественный показатель.
                        • 0
                          Разумеется. Будем полагать, что я поверил в такую опечатку.
        • +1
          1. Я не могу себе представить, какой же нужно использовать шрифт, редактор и монитор, чтобы блоки с отступами в 4 символа сливались. В статье есть примеры с форматированием. Вы действительно считаете, что этот код плохо читаем?
          2. неправильно выразился. Разница между первым и вторым элементом в срезе - это количество элементов. Восприятие такой конструкции - вопрос привычки, на мой взгляд. Зато очень удобно: list[2:] (с 2 и до конца), list[:2] (с 0 до 2), варианты с переворачиванием списка через отрицательные срезы и т.п.
          Мне кажется, что Вы как-то очень поверхностно ознакомились с языком и стали делать далеко идущие выводы.
          Хотя, если не нравится, то не нравится.
        • +1
          пишет посмотреть профиль gorinich:
          Кстати, стандартный "табовый" отступ - 8 пробелов ;)
          Python – ни разу не UNIX. Стандарт для Python – PEP, а в PEP 8 говорится:
          Use 4 spaces per indentation level.

          посмотреть профиль gorinich:
          Срезы - это просто конец света list[0:2]. С 0 по 2 элемент не включительно! Это ж надо было такое придумать? Есть аргументы? Приведите их пожалуйста.
          C++ standard library относительно итераторов гласит в книге «The C++ Standard Library. A Tutorial and Reference»:
          …begin() and end() define a half-open range that includes the first element but excludes the last…

          Я не имею ничего личного, не ставлю Вам минусы в комменты и карму за откровенный бред просто не хочется, чтобы кто-то составил не до конца объективное представление о языке.
          • 0
            Заметьте, кроме Вас никто не привел более менее обоснованных аргументов, а устроили здесь непонятно что.
            Фанатизм по языку не должен быть настолько слепым, чтобы нисколько не задумываться над той или иной особенностью. У нас не как у всех!

            Заметьте, я просто высказал свое мнение, я никому его не навязывал. И что я получил в ответ? Мое мнение не опровергли, а обосрали (извините за выражение).

            Кстати PEP (Python Enhancement Proposals) - это не стандарт, а всего лишь рекомендации. Если мне рекомендуют длину строки кода делать не более 79 символов, это еще не значит, что мне нельзя делать строки на всю ширину моего экрана.

            Насчет итераторов. Думаю не самый лучший аргумент. Си - язык куда более низкого уровня. Или я ошибаюсь? Исправьте пожалуйста, мне не нужны ошибочные знания. Потом, итераторы, если не ошибаюсь, это одна из сущностей STL (Standart Template Library). Это не стандартные возможности языка, в самом языке Си нет итераторов. Если мне не изменяет память (а если изменяет, пожалуйста исправьте), в STL нет срезов. Есть метод типа slice (может copy, точно не помню), но именно среза нет. Так что особенности STL в применении к Python не самый убедительный аргумент.

            Все сказанное, как всегда, IMHO.
            • 0
              PEP, Вы частично правы, там разные бывают, как стандарты, так и информационно-указательные. Тем не менее эт такое единое место, откуда исходят рекомендации что да как делать – имхо правильно.

              А про C++ – тут речь именно о плюсах, а не о сях. В плюсах процесс стандартизации шёл в 1989–1998 годах и окончился фиксацией в ISO/IEC 14882-1998. То есть плюсы и стандартная библиотека (которая включает STL) – вещи неразрывные (согласно современному стандарту).

              Про слайсы:
              Тут собственно в основе лежит очень простая идея. Когда индексы для слайсов получаются динамически, следует избегать отдельной обработки пустых слайсов. То есть если мы получили в begin и end границы слайса, то
              some_list[begin:end]
              будет [ ], если значения begin и end равны. GvR здравомыслящий человек :)
          • 0
            Насчет отступов. Если мы описываем достаточно длинный список, на Perl мы можем оформить его следующим образом:
            my $array = [
                'aaaaaaaaaa',
                'bbbbbbbbbb',
                'cccccccccc',
                'dddddddddd',
                'eeeeeeeeee',
            ];
            Представьте, что в списке 20 элементов. Очень удобно таким образом оформить хеш. Оформить такой список одной строкой - получится нечитаемо. Перед каждым элементом стоит 4 пробела. Как Python воспримет такую конструкцию? Можно ли так делать?

            Еще пример. Условный оператор с 10ю условиями (мало какие условия нам придется просчитывать). На Perl оформить очень удобно так
            if (
                условие1
              ||
                условие2
              &&
                условие3
              and
                условие4
              or
                ...
            ) {...}

            Читается очень легко. Можно ли так сделать на Python? Ведь отступ это новый блок. Как он такое обрабатывает?
            • 0
              Первый пример работает сразу после выкидывания my, доллара и точки с запятой.

              А для такого if можно в конце строки ставить \ – тогда строки читаются как одна. Хотя если оставлять в конце строки оператор, например and или or, то никаких дополнительных символов не надо.
            • 0
              И первое и второе можно делать как и в твоих приведенных примерах.
          • 0
            Насчет стандартов табуляции. ЛОЛ! ЗАЧОТ!!!
            Ради этого потратил маны и написал целых две строчки на питоне, впервые в жизни.
            Вот:
            #!/usr/bin/env python
            print "0123456789"
            print ">\t<"

            Угадайте что я получил?
            Табулятор в 7 пробелов!!!
            Может где-то кто-то срез написал как [0:7]?
            Ради такого не страшно 10 минусов получить
            • 0
              Немного ошибся. Все же не семь, а восемь пробелов.
              Но все равно 8, а не 4.
            • 0
              По-моему это суть вывода символа '\t' в консоли, а не дело того, кто его выводит :) Выводятся-то не пробелы, а происходит сдвиг то восьмикратной позиции..
              • 0
                \t - символ табуляции. При нажатии кнопки Tab выводится именно он. Просто некоторые редакторы его перехватывают и заменяют на определенное число пробелов.
                А суть в том, что его стандартное значение 8 пробелов. Вернее от 0 до 8 пробелов. Ведь символ табуляции придуман, чтобы ровненько выводить колонки в консоли.
            • 0
              А какая взаимосвязь с рекомендацией о количестве проблелов для идентификации блоков кода и \t?
              • 0
                Вообще связи никакой. Но выше утверждалось что табулятор по стандарту 4 пробела.
                • 0
                  Ещё раз. Табуляция и рекомендованное количество пробелов для разделения блоков кода. Какая взаимосвязь?
                  • 0
                    Еще раз, никакой.
                • 0
                  Ну Вам же объяснили, что это по стандарту (рекомендации, best practice, называйте, как хотите) Питона! А не по юниксовой консоли.
                  Но всё это такая ерунда, что и говорить не о чем. Любой современный редактор может вставлять вместо таба любое количество пробелов, а большинство могу менять пробелы табы. Нет никакой проблемы с этим.
                  • 0
                    Я говорил о стандартной табуляции вообще. Кстати файрфокс тоже ставит табуляцию в 8 пробелов. Это стандарт.
                    А то, что для форматирования кода табуляция выставляется в 4 пробела, это я уже 12 лет прекрасно знаю. Стандарт и рекомендация вещи принципиально разные. Я говорил о стандарте.
                    • 0
                      Так поэтому Вас тут и спрашивают, какое отношение имеет стандарт табуляции к отступам в Питоне? Ккстати, а покажете ссылку на этот "стандарт"? RFC, ANSI, ISO, ECMA? W3C на худой конец? Правда, интересно ведь.
                      • 0
                        Кстати, где я говорил о связи стандартов табуляции и отступов в питоне?
                        Я вижу Вы очень любите придираться к словам. Поэтому, покажите мне где я говорю о стандарте и его явной связи с именно питоном.
                        • 0
                          Вы довольно давно уже говорите об этом в топике про Питон.
                          Но я, ей богу, не хочу больше с вами бодаться. Во всяком случае, пока не получу ссылку на стандарт, где написано, что \t = 8 пробелов.
                        • 0
                          Народ, ну хватит обсуждать эту фигню с табуляцией. Никто первым не хочет останавливаться, что ли, синдром козленка на мосту ? :) Какое отношение вообще это имеет к статье ?
    • 0
      > Срезы - это просто конец света list[0:2]. С 0 по 2 элемент не включительно! Это ж надо было такое придумать? Есть аргументы? Приведите их пожалуйста.
      Просто нужно понимать под аргументами среза не номера элементов, а, уж не знаю как они называются правильно, номера промежутков между элементами списка чтоли.
      _["a", "b", "c", "dog", "cat"]
      _0__1__2__3___4___5
      -5__-4_-3__-2__-1_____(альтернативный счет с конца)
      Из этой схемы все становится понятнее:
      >>> a[0:-2]
      ['a', 'b', 'c']
      >>> a[-4:-1]
      ['b', 'c', 'cat']
      >>> a[-4:5]
      ['b', 'c', 'cat', 'dog']
      • 0
        Уж очень искусственное определение :)
    • НЛО прилетело и опубликовало эту надпись здесь
  • –1
    Еще один камень в огород языка :)

    Глобальные переменные. Ну зачем это надо было сделать как в PHP?
    По-моему логичнее было бы сделать доступ к глобальной переменной без лишнего изврата. А если есть необходимость внутри блока (функции) определить локальную переменную с именем, как у глобальной, то лучше (было бы) для этого использовать ключевое слово local.

    P.S. Для тех, кто в оправдание будет говорить, что это сделано из соображений безопасности и т.д. отвечу: это проблема не языка, а программиста.

    IMHO: Очередной язык для начинающих в духе PHP.
    • 0
      Глобальные переменные, как известно, зло. По возможности, их лучше их не использовать. Поэтому локальные переменные используются чаще, и вводить для них дополнительный префикс было бы неудобно. Во многом это вопрос вкуса, как и всё остальное.

      По поводу "языка для начинающих в духе PHP" - это Вы смешно сказали :)
      • 0
        А откуда, если не секрет, вам известно про то, что глобальные переменные зло?
        В мане по PHP я такого не видел.
        • 0
          Я, честно говоря, даже не знаю, как Вам ответить :) Или этот комментарий - шутка?
          В общем, на тот случай, если это не шутка:
          "[Global variables] are usually considered bad practice precisely because of their nonlocality: a global variable can potentially be modified from anywhere, and any part of the program may depend on it. A global variable therefore has an unlimited potential for creating mutual dependencies, and adding mutual dependencies increases complexity."
          [http://en.wikipedia.org/wiki/Global_variables]
          Ну и богатый личный опыт, разумеется :)
    • +1
      Перехожу постепенно с PHP на Python и ниразу пока не жалею. Приходится писать и на одном и на втором языке паралельно. Так вот когда сажусь за PHP мне противно на нём писать становится. А само больше вырубает меня "{}" для разделения блоков (в питоне с отступами очень удобно, хотя когда только приступал к его изучению было страшно с таким разделением кода), "$" перед переменными ну это полный какой то изврат, ";" в конце строк тоже не парит моск.
      • 0
        Я немного писал на C и Perl, поэтому синтаксис PHP показался мне вполне похожим.
        Синтаксис Python'а и Ruby мне что-то не нравиться, может стоит написать на нем пару программок, чтобы разобраться.
      • 0
        >А само больше вырубает меня «{}»
        После работы с Алголом-Паскалем мне страшно не хватает скобок «begin-end», но это не стало для меня принципиальным недостатком всех последующих языков
    • 0
      Очередным языком для начинающих в духе PHP он стал только из-за глобальных переменных, блоков и механизма срезов?
      • –3
        Я не считаю правильным общаться на подобные темы с человеком, который собирается стать отцом Бритни Спирс.
        • 0
          Вы совершенно правы: когда объективно нечего ответить, нужно сразу переходить на личности. А не то пустобрехом посчитают ведь!
          • 0
            Объективно не на что отвечать :)
            Спасибо за минус ;) Очередной фанат питона? Я знаю о чем говорю, программирую уже 12 лет на разных языках, и могу кое о чем посудить ;) Готов спорить это твой первый скриптовый язык, ну максимум второй
            • 0
              Спорь. То, что ты программируешь уже 12 лет говорит вообще ни о чем. Зато кое о чем говорит то, что ты скрыл некоторую часть текста. Молодец, чо.
            • 0
              Судя по Вашему профилю, мы с Вами одногодки.
              Вы действительно с 11 лет программируете и считаете это стажем? :)
              • 0
                Я действительно программирую с 11 лет. Но если честно, то достаточно много метался между языками и страдал фигней. Программирование было моим хобби и развлечением.
                Реально стажем считаю последние три года. Именно эти три года я занимаюсь программированием профессионально.
  • 0
    Язык вынуждает нормально форматировать код, чтобы читабельней было. Неплохая задумка :) Кстати он в гугле активно используется. Наверно задачи с map-reduce на нём несложно реализовываются.
    • 0
      И не только в гугле. Еще в википедии, линейке и много где еще.
      • 0
        Если не ошибаюсь, Википедия написана на PHP.
  • 0
    if number in (3, 4, 7, 9): #Если переменная number входит в список (3, 4, 7, 9)...
    Опечатка: в кортеж, а не в список.
    • 0
      Очень правильное замечание!
      • 0
        И ещё немного мелких камешков:

        > # объявить такую переменную для объекта. Причем
        > # tэта переменная будет членом только classinstance.
        Здесь неправильный цвет текста. =) + Опечатка.

        Аналогично неправильная покраска:
        > Исключения в Python имеют структуру try-except [exceptionname]:
        > >>> fnexcept()

        Некорректные отступы:
        > # Но программа не "Выполняет недопустимую операцию"
        > # А обрабатывает блок исключения соответствующий ошибке «ZeroDivisionError»
  • 0
    >В стандартные библиотеках Python
    исправьте, плиз
  • 0
    Проделана хорошая работа!
    А давайте перенесём это в блог Python?
    • 0
      Хорошая идея
  • 0
    простите, может я глупый вопрос задаю.. статья хорошая, спасибо, но, мне кажется, совсем бы не помешал пример "hello world" :))
    а именно, где хранится, как выполняется, компилируется или интерпретируется, какие среды разработки если они есть и, наконец, какое расширение должен иметь файл? :))
    спасибо)

    а ввобще - на первый взгляд синтаксис мне не очень понравился.. если язык претендует на высокую читабельность кода: я не понял, как в нем реализовать логические скобки для разделения порядка и наглядности выражений?
    и хотелось бы узнать про другие операторы, кроме "="...
    • 0
      высокая читабельность кода получается из жестких требований к отступам.

      в пхп вы могли бы написать
      if () {
      ..
      }

      if () { .. }

      if ()
      {
      ..
      }

      и даже
      if ()
      { .. }

      в питоне же - вариант только один
      if cond:
      ..

      так или иначе - получается что чьи бы исходники на питоне вы не открыли - везде будет только 1 вариант. И никак иначе. Особенно учитывая тот факт что фреймворки а-ля Zend и вовсе сейчас рекомендуют смешивать стили:
      function asd()
      {
      }

      if () {
      ..
      }

      Среду разработки лучше смотреть ту которая на питоне на самом и написана :) Заодно неплохой пример будет. wing ide скажем.

      helloworld (лучше уж game over :))

      hello.py:

      #!/usr/bin/env python
      print "Hello, World!"

      #sh >python hello.py

      :)
  • 0
    1. Пример хелловрда есть в статье. Однако приведу его здесь:
    >>> print "Hello World!"
    где >>> - приглашение интерпретатора.

    2. http://ru.wikipedia.org/wiki/Python снимет основную часть вопросов.
    Однако IDE\shell'ы упомяну(до конца пункта 2 идет исключительно мое мнение):
    IDLE - неплохо, но минимализм скучен.
    PyCrust - очень удачный shell.
    WingIDE - имеет один недостаток - платность.
    Boa Construstor - мощен, однако интерфейс не является интуитивно понятным.


    3. Операторы и все все все. В питоне интерактивный хелп, это очень удобно.
    Вы делаете так:
    >>import operator
    >>help(operator)
    и получаете обзор операторов.
    4. расширение .py

    Один из приятнейших языков, по моему скромному мнению. Синтаксис чудесен- мне переодически приходиться писать мелкий программки на C и MatLab - на питоне писать приятнее. Его, как я подозреваю, очень любит ученый люд - научных библиотек под него очень-очень много.
    p.s. пример логических скобок тоже есть в статье: посмотрите раздел операторы внимательней.
    p.p.s. Удачного изучения =)
  • +8
    Если честно - питон штука хорошая, а статья - дурацкая. Непонятно для кого статья? Для начинающих? Упущено дофига теории. Для уже-знающих-другой-язык? В таком случае объяснение как расставлять двойные и одинарные ковычки в строках для кого? :)

    Да и о питоне тут мало. Мало хорошего.

    1. Многопоточность (пусть и с GIL, но все же)
    2. Сильное ООП. Особенно радуют возможности манипуляции классов. Так, паттерн Singleton на питоне невозможен. Зато можно "расшарить" состояние объектов между их инстанциями. Куда более продвинутый и чаще нужный вариант.
    3. Скорость. СКОРОСТЬ! Особенно если взять psyco (иногда получится быстрее чем C и это не шутка).
    4. Изобретай-не-хочу. Есть PyPy. Питон написанный на питоне. Экспериментировать там с движком для энтузиастов - милое дело ;)
    5. Stackless Python. С возможностью переключения стека C.
    6. Self-Документирование. Так, открыв питон (сам интерпретатор). Пишем import sys. Затем help(sys). Весело? А теперь представьте - копаетесь вы в какой-нибудь программке. И запутались. И прям там в середине кода help(ЧТО_УГОДНО). И в консоли где порграмма исполняется будет help.
    7. Питон легко может стать "связующим" языком. В него легко писать модули на Си. Ничуть не сложнее в программу на Си вставиьт интерпретатор питона. Не сложнее и в Яву питон впихнуть (Jython). И наоборот. В итоге питон и впихивают везде и вся. Скоро и Mozilla обещает в Firefox вставить наряду с JS. А пользователи линукса наверное уже давно заметили что и в муз. плеере и в граф. приложениях - уже везде можно писать скрипты на питоне :)
    8. Python vs Perl: они достойны друг друга.
    9. Python vs Ruby = Django vs ROR. RoR чертовски хорошо. А django оказывается почти на 300% быстрее :). В Ruby ещё подкупают блоки и концепция "всё - объекты" (очень уж легко читается: 5.times { do_something })
    10. Библиотека скриптов. Так или иначе но и веб-сервер и работа с тегами - ну прям все там есть.
    11. Python vs PHP: PHP Manual ROCKS! Начинающим (тем кто впервые программить садится) в питон лучше не лезть.
    12. Встроенная возможность (и необходимость) компиляции в байткод. А так же сохранение этой стадии в виде файла *.pyc или *.pyo. После чего возможно распространение только байткода без полных исходников.
    13. Segfault у меня у него получается выбить куда реже чем у PHP, например %)
    14. Генераторы. Да.

    В качестве огормного ЖИРНОГО минуса - GIL. Или Global Interpreter Lock. Из-за этого урода 8-ядерный сервер можно загрузить только на треть или чуть более (где то 250% из 800% у меня получалось). Т.е. конкуретное исполнение кода (необходимый минимум для GUI приложений) в питоне есть, но вот эффективной многопоточности - нет (пока?).

    Сейчас питон уже популярен. И вы даже не представляете насколько. В России разрабтчиков днём с огнём не сыщешь. А ведь его уже ставят в практически все дефолтные поставки дистрибутивов линукс. Яву, знаете ли не пихают. PHP тем более. Перл - да. Но я же сказал они друг друга стоят ;).

    Я вот питон люблю. С каждым днём все больше. Уж и не помню в чем была такая необходимость его изучить. Наверное Пол Грэхэм. И его эссе "Python Paradox" (погугл... поищите!). А с тех пор постоянно нахожу в нём что то новое (чего только стоило понять возможность расшаривания состояний между объектами вместо паттерна одиночки!).. И кажется нет этому конца и края %)

    Кстати многое в статье относится только к Python 2.4

    Например в Python 2.5 мы уже имеем очень весёлую модель исключений:

    try:

    except:
    ..
    else:
    ..
    finally:
    ..

    Так же появился оператор with... =)

    Кстати говоря "научить" язык пониманию скобок и традиционного синтаксиса - в общем-то, легко. Кажется такой проект в инете где-то есть... Понимать отступы сложнее чем искать скобки %)
    • 0
      Да. Статья действительно для начинающих. Но спасибо за ценные дополнения.
    • 0
      Отличный комментарий, спасибо.
    • +1
      GIL - это беда, конечно. Но с другой стороны, ожидать от скриптового (в первую очередь) языка красивой реализации многопоточности довольно сложно.
      12. Встроенная возможность (и необходимость) компиляции в байткод. А так же сохранение этой стадии в виде файла *.pyc или *.pyo. После чего возможно распространение только байткода без полных исходников.

      А вот это скорее формальность :) Добраться до исходного кода я всё равно смогу, пусть и с некоторым чуть большим геморроем.
      Написание же C-шных модулей на питоне - дело не хитрое и зачастую полезное (если, например, надо работать с оборудованием). Чем-то напоминает расширение Visual Basic'а COM-объектами :)
      Вообще, Питон - это идеальный язык, на мой взгляд, для тех, кто изучает программирование. Он наиболее близок к псевдокоду по синтаксису :) Он прививает хороший стиль оформления кода, сочетает 3 основных стиля программирования (ОО, процедурный и функциональный), бесплатен (что может быть немаловажно для школ). При этом, в отличии от Паскаля и Бейсика, питон актуален и достаточно распространен.
      • +1
        даже скомпилированную СИ программу можно разложить на исходники. Но на реальные исходники они будут похожи весьма сомнительно :). Таки потеря комментариев, всех названий переменных и проч. делает исходники практически нечитаемыми. Хоть и взлом программ при этом возможен. Зато невозможна перепродажа и практически исключается reuse. И ещё практически невозможно вытащить алгоритмы в которых потом разобраться (т.е. красть идеи).

        p.s. возможно всё, но вот какими усилиями и далеко не каждому... :)
        • 0
          Может быть я туплю (давно это было), но из .pyo можно получить обратно абсолютно нормальные исходники, разве что без комментариев (но с названиями переменных и т.п.). В любом случае, это проще, чем сделать то же самое с компилируемым языком. Но вопрос не особо принципиальный, так что бог с ним.
    • +1
      Всегда уважал людей, которые пишут комментарии, по объему информации превышающие многие статьи (намеренно, не хабратопики).
      • 0
        а я преследую корыстные цели! :) Хочу чтобы питон в России стал более популярен, а то я разработчиков в комманду найти не могу.
        • 0
          А что у вас за команда и что за условия? Можно ответ в личку.
    • 0
      > 2. Сильное ООП.
      Не согласен, например len(строка) ну никак не назовешь это сильным ООП)
      Или еще зачем в методах первым параметром идет некий self? )
      >А django оказывается почти на 300% быстрее
      Зато у РоРа комьюнити на 300% больше. А скорость это дело времени.
      • 0
        2. хинт:
        >>> a = 'asd'
        >>> a.__len__()
        3

        Сам Ruby медленнее Python. Дело не в рельсах и не в django. Тот уровень ООП, который присутсвует в Ruby требует времени. Много. Осмелюсь предположить, Ruby никогда не будет быстрее Python. И уж точно будет медленнее Python+PSYCO. Имхо.
        • 0
          Недавно смотрел скринкаст от создателя IronPython (питон на .NET) Джима Югунина. В качестве иллюстрации к вопросу производительности он продемонстрировал такой пример:
          1. Сначала на IronPython запускается один из стандартных тестов производительности (с функцией Ack, но не суть). Тест по сути математический, с рекурсией. Время выполнения теста порядка 12 секунд.
          2. Ключевая функция (та самая Ack) переписывается на C#, как статический метод, а затем вызывается (вообще без проблем) из питона. Результат: 0.8 секунды.
          Примерно так решается большая часть проблем производительности (во всяком случае те из них, которые не связаны с параллелизмом).
          • 0
            Очень интересно посмотреть, можно ссылочку? :)
            • 0
              • 0
                Спасибо, очень интересно, какие фокусы с WPF вытворяют - просто чума :)
      • 0
        len - это скорее атавизм от ранних версий. Хотя да, логичнее было бы что-то типа a.len().
        Некий self - это ровно такая же фишка языка, как и отступы, как и специальные методы с двумя подчеркиваниями. По сути во всех ОО-языках такой указатель в нестатическом методе присутствует, только вот в Питоне он передается в явном виде (что, собственно, и отличает метод объекта от функции класса).
        Что же касается коммьюнити, то у Руби повезло: появилась компания (37 Сигналов), которая начала его активно продвигать в массы. К сожалению, аналогичного "двигателя" для Питона (пока) нет. Т.е. есть масса компаний, которые его используют для своих разработок, но фактически ни одна из них не делает из этого принцип и не пиарит язык. Увы.
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Добавьте сюда еще средства разработк, коих для Руби масса, а для Питона - раз-два и обчелся. Наиболее приличное, что я видел в то время, когда использовал язык - это Komodo. Но он платный и довольно тормозной.
        Что же касается отсуствия питоновского рантайма в дистрибутивах линуха и в винде - это не так страшно. Для винды, во всяком случае, есть возможность сгенерировать exe'шник, который будет включать интерпретатор питона, ваш байт-код и все необходимые библиотеки. Наверное, это не самое изящное решение, но и на том, как говорится, спасибо.
        • 0
          Для питона ведь как и для руби есть свой адд-он к Eclipse, или у руби есть что-то еще более мощное? (видел только RDT)
          • 0
            У руби есть масса IDE, на сколько я знаю, в основном они круче питоновских.
            Плагин к эклипсу назывался PyDev. Когда я его пытался использовать (года 3 назад), он работал крайне забавно. Скажем, пытался вывести какой-то автокомплит после точки, поставленной на пустой строке :) В общем, недоразумение сплошное. А подсветка синтаксиса в PyDev была не ахти.
            Неплохой плагин был для Емакса, но это на любителя.
          • НЛО прилетело и опубликовало эту надпись здесь
            • 0
              Для питона тоже есть плагин к IDEA, оказывается.
              Может кто-нибудь смотрел?
  • 0
    Полезнее было бы начать со статьи чем Питон лучше своих аналогов?
    А так для большинства - ещё один мёртворожденный язык.
    Чем он отличается(лучше) от Perl, C, JS, Basic хотя бы в общих чертах.
    • 0
      Все статьи вида "Чем яблоки лучше абрикосов" в конечном счете сводятся к холиварам. А вот когда у человека возникает интерес, или конкретная задача, подобное введение в язык может оказаться полезным.
      • 0
        х.м. если написано, что: - яблоко это фрукт и растёт на деревьях в средней полосе, то я не буду их искать среди джунглей.
        Аналогично, было бы полезно в заголовке указать: это скриптовый язык используется там то и там то и отличается от своих собратьев тем то и тем то требует для себя того то и того.
        Хотя краткое введение, действительно неплохое :).
      • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Спасибо за эту статью!
  • +1
    Питон мне изначально понравился. Лаконичный, быстрый, мощный. Как-то год или два назад поставил попробовать, на винду, так там в дистрибутиве простенький IDE написанный на питоне. Для меня это был шок.

    Читаемость кода питона - это отдельная история, более читаемого я не наблюдал за всю свою жизнь у реальных ЯП. Воистину стандартизация написания самим создателем языка - это великая вещь, риск которой оправдался на все 100%.

    Очень радует уже продуманная система пакетов модулей.

    Самым главным минусом Py для меня являются проблемы с хостингом, пока на _каждом_ сервере есть только PHP.. а так хочется везде видеть py+django )
    • 0
      питон на хостинге мне кажется странной идеей. Те кто пишут на питоне сайты, как правило, пишут и свои http-сервера, и используют распределённую память и memcached, открывают сами уйму tcp соединений на что-то... представить себе возможный виртуальный хостинг с такими возможностями - не получится :)

      виртуальные выделенные сервера это наше все. Если уж проект до цельного сервера пока не дорос :).
      • 0
        на самом деле осознание того, что для питона надо (относительно)много условий на хостинге, отталкивает многих от написания простых сайтов на Py. Все новички начинают с PHP, в том числе из-за популярности оного на хостинге. А не написав простого сайта на Py, никогда не напишешь сложного :) я надеюсь моя мысль теперь более ясна.

        mod_python все более популярен, и это радует. Подождем еще ) многим же не надо всех опций и своего http сервера, надо минимум возможностей, чтобы начать практическое использование - что в изучении и популяризации языка самое главное.
  • 0
    > Однострочные комментарии начинаются со знака фунта «#»
    всю жизнь считал что у фунта значек другой -
    • 0
      хе-хе... скушал хабр мой значок, вставлю картинку http://img171.imageshack.us/img171/156/s… ...

      пока искал картинку нашелся и ответ http://en.wikipedia.org/wiki/Pound
      > #, known in the US as a pound sign or number sign

      ...о сколько нам открытий чудных...
      • 0
        Это другой фунт, весовой, видимо.
  • 0
    Большое спасибо, статья очень интересная! Кто знает, может быть придется и на питоне в свое время программировать :)
  • 0
    Исправьте "присудствовать"
    • 0
      И "Леление на ноль"
      • 0
        Спасибо. Все исправил.
  • 0
    Огромное спасибо за статью.
    Следуя советам ведущих Radio-T, имею в планах переход с PHP на Python везде, где это только возможно. И такая статья пришлась как раз в тему )
  • 0
    Как в языке Python можна использовать данные из одного класса в другом, для работы с ними и дальнейшего преобразования.
  • 0
    Спасибо, отличная статья и блестящее оформление, плюс Вам в карму!
  • 0
    У Вас ошибка во втором примере (предпоследняя строчка):

    >>> print myfunction(list)

    Должно быть print myfunction(mylist)
  • 0
    а у Вас разметка к чертям поломалась:(
  • 0
    И в самом деле, статья хорошая а разметка примеров поломана… :(
    Можно исправить? А то лень всё это сохранять локально чтобы посмотреть красиво.
  • НЛО прилетело и опубликовало эту надпись здесь

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.