Введение
В связи с наблюдаемым в настоящее время стремительным развитием персональной вычислительной техники, происходит постепенное изменение требований, предъявляемых к языкам программирования. Все большую роль начинают играть интерпретируемые языки, поскольку возрастающая мощь персональных компьютеров начинает обеспечивать достаточную скорость выполнения интерпретируемых программ. А единственным существенным преимуществом компилируемых языков программирования является создаваемый ими высокоскоростной код. Когда скорость выполнения программы не является критичной величиной, наиболее правильным выбором будет интерпретируемый язык, как более простой и гибкий инструмент программирования.
В связи с этим, определенный интерес представляет рассмотрение сравнительно
нового языка программирования Python (пайтон), который был создан его автором Гвидо
ван Россумом (Guido van Rossum) в начале 90-х годов.
Общие сведения о Python. Достоинства и недостатки
Python является интерпретируемым, изначально объектно-ориентированным языком программирования. Он чрезвычайно прост и содержит небольшое число ключевых слов, вместе с тем очень гибок и выразителен. Это язык более высокого уровня нежели Pascal, C++ и, естественно C, что достигается, в основном, за счет встроенных высокоуровневых структур данных (списки, словари, тьюплы).
Достоинства языка.
Несомненным достоинством является то, что интерпретатор Python
реализован практически на всех платформах и операционных системах. Первым
таким языком был C, однако его типы данных на разных машинах могли занимать разное
количество памяти и это служило некоторым препятствием при написании действительно
переносимой программы. Python же таким недостатком не обладает.
Следующая немаловажная черта - расширяемость языка, этому придается большое значение и, как пишет сам автор, язык был задуман именно как расширяемый. Это означает, что имеется возможность совершенствования языка всеми всеми заинтересованными программистами. Интерпретатор написан на С и исходный код доступен для любых манипуляций. В случае необходимости, можно вставить его в свою программу и использовать как встроенную оболочку. Или же, написав на C свои дополнения к Python и скомпилировав программу, получить "расширенный" интерпретатор с новыми возможностями.
Следующее достоинство - наличие большого числа подключаемых к программе модулей, обеспечивающих различные дополнительные возможности. Такие модули пишутся на С и на самом Python и могут быть разработаны всеми достаточно квалифицированными программистами. В качестве примера можно привести следующие модули:
Обзор особенностей
1. Python, в отличие от многих языков (Pascal,
C++, Java, и т.д.), не требует описания переменных. Они создаются в месте
их инициализации, т.е. при первом присваивании переменной какого-либо значения.
Значит, тип переменной определяется типом присваиваемого значения. В этом
отношении Python напоминает Basic.
Тип переменной не является неизменным. Любое присваивание для нее корректно
и это приводит лишь к тому, что типом переменной становится тип нового
присваиваемого значения.
2. В таких языках как Pascal, C, C++ организация списков представляла некоторые трудности. Для их реализации приходилось хорошо изучать принципы работы с указателями и динамической памятью. И даже имея хорошую квалификацию, программист, каждый раз заново реализуя механизмы создания, работы и уничтожения списков, мог легко допустить трудноуловимые ошибки. Ввиду этого были созданы некоторые средства для работы со списками. Например, в Delphi Pascal имеется класс TList, реализующий списки; для С++ разработана библиотека STL (Standard Template Library), содержащая такие структуры как векторы, списки, множества, словари, стеки и очереди. Однако, такие средства имеются не во всех языках и их реализациях.
Одной из отличительных черт Python является наличие таких встроенных в сам язык структур как тьюплы (tuple), списки (list) и словари (dictionary), которые иногда называют картами (map). Рассмотрим их поподробней.
3. Python в отличие от Pascal, C, C++ не поддерживает работу с указателями, динамической памятью и адресную арифметику. В этом он похож на Java. Как известно, указатели служат источником трудноуловимых ошибок и работа с ними относится больше к программированию на низком уровне. Для обеспечения большей надежности и простоты они небыли включены в Python.
4. Одним из особенностей Python является то, как происходит присваивание одной переменной другой, т.е. когда по обе стороны от оператора "= " стоят переменные.
Следуя Тимоти Бадду (), будем называть семантикой указателей случай, когда присваивание приводит лишь к присваиванию ссылки (указателя), т.е. новая переменная становится лишь другим именем, обозначающим тот же участок памяти, что и старая переменная. При этом изменение значения, обозначаемого новой переменной, приведет к изменению значения старой, т.к. они, фактически, означают одно и то же.
Когда же присваивание приводит к созданию нового объекта (здесь объект - в смысле участка памяти для хранения значения какого-либо типа) и копированию в него содержимого присваиваемой переменной, этот случай назовем семантикой копирования . Таким образом, если при копировании действует семантика копирования, то переменные по обе стороны от знака "=" будут означать два независимых объекта с одинаковым содержанием. И здесь последующее изменение одной переменной никак не скажется на другой.
Присваивание в Python происходит следующим образом: если присваеваемый
объект является экземпляром таких типов как числа или строки, то действует
семантика копирования, если же в правой части стоит экземпляр класса,
список, словарь или тьюпл, то действует семантика указателей. Пример:
a = 2; b = a; b = 3
print " семантика копирования: a=", a, "b=", b
a = ; b = a; b = 3
print " семантика указателей: a=", a, "b=", b
Результат
:
семантика копирования: a= 2 b= 3
семантика указателей: a= b=
Для тех из вас, кто хочет знать в чем тут дело, я приведу другой взгляд на присваивание в Python. Если в таких языках как Basic, Pascal, C/C++ мы имели дело с переменными-"емкостями", и хранимыми в них константами (числовыми, символьными, строковыми - не суть важно), а операция присваивания означала "занесение" константы в присваиваемую переменную, то в Python мы уже должны работать с переменными-"именами" и именуемыми ими объектами. (Замечаете некоторую аналогию с языком Prolog?) Что же такое объект в Python? Это все то, чему можно дать имя: числа, строки, списки, словари, экземпляры классов (которые в Object Pascal и называются объектами), сами классы (!), функции, модули и т.д. Так вот, при присваивании переменной некоторого объекта, переменная становится его "именем", причем таких "имен" объект может иметь сколько угодно и все они никак не зависят друг от друга.
Теперь, объекты делятся на модифицируемые (мутируемые) и неизменные. Мутируемые - те, которые могут изменить свое "внутреннее содержание", например, списки, словари, экземпляры классов. А неизменные - такие как числа, тьюплы, строки (да, строки тоже; можно переменной присвоить новую строку, полученную из старой, но саму старую строку модифицировать не получится).
Так вот, если мы пишем
a = ; b = a; b = 3
,
Python это интерпретирует так:
И последнее, что стоит сказать насчет этого: хотя нет возможности изменения структуры тьюпла, но содержащиеся в нем мутируемые компоненты по-прежнему доступны для модификации:
T = (1, 2, , "string") t = 6 # так нельзя del t # тоже ошибка t = 0 # допустимо, теперь третья компонента - список t = "S" # ошибка: строки не мутируемы
5. Весьма оригинальным является то, как
в Python группируются операторы. В Pascal для этого служат операторные
скобки begin-end
, в C, C++, Java - фигурные скобки {}, в Basic применяются
закрывающие окончания конструкций языка (NEXT, WEND, END IF, END SUB).
В языке Python все гораздо проще: выделение блока операторов осуществляется
путем сдвига выделяемой группы на один или более пробелов или символов
табуляции вправо относительно заголовка конструкции к которой и будет относиться
данный блок. Например:
Описание языка. Управляющие конструкции
Обработка исключительных ситуаций
try:
<оператор1> [ except [<исключение> [, <переменная>] ]: <оператор2>] [ else <оператор3>] |
Выполняется <оператор1>, если при этом возникла исключительная ситуация
<исключение>, то выполняется <оператор2>. Если <исключение> имеет
значение, то оно присваивается <переменной>.
В случае успешного завершения <оператора1>, выполняется <оператор3>. |
try:
<оператор1> finally: <оператор2> |
Выполняется <оператор1>. Если не возникло исключений, то выполняется <оператор2>. Иначе выполняется <оператор2> и немедленно инициируется исключительная ситуация. |
raise <исключение> [<значение>] | Инициирует исключительную ситуацию <исключение> с параметром <значение>. |
Исключения - это просто строки (string). Пример:
My_ex = ‘bad index’ try: if bad: raise my_ex, bad except my_ex, value: print ‘ Error ’, value
Объявление функций
Объявление классов
Class cMyClass:
def __init__(self, val):
self.value = val
#
def printVal (self):
print ‘ value = ’, self.value
#
# end cMyClass
obj = cMyClass (3.14)
obj.printVal ()
obj.value = " string now "
obj.printVal ()
Результат:
value = 3.14
value = string now
Операторы для всех типов последовательностей (списки, тьюплы, строки)
Операторы для списков (list)
s[i] = x | i-тый элемент s заменяется на x. |
s = t | часть элементов s от i до j-1 заменяется на t (t может быть также списком). |
del s | удаляет часть s (также как и s = ). |
s.append (x) | добавляет элемент x к концу s. |
s.count (x) | возвращает количество элементов s равных x. |
s.index (x) | возвращает наименьший i, такой, что s[i]==x. |
s.insert (i,j) | часть s, начиная с i-го элемента, сдвигается вправо, и s[i] присваивается x. |
s.remove (x) | то же, что и del s[ s.index(x) ] - удаляет первый элемент s, равный x. |
s.reverse () | записывает строку в обратном порядке |
s.sort () | сортирует список по возрастанию. |
Операторы для словарей (dictionary)
Файловые объекты
Создаются встроенной функцией open()
(ее описание смотрите ниже).
Например: f = open (‘mydan.dat’,‘r’)
.
Методы:
Другие элементы языка и встроенные функции
= | присваивание. |
print [ < c1 > [, < c2 >]* [, ] ] | выводит значения < c1 >, < c2 > в стандартный вывод. Ставит пробел между аргументами. Если запятая в конце перечня аргументов отсутствует, то осуществляет переход на новую строку. |
abs (x) | возвращает абсолютное значение x. |
apply (f, <аргументы>) | вызывает функцию (или метод) f с < аргументами >. |
chr (i) | возвращает односимвольную строку с ASCII кодом i. |
cmp (x, y) | возвращает отрицательное, ноль, или положительное значение, если, соответственно, x <, ==, или > чем y. |
divmod (a, b) | возвращает тьюпл (a/b, a%b), где a/b - это a div b (целая часть результата деления), a%b - это a mod b (остаток от деления). |
eval (s)
|
возвращает объект, заданный в s как строка (string). S может содержать любую структуру языка. S также может быть кодовым объектом, например: x = 1 ; incr_x = eval ("x+1") . |
float (x) | возвращает вещественное значение равное числу x. |
hex (x) | возвращает строку, содержащую шестнадцатеричное представление числа x. |
input (<строка>) | выводит <строку>, считывает и возвращает значение со стандартного ввода. |
int (x) | возвращает целое значение числа x. |
len (s) | возвращает длину (количество элементов) объекта. |
long (x) | возвращает значение типа длинного целого числа x. |
max (s) , min (s) | возвращают наибольший и наименьший из элементов последовательности s (т.е. s - строка, список или тьюпл). |
oct (x) | возвращает строку, содержащую представление числа x. |
open (<имя файла>, <режим>=‘r’) | возвращает файловый объект, открытый для чтения. <режим> = ‘w’ - открытие для записи. |
ord (c) | возвращает ASCII код символа (строки длины 1) c. |
pow (x, y) | возвращает значение x в степени y. |
range (<начало>, <конец>, <шаг>) | возвращает список целых чисел, больших либо равных <начало> и меньших чем <конец>, сгенерированных с заданным <шагом>. |
raw_input ( [ <текст> ] ) | выводит <текст> на стандартный вывод и считывает строку (string) со стандартного ввода. |
round (x, n=0) | возвращает вещественное x, округленное до n-го разряда после запятой. |
str (<объект>) | возвращает строковое представление <объекта>. |
type (<объект>) | возвращает тип объекта.
Например: if type(x) == type(‘’): print ‘ это строка ’ |
xrange (<начало>, <конец>, <шаг>) | аналогичен range, но лишь имитирует список, не создавая его. Используется в цикле for. |
Cпециальные функции для работы со списками
filter (<функция>, <список>) | возвращает список из тех элементов <спиcка>, для которых <функция> принимает значение "истина". |
map (<функция>, <список>) | применяет <функцию> к каждому элементу <списка> и возвращает список результатов. |
reduce (f,
<список>,
[, <начальное значение> ] ) |
возвращает значение полученное "редуцированием" <списка> функцией
f. Это значит, что имеется некая внутренняя переменная p, которая инициализируется
<начальным значением>, затем, для каждого элемента <списка>, вызывается
функция f с двумя параметрами: p и элементом <списка>. Возвращаемый
f результат присваивается p. После перебора всего <списка> reduce возвращает
p.
С помощью данной функции можно, к примеру, вычислить сумму элементов списка: def func (red, el): return red+el sum = reduce (func, , 0) # теперь sum == 15 |
lambda [<список параметров>] : <выражение> | "анонимная" функция, не имеющая своего имени и записываемая в месте своего вызова. Принимает параметры, заданные в <списке параметров>, и возвращает значение <выражения>. Используется для filter, reduce, map. Например: >>>print filter (lambda x: x>3, ) >>>print map (lambda x: x*2, ) >>>p=reduce (lambda r, x: r*x, , 1) >>>print p 24 |
Импортирование модулей
Стандартный модуль math
Переменные: pi
, e
.
Функции
(аналогичны функциям языка C):
acos(x) | cosh(x) | ldexp(x,y) | sqrt(x) |
asin(x) | exp(x) | log(x) | tan(x) |
atan(x) | fabs(x) | sinh(x) | frexp(x) |
atan2(x,y) | floor(x) | pow(x,y) | modf(x) |
ceil(x) | fmod(x,y) | sin(x) | |
cos(x) | log10(x) | tanh(x) |
Модуль string
Функции:
Заключение
Благодаря простоте и гибкости языка Python, его можно рекомендовать
пользователям (математикам, физикам, экономистам и т.д.) не являющимся
программистами, но использующими вычислительную технику и программирование
в своей работе.
Программы на Python разрабатываются в среднем в полтора-два (а
порой и в два-три) раза быстрее нежели на компилируемых языках (С, С++,
Pascal). Поэтому, язык может представлять не малый интерес и для профессиональных
программистов, разрабатывающих приложения, не критичные к скорости выполнения,
а также программы, использующие сложные структуры данных. В частности,
Python хорошо зарекомендовал себя при разработке программ работы с графами,
генерации деревьев.
Литература
Здравствуйте всем!
Удобочитаемый синтаксис, прост в обучении, высокоуровневый язык, Объектно-Ориентированый язык программирования (ООП)
, мощный, интерактивный режим, масса библиотек. Множество иных плюсов… И это всё в одном языке.
Для начала окунёмся в возможности и узнаем, что же умеет Python?
Вот источники, которые помогут Вам познакомиться ближе с Python, а может и стать будущим Гвидо ван Россумом.
*
Некоторые источники могут быть на английском. Не стоит этому удивляться, сейчас масса отличной литературы пишется именно на английском языке. Да и для самого программирования надо знать хотя бы базовые знания английского.
Настоятельно рекомендую прочитать первым делом книгу - Марк Лутц. Изучаем Python, 4-е издание . Книга переведена на русский язык, так что бояться не стоит, если Вы вдруг не знаете английский. Но именно четвёртое издание.
Для тех, кто знает английский, можно прочитать документацию на официальном сайте Python . Там всё довольно понятно описано.
А если же Вы более принимаете информацию по видео, то могу посоветовать уроки от компании Google, которые ведёт Ник Парланте - ученик из Стэнфорда. Шесть видеолекций на YouTube . Но в бочке мёда тут есть капля дёгтя… Ведёт он на английском языке с английскими субтитрами. Но надеюсь, что остановит это немногих.
Когда-то давным давно, на одном закрытом форуме я пытался проводить обучение Пайтону. В общем дело там заглохло. Мне стало жалко написанных уроков, и я решил их выложить для широкой общественности. Пока самый первый, самый простой. Дальше идет интереснее, но может быть это будет не интересно. В общем, этот пост будет пробным шаром, если понравится, буду выкладывать дальше.
Python для начинающих. Глава первая. «О чем это мы»
На всякий случай, немного скучного «evangelism». Кому он надоел, можно пропустить несколько абзацев.
Python (читается как «Пайтон» а не «питон») - скриптовый язык, разработанный Гвидо ван Россумом в качестве простого языка, легкого в изучении новичку.
В наше время Пайтон – широко распространенный язык, который используется во многих областях:
- Разработка прикладного ПО (например linux-утилиты yum, pirut, system-config-*, IM-клиент Gajim и многие другие)
- Разработка web-приложений (мощнейший Application-сервер Zope и разработанная на его основе CMS Plone, на основе которой работает например сайт ЦРУ, и масса фреймворков для быстрой разработки приложений Plones, Django, TurboGears и многие другие)
- Использование в качестве встраиваемого скриптового языка во многих играх, и не только (в офисном пакете OpenOffice.org, 3d редакторе Blender, СУБД Postgre)
- Использование в научных рассчетах (с пакетами SciPy и numPy для расчетов и PyPlot для рисования графиков Пайтон становится практически сравним с пакетами типа MatLab)
И это конечно далеко не полный список проектов, использующих этот замечательный язык.
1. Сам интерпретатор, его можно взять тут (http://python.org/download/).
2. Среда разработки. Она для начала необязательна, да и идущий в дистрибутиве IDLE подойдет новичку, но для серъезных проектов нужно что-то посерьезней.
Для Windows я использую замечательный легковесный PyScripter (http://tinyurl.com/5jc63t), для Linux – Komodo IDE.
Хотя для первого урока достаточно будет просто интерактивной оболочки самого Пайтона.
Просто запустите python.exe. Приглашение ввода не заставит себя долго ждать, оно выглядит так:
Также можно записывать программы в файлы с расширением py, в вашем любимом текстовом редакторе, который не добавляет к тексту своих символов разметки (нет Word не подойдет). Также желательно чтобы этот редактор умел делать «умные табуляторы» и не заменял пробелы знаком табуляции.
Для запуска файлов на исполнение по ним можно щелкать 2 раза. Если консольное окно закрывается слишком быстро, вставьте в конце программы следующую строку:
Тогда интерпретатор будет в конце программы ждать нажатия enter.
Или ассоциируйте py-файлы в Far с Пайтоном и открывайте нажимая enter.
Наконец можно воспользоваться одной из многих удобных IDE для Пайтона, которые предоставляют и возможности отладки и подсветку синтаксиса и многие другие «удобства».
Немного теории.
Для начала, Пайтон – язык со строгой динамической типизацией. Что это означает?
Есть языки со строгой типизацией (pascal, java, c и т.п.), у которых тип переменной определяется заранее и не может быть изменен, и есть языки с динамической типизацией (python, ruby, vb), в которых тип переменной трактуется в зависимости от присвоенного значения.
Языки с динамической типизацией можно разделить еще на 2 вида. Строгие, которые не допускают неявного преобразования типа (Пайтон) и нестрогие, которые выполняют неявные преобразования типа (например VB, в котором можно легко сложить строку "123" и число 456).
Разобравшись с классификацией Пайтона, попробуем немного «поиграть» с интерпретатором.
>>> a = b = 1 >>> a, b (1, 1) >>> b = 2 >>> a, b (1, 2) >>> a, b = b, a >>> a, b (2, 1)
Таким, образом мы видим что присваивание осуществляется с помощью знака =. Присвоить значение можно сразу нескольким переменным. При указании интерпретатору имени переменной в интерактивном режиме, он выводит ее значение.
Следующее, что необходимо знать – как строятся базовые алгоритмические единицы – ветвления и циклы. Для начала, необходима небольшая справка. В Пайтоне нет специального ограничителя блоков кода, их роль выполняют отступы. То есть то что написано с одинаковым отступом – является одним командным блоком. Поначалу это может показаться странным, но после легкого привыкание, понимаешь что эта «вынужденная» мера позволяет получать очень читабельный код.
Итак условия.
Условие задается с помощью оператора if, который заканчивается «:». Альтернативные условия которые будут выполняться если первая проверка «не прошла» задаются оператором elif. Наконец else задает ветку, которая будет выполнена если ни одно из условий не подошло.
Обратите внимание, что после ввода if интерпретатор с помощью приглашения «...» показывает что он ожидает продолжения ввода. Чтобы сообщить ему что мы закончили, необходимо ввести пустую строку.
(Пример с ветвлениями почему-то рвет разметку на хабре, не смотря на танцы с тегами pre и code. Простите за неудобство, я его кинул сюда pastebin.com/f66af97ba , если кто-то подскажет что не так - буду очень признателен)
Циклы.
Простейшим случаем цикла является цикл while. В качестве параметра он принимает условие и выполняется до тех пор, пока оно истино.
Вот маленький пример.
>>> x = 0 >>> while x<=10: ... print x ... x += 1 ... 0 1 2 ........... 10
Обратите внимание что поскольку и print x и x+=1 написаны с одинаковым отступом, они считаются телом цикла (помните что я говорил про блоки? ;-)).
Второй вид циклов в Пайтон – цикл for. Он аналогичен циклу foreach других языков. Его синтаксис условно таков.
For переменная in список:
команды
Переменной будут присваиваться по очереди все значения из списка (на самом деле там может быть не только список, но и любой другой итератор, но не будем пока этим забивать голову).
Вот простой пример. В роли списка будет выступать строка, которая является ничем иным как списком символов.
>>> x = "Hello, Python!" >>> for char in x: ... print char ... H e l ........... !
Таким образом мы можем разложить строку по символам.
Что же делать если нам нужен цикл, повторяющийся определенное число раз? Очень просто, на помощь придет функция range.
На входе она принимает от одного до трех параметров, на выходе возвращает список чисел, по которому мы можем «пройтись» оператором for.
Вот несколько примеров использования функции range, которые объясняют роль ее параметров.
>>> range(10) >>> range(2, 12) >>> range(2, 12, 3) >>> range(12, 2, -2)
И маленький пример с циклом.
>>> for x in range(10): ... print x ... 0 1 2 ..... 9
Ввод-вывод
Последнее, что следует знать перед тем как начать использовать Пайтон полноценно – это как осуществляется в нем ввод-вывод.
Для вывода используется команда print, которая выводит на печать все свои аргументы в удобочитаемом виде.
Для ввода с консоли используется функция raw_input(приглашение), которая выводит на экран приглашение и ожидает ввода пользователя, возвращая то что ввел пользователь в виде своего значения.
X = int(raw_input ("Введи число:")) print "Квадрат этого числа составляет ", x * x
Внимание! Несмотря на существование функции input() схожего действия, использовать ее в программах не рекомендуется, так как интерпретатор пытается выполнить вводимые с ее помощью синтаксические выражения, что является серьезной дырой в безопасности программы.
Вот и все для первого урока.
Домашнее задание.
1. Составить программу расчета гипотенузы прямоугольного треугольника. Длина катетов запрашивается у пользователя.
2. Составить программу нахождения корней квадратного уравнения в общем виде. Коэффициенты запрашиваются у пользователя.
3. Составить программу вывода таблицы умножения на число M. Таблица составляется от M * a, до M * b, где M, a, b запрашиваются у пользователя. Вывод должен осуществляется в столбик, по одному примеру на строку в следующем виде (например):
5 х 4 = 20
5 х 5 = 25
И так далее.
Python - это популярный и мощный язык сценариев, с помощью которого вы можете сделать все что захотите. Например, вы можете сканировать веб-сайты и собирать с них данные, создавать сетевые и инструменты, выполнять вычисления, программировать для Raspberry Pi, разрабатывать графические программы и даже видеоигры. На Python можно \\ писать системные программы, независимые от платформы.
В этой статье мы рассмотрим основы программирования на Python, мы постараемся охватить все основные возможности, которые вам понадобятся чтобы начать пользоваться языком. Мы будем рассматривать использование классов и методов для решения различных задач. Предполагается, что вы уже знакомы с основами и синтаксисом языка.
Я не буду вдаваться в историю создания и разработки языка, это вы без труда узнать из видео, которое будет прикреплено ниже. Важно отметить, что Python - скриптовый язык. Это означает, ваш код проверяется на ошибки и сразу же выполняется без какой-либо дополнительной компиляции или переработки. Такой подход еще называется интерпретируемым.
Это снижает производительность, но очень удобно. Здесь присутствует интерпретатор, в который вы можете вводить команды и сразу же видеть их результат. Такая интерактивная работа очень сильно помогает в обучении.
Запустить интерпретатор Python очень просто в любой операционной системе. Например, в Linux достаточно набрать команду python в терминале:
В открывшемся приглашении ввода интерпретатора мы видим версию Python, которая сейчас используется. В наше время очень сильно распространены две версии Python 2 и Python 3. Они обе популярны, потому что на первой было разработано множество программ и библиотек, а вторая - имеет больше возможностей. Поэтому дистрибутивы включают обе версии. По умолчанию запускается вторая версия. Но если вам нужна версия 3, то нужно выполнить:
Именно третья версия будет рассматриваться в этой статье. А теперь рассмотрим основные возможности этого языка.
Строки в Python неизменяемые, вы не можете изменить один из символов строки. Любое изменение содержимого требует создания новой копии. Откройте интерпретатор и выполняйте перечисленные ниже примеры, для того чтобы лучше усвоить все написанное:
str = "welcome " + "to python"
print (str)
str = "Losst" * 2
print (str)
Вы можете объединить строку с числом или логическим значением. Но для этого нужно использовать преобразование. Для этого существует функция str():
str = "Это тестовое число " + str(15)
print (str)
Вы можете найти символ или подстроку с помощью метода find:
str = "Добро пожаловать на сайт"
print(str.find("сайт"))
Этот метод выводит позицию первого вхождения подстроки сайт если она будет найдена, если ничего не найдено, то возвращается значение -1. Функция начинает поиск с первого символа, но вы можете начать с энного, например, 26:
str = "Добро пожаловать на сайт сайт"
print(str.find("losst",26))
В этом варианте функция вернет -1, поскольку строка не была найдена.
Мы получили позицию подстроки, которую ищем, а теперь как получить саму подстроку и то, что после нее? Для этого используйте такой синтаксис [начало:конец] ,просто укажите два числа или только первое:
str = "Один два три"
print(str[:2])
print(str)
print(str)
print(str[-1])
Первая строка выведет подстроку от первого до второго символа, вторая - от второго и до конца. Обратите внимание, что отсчет начинается с нуля. Чтобы выполнять отсчет в обратном порядке, используйте отрицательное число.
Вы можете заменить часть строки с помощью метода replace:
str = "Этот сайт про Linux"
str2 = str.replace("Linux", "Windows")
print(str2)
Если вхождений много, то можно заменить только первое:
str = "Это сайт про Linux и я подписан на этот сайт"
str2 = str.replace("сайт", "страница",1)
print(str2)
Вы можете удалить лишние пробелы с помощью функции strip:
str = " Это веб-сайт про Linux "
print(str.strip())
Также можно удалить лишние пробелы только справа rstrip или только слева - lstrip.
Для изменения регистра символов существуют специальные функции:
str="Добро пожаловать на Losst"
print(str.upper())
print(str.lower())
Есть несколько функций для конвертирования строки в различные числовые типы, это int(), float() , long() и другие. Функция int() преобразует в целое, а float() в число с плавающей точкой:
str="10"
str2="20"
print(str+str2)
print(int(str)+int(str2))
Вы можете использовать функции min(), max(), len() для расчета количества символов в строке:
str="Добро пожаловать на сайт Losst"
print(min(str))
print(max(str))
print(len(str))
Первая показывает минимальный размер символа, вторая - максимальный, а третья - общую длину строки.
Вы можете получить доступ к каждому символу строки отдельно с помощью цикла for:
str="Добро пожаловать на сайт"
for i in range(len(str)):
print(str[i])
Для ограничения цикла мы использовали функцию len(). Обратите внимание на отступ. Программирование на python основывается на этом, здесь нет скобок для организации блоков, только отступы.
Числа в Python достаточно просто объявить или применять в методах. Можно создавать целые числа или числа с плавающей точкой:
num1 = 15
num2 = 3,14
Вы можете округлить число с помощью функции round, просто укажите сколько знаков нужно оставить:
a=15.5652645
print(round(a,2))
Получить случайные числа можно с помощью модуля random:
import random
print(random.random())
По умолчанию число генерируется из диапазона от 0,0 до 1,0. Но вы можете задать свой диапазон:
import random
numbers=
print(random.choice(numbers))
Язык программирования Python имеет модуль DateTime, который позволяет выполнять различные операции с датой и временем:
import datetime
cur_date = datetime.datetime.now()
print(cur_date)
print(cur_date.year)
print(cur_date.day)
print(cur_date.weekday())
print(cur_date.month)
print(cur_date.time())
В примере показано как извлечь нужное значение из объекта. Вы можете получить разницу между двумя объектами:
import datetime
time1 = datetime.datetime.now()
time2 = datetime.datetime.now()
timediff = time2 - time1
print(timediff.microseconds)
Вы можете сами создавать объекты даты с произвольным значением:
time1 = datetime.datetime.now()
time2 = datetime.timedelta(days=3)
time3=time1+time2
print(time3.date())
Метод strftime позволяет изменить формат даты и времени зависимо от выбранного стандарта или указанного формата. Вот основные символы форматирования:
import datetime
date1 = datetime.datetime.now()
print(date1.strftime("%d. %B %Y %I:%M%p"))
Вы можете использовать функцию strptime() для создания объекта даты из строки:
import datetime
date1=datetime.datetime.strptime("2016-11-21", "%Y-%m-%d")
date2=datetime.datetime(year=2015, month=11, day=21)
print(date1);
print(date2);
Управление файлами выполняется очень просто в язык программирования Python, это лучший язык для работы с файлами. Да и вообще, можно сказать, что Python - это самый простой язык.
Для копирования файлов нужно использовать функции из модуля subutil:
import shutil
new_path = shutil.copy("file1.txt", "file2.txt")
new_path = shutil.copy("file1.txt", "file2.txt", follow_symlinks=False)
Перемещение файлов выполняется с помощью функции move:
shutil.move("file1.txt", "file3.txt")
Функция rename из модуля os позволяет переименовывать файлы:
import os
os.rename("file1.txt", "file3.txt")
Вы можете использовать встроенные функции для открытия файлов, чтения или записи данных в них:
fd = open("file1.txt")
content = fd.read()
print(content)
Сначала нужно открыть файл для работы с помощью функции open. Для чтения данных из файла используется функция read, прочитанный текст будет сохранен в переменную. Вы можете указать количество байт, которые нужно прочитать:
fd = open("file1.txt")
content = fd.read(20)
print(content)
Если файл слишком большой, вы можете разбить его на строки и уже так выполнять обработку:
content = fd.readlines()
print(content)
Чтобы записать данные в файл, его сначала нужно открыть для записи. Есть два режима работы - перезапись и добавление в конец файла. Режим записи:
fd = open("file1.txt","w")
И добавление в конец файла:
fd = open("file1.txt","a")
content = fd.write("Новое содержимое")
Чтобы создать директорию используйте функцию mkdir из модуля os:
import os
os.mkdir("./новая папка")
Вы можете использовать функции getmtime(), getatime() и getctime() для получения времени последнего изменения, последнего доступа и создания. Результат будет выведен в формате Unix, поэтому его нужно конвертировать в читаемый вид:
import os
import datetime
tim=os.path.getctime("./file1.txt")
print(datetime.datetime.fromtimestamp(tim))
С помощью функции listdir() вы можете получить список файлов в папке:
import os
files= os.listdir(".")
print(files)
Для решения той же задачи можно использовать модуль glob:
import glob
files=glob.glob("*")
print(files)
import pickle
fd = open("myfile.pk ", "wb")
pickle.dump(mydata,fd)
Затем для восстановления объекта используйте:
import pickle
fd = open("myfile.pk ", "rb")
mydata = pickle.load(fd)
Стандартная библиотека Python позволяет работать с различными форматами архивов, например, zip, tar, gzip, bzip2. Чтобы посмотреть содержимое файла используйте:
import zipfile
my_zip = zipfile.ZipFile("my_file.zip", mode="r")
print(file.namelist())
А для создания zip архива:
import zipfile
file=zipfile.ZipFile("files.zip","w")
file.write("file1.txt")
file.close()
Также вы можете распаковать архив:
import zipfile
file=zipfile.ZipFile("files.zip","r")
file.extractall()
file.close()
Вы можете добавить файлы в архив так:
import zipfile
file=zipfile.ZipFile("files.zip","a")
file.write("file2.txt")
file.close()
С помощью модуля pandas можно смотреть и разбирать содержимое CSV и Exel таблиц. Сначала нужно установить модуль с помощью pip:
sudo pip install pandas
Затем для разбора наберите:
import pandas
data=pandas.read_csv("file.csv)
По умолчанию pandas использует первую колонку для заголовков каждой из строк. Вы можете задать колонку для индекса с помощью параметра index_col или указать False, если он не нужен. Чтобы записать изменения в файл используйте функцию to_csv:
data.to_csv("file.csv)
Таким же образом можно разобрать файл Exel:
data = pd.read_excel("file.xls", sheetname="Sheet1")
Если нужно открыть все таблицы, используйте:
data = pd.ExcelFile("file.xls")
Затем можно записать все данные обратно:
data.to_excel("file.xls", sheet="Sheet1")
Программирование на Python 3 часто включает работу с сетью. Стандартная библиотека Python включает в себя возможности работы с сокетами для доступа к сети на низком уровне. Это нужно для поддержки множества сетевых протоколов.
import socket
host = "192.168.1.5"
port = 4040
my_sock = socket.create_connection ((host, port))
Этот код подключается к порту 4040 на машине 192.168.1.5. Когда сокет открыт, вы можете отправлять и получать данные:
my_sock.sendall(b"Hello World")
Нам необходимо писать символ b, перед строкой, потому что надо передавать данные в двоичном режиме. Если сообщение слишком большое, вы можете выполнить итерацию:
msg = b"Longer Message Goes Here"
mesglen = len(msg)
total = 0
while total < msglen:
sent = my_sock.send(msg)
total = total + sent
Для получения данных вам тоже нужно открыть сокет, только используется метод my_sock_recv:
data_in = my_sock.recv(2000)
Здесь мы указываем сколько данных нужно получить - 20000, данные не будут переданы в переменную, пока не будет получено 20000 байт данных. Если сообщение больше, то для его получения нужно создать цикл:
buffer = bytearray(b" " * 2000)
my_sock.recv_into(buffer)
Если буфер пуст, туда будет записано полученное сообщение.
Стандартная библиотека Python позволяет получать и отправлять электронные сообщения.
Для получения сообщений мы используем POP сервер:
import getpass,poplib
pop_serv = poplib.POP3("192.168.1.5")
pop_serv.user("myuser")
pop_serv.pass_(getpass.getpass())
Модуль getpass позволяет получить пароль пользователя безопасным образом, так что он не будет отображаться на экране. Если POP сервер использует защищенное соединение, вам нужно использовать класс POP3_SSL. Если подключение прошло успешно, вы можете взаимодействовать с сервером:
msg_list = pop_serv.list() # to list the messages
msg_count = pop_serv.msg_count()
Для завершения работы используйте:
Для подключения и работы с сервером IMAP используется модуль imaplib:
import imaplib, getpass
my_imap = imaplib.IMAP4("imap.server.com")
my_imap.login("myuser", getpass.getpass())
Если ваш IMAP сервер использует защищенное соединение, нужно использовать класс IMAP4_SSL. Для получения списка сообщений используйте:
data = my_imap.search(None, "ALL")
Затем вы можете выполнить цикл по выбранному списку и прочитать каждое сообщение:
msg = my_imap.fetch(email_id, "(RFC822)")
Но, не забудьте закрыть соединение:
my_imap.close()
my_imap.logout()
Для отправки почты используется протокол SMTP и модуль smtplib:
import smtplib, getpass
my_smtp = smtplib.SMTP(smtp.server.com")
my_smtp.login("myuser", getpass.getpass())
Как и раньше, для защищенного соединения используйте SMTP_SSL. Когда соединение будет установлено, можно отправить сообщение:
from_addr = "[email protected]"
to_addr = "[email protected]"
msg = "From: [email protected]\r\nTo: [email protected]\r\n\r\nHello, this is a test message"
my_smtp.sendmail(from_addr, to_addr, msg)
Программирование на Python часто используется для написания различных скриптов для работы с веб.
Модуль urllib позволяет выполнять запросы к веб-страницам различными способами. Для отправки обычного запроса используется класс request. Например, выполним обычный запрос страницы:
import urllib.request
my_web = urllib.request.urlopen("https://www.google.com")
print(my_web.read())
Если вам нужно отправить веб-форму, необходимо использовать не GET запрос, а POST:
import urllib.request
mydata = b"Your Data Goes Here"
my_req = urllib.request.Request("http://localhost", data=mydata,method="POST")
my_form = urllib.request.urlopen(my_req)
print(my_form.status)
С помощью класса Socket вы можете принимать входящие подключения, а значит можете создать веб-сервер с минимальными возможностями:
import socket
host = ""
port = 4242
my_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_server.bind((host, port))
my_server.listen(1)
Когда сервер создан. вы можете начать принимать соединения:
addr = my_server.accept()
print("Connected from host ", addr)
data = conn.recv(1024)
И не забудьте закрыть соединение:
Как и большинство современных языков, Python позволяет запускать несколько параллельных потоков, которые могут быть полезными, если нужно выполнить сложные вычисления. В стандартной библиотеке есть модуль threading, который содержит класс Therad:
import threading
def print_message():
print("The message got printed from a different thread")
my_thread = threading.Thread(target=print_message)
my_thread.start()
Если функция работает слишком долго, вы можете проверить все ли в порядке, с помощью функции is_alive(). Иногда вашим потокам нужно получать доступ к глобальным ресурсам. Для этого используются блокировки:
import threading
num = 1
my_lock = threading.Lock()
def my_func():
global num, my_lock
my_lock.acquire()
sum = num + 1
print(sum)
my_lock.release()
my_thread = threading.Thread(target=my_func)
my_thread.start()
В этой статье мы рассмотрели основы программирования python. Теперь вы знаете большинство часто используемых функций и можете применять их в своих небольших программах. Вам понравиться программирование на Python 3, это очень легко! Если у вас остались вопросы, спрашивайте в комментариях!
На завершение статьи отличная лекция о Python:
Сколько на самом деле существует языков программирования? Их насчитывается несколько десятков. Они разработаны под различные задачи, на любой вкус, размер и цвет. Почему я выбрал именно этот язык? Python способен выполнять очень широкий круг задач, начиная от простого скрипта до создания целых сайтов. Python для начинающих достаточно прост, лаконичен и удобен в изучении.
Из этой статьи вы узнаете:
Привет, привет! На связи Гридин Семён. Наконец — то, я добрался до основной тематики этого блога, программирование интеллектуальных систем с помощью языка Python. Я долго шёл к этому, готовился. И вот, я готов писать вам интересные статьи и изучать глубоко эту тему.
Для чего мне это нужно? Для начала я ставил себе такую задачу о разработке , машинного обучения и компьютерного зрения.
Может если повезёт я попаду в число разработчиков по робототехническим сложным проектам, может стану сам организатором и открою производство персональных роботов, а может, может... Если ничего не получится, да и бог с ним, я получаю удовольствие от процесса, а не от результата.
Тогда начну свою повесть))...
Как я и писал выше, этот язык выполняет очень большую сферу функций. Всё охватить просто невозможно. Поэтому перед тем как заниматься изучением, пожалуйста, задайте себе вопрос, а для чего мне это нужно? Какие задачи я буду решать, применяя этот язык? Если вы ответили положительно, двигаемся дальше.
Чем же может быть полезен Python?
И тому подобное. Python способен выполнять львиную долю рутинных задач.
На Питоне можно собрать и резервное копирование, и работу с электронными письмами, и простейший калькулятор, и скрипт для сайта. Язык ничем не ограничен. Что самое интересное, используется в таких IT-гигантах, как Google и Yandex.
В этой статье мы рассмотрим с вами программирование Python с нуля.
Для того чтобы у вас работала программа на определённом устройстве, неважно какая ОС — windows, linux, RaspbianOS, MacOS. Важно, чтобы у вас находился интерпретатор, который будет понимать команды и выполнять.
Делаем следующим образом, скачиваем IDE python c официального источника .
Итак интерпретатор обрабатывает текстовый код программы. Существует интерактивный режим среды разработки. Можно запустить несколькими способами:
Вам откроется это окошечко:
Кстати оболочку можно использовать и в качестве обычного калькулятора. Я рассматриваю этот софт, как возможность раскрыть полный потенциал одноплатных компьютеров.
Для Arduino тоже есть своя программная оболочка . Почитайте.
С чего начать обучение python? Давайте попробуем написать первую программу?
Программа на языке Python — это обычный текстовый файл с написанным кодом. Расширение этого файла.py. Запустить программу можно, указав соответствующее имя в командной строке. Напишем с вами простейшую стандартную программу «Hello world!».
Задача такая — вывести на экран "Hello world!". Запускаем NotePad.
Пишем следующий код:
Python
print ("Hello world!!!")
print ("Hello world!!!" ) |
И сохраняем в папку соблюдая путь C:\MyScripts . Рекомендую все проекты скидывать в эту папку.
Для того, чтобы нам запустить скрипт, выберите командную строку и введите путь к вашему файлу:
По поводу книг. На самом деле, хоть язык и прост в плане создания кода, но очень много нюансов и различных библиотек для реализации гигантского спектра задач.
Лучшая книга по python для начинающих по праву считается самоучитель Майка МакГрата. Исчерпывающее руководство по составлению кода на языке Питон.
Извините за качество фото, по другому не получается. Остальные книги пока не рекомендую покупать, так как они на самом деле громоздкие и объёмные. Для базиса достаточно будет и МакГрата.
Ребят, на этом у меня всё, если у вас есть какие-то вопросы, вы всегда можете мне написать. Подписывайтесь на новости блога. Рассылайте друзьям. Спасибо за внимание.
С уважением, Гридин Семён