Структурированный блокнот   
 Машинное обучение (Machine Learning, обучающиеся алгоритмы) →  Среда для работы →  

Введение в Python


Для реализации алгоритмов мы будем использовать Python 2.7 и математическую библиотеку SciPy.

Почему именно они? И почему стоит их изучить?

Python -- это один из наиболее современных языков, как пишут его авторы: с акцентом на читаемость кода и удобство разработки. Таким образом все конструкции предельно просты и понятны, и если вы знаете любой другой язык программирования, то легко освоите Python. Код получается компактным и понятным. При этом Python портирован на все основные платформы, под него разработано множество библиотек, так что он является универсальным, и подойдёт под многие ваши задачи. А при помощи библиотеки SciPy можно ещё и добиться приличной производительности в вычислениях, которые мы будем производить.

Надеюсь, я вполне убедил вас потратить своё время на знакомство с этим языком. Именно этому и будет посвящен сегодняшний выпуск.

1. Скачиваем http://www.python.org/getit/releases/2.7.2/ и устанавливаем версию под нужную вам платформу. В дальнейшем нам потребуется установить SciPy, но пока мы пропустим этот шаг.

2. Для знакомства с Pyhon лучше всего подходит интерактивный режим. Запускаем python (под linux), либо Пуск -> Python 2.7 -> IDLE (Python GUI) (под Windows). Ну вот мы и готовы...

Переменные. Традиционно любые названия из букв, цифр, подчёркиваний. В Python переменные не нужно объявлять, можно сразу начинать с ними работать. Но если вы используете значение переменной, которой ничего не было присвоено, то возникнет ошибка.
Итак, первым делом переменной нужно присвоить значение, например:
>>> a=5

Теперь мы можем посмотреть значение переменной просто введя её название в интерактивную строку
>>> a
5

Когда мы будем писать код не в интерактивном режиме, то для вывода значения переменной нужно будет использовать оператор print
>>> print(a)
5

Естественно переменные можно складывать, умножать, делить.
>>> b=10
>>> a+b
15
>>> a*b-a
45
>>> b/a
2
>>> a/b
0

Обратите внимание на последнее вычисление 5/10=0. Не всегда нам будет удобно такое поведение, но Python 2 считает, что если мы используем целые числа, то ожидаем целочисленный результат деления. Если мы хотим дробный результат (числа с плавающей точкой, по-английски float), то нужно явно указать, что числа дробные одним из двух способов:
1) Явно задать дробное число, например 3.5, а если мы хотим задать число 5, то нужно указать 5.0, или сокращённо 5.
>>> 5./10
0.5
2) Второй вариант, преобразовать имеющееся число в дробное, используя функцию float
>>> float(5)/10
0.5
Как видим, если хоть одно число дробное, то итоговое число тоже вычисляется, как дробное.

Для тех, кто знаком с C/C++, Java, PHP, Perl отмечу, что в конце строки точка с запятой не нужна :-) Но если вы хотите выполнить несколько операции в одной строке, то их можно разделить точкой с запятой:
>>> a=b/2;b=a*3

Да, и ещё в Python есть конструкции вида a*=2, что эквивалентно a=a*2. Аналогично a+=1 эквивалентно a=a+1. А вот операции a++ или a-- Python не поддерживает.

Считать научились. Поехали дальше.
Условия и циклы.
>>> if a>b: print(a)
Здесь, думаю всё понятно. Ключевое слово if, и знак двоеточия формируют эту конструкцию. Если мы хотим выполнить несколько операций после if, то делаем так:
1) Компактный способ: пишем в одну строчку через точку с запятой
>>> if a>b: a*=2; print(a)
2) Для больших кусков кода
>>> if a>b:
>>> a*=2
>>> print(a)
И здесь мы впервые встречаемся с концепцией отступов. В большинстве популярных языков блоки, которые выполняются оператором if отделены фигурными скобками {}, или BEGIN-END, или чем-нибудь подобным. Ничего такого в Python нет. Правило простое, после оператора if появляется отступ (рекомендуемый отступ: 4 пробела). Когда действие if завершается, вы просто продолжаете писать код без отступа.
>>> if a>b:
>>> a*=2
>>> print(a)
>>> print("Это напечатается в любом случае, независимо от оператора if")
Это действительно удобно -- чётко видны логические блоки. И максимально компактно -- ни одного лишнего символа.

Естественно, если есть if, то есть и else. Так же есть elif = "else if".
>>> if a>b: print("a больше b")
>>> elif a=b:print("a равно b")
>>> else: print("a меньше b")

С циклами конструкция аналогичная. Самый часто используемый цикл for выглядит так
>>> for i in range(5):
>>> print(i)
0
1
2
3
4

Цикл for перебирает все значения массива или списка. Функция range в свою очередь возвращает список последовательных чисел.
range(N) вернёт список вида 0, 1, 2, ... N-1 -- всего N значений. Таким образом фикл for i in range(N) -- выполнится ровно N раз
Если нам нужно начать не с нуля, то пишем так range(N1, N2). В этом случае вернётся список вида
N1, N1+1, ... N2-1
Например
>>> range(1,6)
[1, 2, 3, 4, 5]
А если нам нужно, чтобы переменная менялась не с шагов е единицу, а с любым другим целочисленным шагом, то мы задаём его третьим параметром.
>>> range(1,6,2)
[1, 3, 5]

Для тех, кто хорошо знаком с C/C++ etc такая конструкция покажется очень естественной если её представить в виде
range(N) -- for(i=0;i<N;i++)
range(N1,N2) -- for(i=N1;i<N2;i++)
range(N1,N2,step) -- for(i=N1;i<N2;i+=step)

Цикл for можно прерывать оператором break, а также можно переходить к следуюещей итерации при помощи оператора continue


Ну и последняя на сегодня конструкция: объявление функций. Опять же всё просто и компактно
>>> def printHello(name):
>>> print("Hello world from "+name)

Функция определяется ключевым словом def, далее идёт имя фукнции, а в скобках параметры, которые она принимает. Как и в случае if и for далее необходимо двоеточие и отступы на всех последующих строчках, которые относятся к телу функции.

Функция может возвращать значение при помощи return

>>> def square(x): #возводит число в квадрат
>>> return x*x
>>> print(square(5))
25

Да, кстати, комментарии в Python пишутся в любой строке после знака решётки #

На этом предельно краткое знакомство с языком закончено. Для желающих подробнее ознакомиться с этим замечательным языком:
Учебник http://ru.wikibooks.org/wiki/Учебник_Python_2.6
Философия и особенности языка http://ru.wikipedia.org/wiki/Python


В следующий раз мы освоим математические функции и приступим к реализации линейной регрессии.
А пока для тренировки рекомендую написать функцию, которая возводит число в любую целую степень.
>>> def pow(x,N):
....
Поиск по записям: только в текущем разделе.