Язык программирования python 3. Синтаксис языка Python

Хотите войти в мир программирования и быстро написать несколько своих первых программ? Или мечтаете изучить новые языки, но не знаете, с чего начать? Обратите свое внимание на курсы по основам программирования на Python. Далее вы узнаете подробности о том, почему именно этот язык рекомендуется для начинающих и какие программы можно на нем создавать.

Основы Python для начинающих программистов

Python — это мощный высокоуровневый объектно-ориентированный язык программирования, созданный Гвидо ван Россумом. У него простой в использовании синтаксис, что делает его идеальным языком для тех, кто пытается научиться программированию в первый раз. Для продолжения знакомства с языком можно прочитать книгу Дмитрия Златопольского “Python — основы программирования». Но мы начнем с самых основ. Литературы по этому направлению достаточно много. Еще один вариант — книги Гарри Персиваля “Python. Разработка на основе тестирования”. В ней рассказывается о языке с практической точки зрения.

Применение языка на практике

Итак, что же пишут на Python или “Питон”, как его еще называют в среде программистов, и зачем его учить? Python — это язык общего назначения. На нем пишут веб-приложения с использованием различный фреймворков, системные утилиты и приложения для автоматизации различных действий. Курсов по основам программирования на Python сейчас достаточно, чтобы попробовать изучить язык самостоятельно.

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

Зачем изучать язык Python

Python также использует очень простой и сжатый синтаксис и динамическую типизацию. Знание основ алгоритмизации и программирования на Python позволяет быстро создать программу и запустить ее. Если вам нужен язык для быстрого создания приложений и сценариев в нескольких областях, вам будет трудно найти лучшую альтернативу, чем Python. У него имеется ряд очевидных преимуществ перед другими языками программирования:

  • универсальное использование — на этом языке можно писать разные типы приложений, потому вместе с его освоением открываются широкие возможности для применения этого языка;
  • простота — изначально язык разрабатывался для упрощения работы с ним человека;
  • популярность в среде программистов и востребованность на рынке труда — Python широко применяется в различных проектах;
  • большое количество доступных библиотек расширяют возможности языка и делают его еще более универсальным;
  • кроссплатформенность — один раз написанная программа будет работать на любой платформе, где есть интерпретатор языка;
  • одним из важных плюсов языка является его качественная документация.

Python также является одним из старейших языков веб-разработки, созданных Гвидо ван Россумом в Национальном научно-исследовательском институте математики и информатики в Нидерландах в начале 90-х годов. Язык сильно заимствован из C++, C и других языков сценариев. Он использует ключевые слова на английском языке, которые составляют большую часть программирования на Python. Если вы освоите их, то можно считать, что по большей части уже освоили язык. Это займет некоторое время и вам будет нужно понять основные концепции, прежде чем начинать. Потому давайте начнем с того, что познакомимся с ними.

Преимущества языка Python

Одним из ключевых преимуществ программирования Python является его интерпретирующий характер. Это означает, что код программы не компилируется в исполняемый файл, а выполняется интерпретатором всякий раз заново, когда происходит запуск пользователем. Потому для запуска программы необходимо его наличие на том компьютере, где вы будете создавать программы. Интерпретатор и стандартная библиотека доступны в бинарной или исходной форме с веб-сайта Python и могут беспрепятственно работать во всех основных операционных системах.

Итак, к основным преимуществам Python можно отнести:

  • Интерпретирующий характер: язык обрабатывается интерпретатором во время выполнения, например PHP или PERL, поэтому вам не нужно компилировать программу перед выполнением.
  • Интерактивность: вы можете напрямую взаимодействовать с интерпретатором при написании вашей программы.
  • Идеально подходит для начинающих: для начинающих программистов.
  • Python — отличный выбор, поскольку он поддерживает разработку приложений, от игр до браузеров до обработки текста.

    Как установить и запустить интерпретатор

    Для того чтобы начать писать на Python, нужно скачать и установить его интерпретатор на официальном сайте языка, выбрав версию для своей операционной системы. Стоит отметить, что существует две ветки языка — вторая и третья. Лучше начать изучать основы Python 3, если другой версии вы еще не устанавливали. При установке на Windows обязательно нужно обратить внимание на то, включены ли опция Add Python to Path и утилита Pip. После установки его можно запустить. Для этого в командной строке нужно ввести: “python”, и он запустится. В окне появятся три угловые скобки, означающие, что вы находитесь в интерпретаторе. Этот язык программирования также свободно распространяемый, и по нему можно найти советы, сторонние инструменты, программы, модули и дополнительную документацию.

    Ключевые слова в Python

    В интерпретаторе можно выполнять действия на языке в интерактивном режиме. Каждое действие выполняется сразу, после нажатия Enter. Можно использовать его как продвинутый калькулятор. Но писать большую программу в интерпретаторе слишком трудоемко. Поэтому имеет смысл пользоваться текстовыми редакторами. Готовый текстовый файл можно затем выполнить интерпретатором. Одна из основ Python состоит в том, что любые блоки в нем задаются с помощью отступов, поэтому необходимо должны отступать, чтобы запустить блок и удалить его. Интерпретатор может быть легко расширен новыми типами данных или функциями в C++ или C. Язык программирования Python работает как расширение для настраиваемых приложений. То, что делает этот язык настолько легким для изучения — это тот факт, что он использует английские ключевые слова, а не знаки препинания, и имеет меньше синтаксических конструкций, чем в других языках программирования.

    Начало работы с Python

    Перед началом работы вне интерпретатора, чтобы создать программу, нужно открыть текстовый редактор и создать пустой файл с кодировке utf-8 и задать расширение “py”. Лучше всего для этой цели использовать специальные редакторы кода для программистов. В первой строке нужно обозначить кодировку. Строки, начинающиеся со знака #, считаются комментариями и не выполняются. Python неявно и динамически типизирован, поэтому вам не нужно объявлять переменные. Типы принудительно применяются, и переменные также чувствительны к регистру, поэтому var и VAR рассматриваются как две отдельные переменные.Если вы хотите знать, как работает какой-либо объект, вам просто нужно ввести следующее: “help(object)”. Вы также можете использовать команду “dir (object)”, чтобы узнать все методы конкретной опции, и вы можете использовать объект “__ doc__”, чтобы узнать его строку документа.

    Как запустить написанную программу

    Запускать написанную программу нужно также в командной строке. Для этого нужно написать имя интерпретатора и через пробел — имя файла с написанной программой. При запуске программы нужно указывать полный путь к файлу. Это не всегда просто, так как путь может быть очень длинным, поэтому иногда проще сменить текущую директорию в командной строке и там запускать интерпретатор. Для этого нужно подняться в нужную директорию, зажать клавишу shift, правой кнопкой мыши кликнуть по директории и в открывшемся меню выбрать опцию “открыть окно команд”. Тогда командная строка будет запущена в этой директории. Далее в окне консоли нужно ввести имя интерпретатора и через пробел — имя файла, который находится в ней.

    Синтаксис языка

    Основы программирования на примере языка Python не слишком отличаются от других языков, но переменные несут немного другой смысл. У Python нет обязательных символов для завершения операторов. Любые блоки задаются с помощью отступов, поэтому вы должны отступать, чтобы запустить блок и удалить его. Для многострочных комментариев необходимо использовать многострочные строки. Значения присваиваются при помощью знака “=”, а тестирование равенства выполняется с двумя из них “==”. Вы можете уменьшать или увеличивать значения с помощью операторов = или — = с суммой в правой части. Это может работать со строками и другими типами данных. Вы также можете использовать несколько переменных в одной строке.

    Типы данных в Python

    Теперь рассмотрим типы данных. В основе Python лежат структуры данных — это словари (dict), кортежи (tuples) и списки (lists). Наборы можно найти в библиотеке наборов, которые доступны во всех версиях Python. Списки похожи на одномерные массивы, хотя вы также можете иметь списки других списков. Словари по существу являются ассоциативными массивами или хэш-таблицами. Кортежи представляют собой одномерные массивы. Теперь массивы в основе Python могут быть любого типа, а ypes всегда равно нулю. Отрицательные числа начинаются от конца до начала, а -1 — последний элемент. Переменные также могут указывать на функции.

    Строки в Python

    Строки Python могут использовать одиночные или двойные кавычки, и вы можете использовать кавычки одного вида в строке с использованием другого вида. Многострочные строки заключены в одиночные или тройные двойные кавычки. Чтобы заполнить строки значениями, вы можете использовать оператор modulo (%), а затем кортеж. Каждый% заменяется элементом кортежа слева направо, и вы также можете использовать словарные подстановки. Операторы управления потоком Python: “while”, “for” и “if”. Для ветвления вам нужно использовать “if”. Для перечисления через список используйте “for”. Для получения списка номеров используйте диапазон.

    Функции в Python

    Ключевое слово “def” используется для объявления функций. Привязывание другого объекта к переменной удаляет старый и заменяет неизменяемые типы. Необязательные аргументы могут быть заданы в объявлении функции после обязательных аргументов, присваивая им значения по умолчанию. В случае именованных аргументов имени аргумента присваивается значение. Функции могут возвращать кортеж, и вы можете эффективно возвращать несколько значений, используя распаковку кортежа. Параметры передаются через ссылку, но кортежи, ints, строки и другие неизменяемые типы неизменяемы, потому что передается только местоположение памяти элемента.

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

    В которой, в сжатой форме,
    рассказывают об основах языка Python. Я предлагаю вам перевод этой статьи. Перевод не дословный. Я постарался подробнее объяснить некоторые моменты, которые могут быть непонятны.

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

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

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

    Синтаксис

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


    >>> myvar = 3
    >>> myvar += 2
    >>> myvar -= 1
    ""«Это многострочный комментарий
    Строки заключенные в три двойные кавычки игнорируются»""

    >>> mystring = «Hello»
    >>> mystring += " world."
    >>> print mystring
    Hello world.
    # Следующая строка меняет
    значения переменных местами. (Всего одна строка!)

    >>> myvar, mystring = mystring, myvar

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

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


    >>> sample = , («a» , «tuple» )] #Список состоит из целого числа, другого списка и кортежа
    >>> #Этот список содержит строку, целое и дробное число
    >>> mylist = «List item 1 again» #Изменяем первый (нулевой) элемент листа mylist
    >>> mylist[-1 ] = 3 .14 #Изменяем последний элемент листа
    >>> mydict = {«Key 1» : «Value 1» , 2 : 3 , «pi» : 3 .14 } #Создаем словарь, с числовыми и целочисленным индексами
    >>> mydict[«pi» ] = 3 .15 #Изменяем элемент словаря под индексом «pi».
    >>> mytuple = (1 , 2 , 3 ) #Задаем кортеж
    >>> myfunction = len #Python позволяет таким образом объявлять синонимы функции
    >>> print myfunction(list )
    3

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


    >>> mylist = [«List item 1» , 2 , 3 .14 ]
    >>> print mylist[:] #Считываются все элементы массива
    ["List item 1" , 2 , 3 .1400000000000001 ]
    >>> print mylist #Считываются нулевой и первый элемент массива.
    ["List item 1" , 2 ]
    >>> print mylist[-3 :-1 ] #Считываются элементы от нулевого (-3) до второго (-1) (не включительно)
    ["List item 1" , 2 ]
    >>> print mylist #Считываются элементы от первого, до последнего

    Строки

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


    >>>print «Name: %s\nNumber: %s\nString: %s» % (myclass .name, 3 , 3 * "-" )
    Name: Poromenos
    Number: 3
    String: -
    strString = ""«Этот текст расположен
    на нескольких строках»""

    >>> print «This %(verb)s a %(noun)s.» % {«noun» : «test» , «verb» : «is» }
    This is a test.

    Операторы

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


    rangelist = range (10 ) #Получаем список из десяти цифр (от 0 до 9)
    >>> print rangelist
    for number in rangelist: #Пока переменная number (которая каждый раз увеличивается на единицу) входит в список…
    # Проверяем входит ли переменная
    # numbers в кортеж чисел (3 , 4 , 7 , 9 )
    if number in (3 , 4 , 7 , 9 ): #Если переменная number входит в кортеж (3, 4, 7, 9)...
    # Операция «break » обеспечивает
    # выход из цикла в любой момент
    break
    else :
    # «continue » осуществляет «прокрутку»
    # цикла. Здесь это не требуется, так как после этой операции
    # в любом случае программа переходит опять к обработке цикла
    continue
    else :
    # «else » указывать необязательно. Условие выполняется
    # если цикл не был прерван при помощи «break ».
    pass # Ничего не делать

    if rangelist == 2 :
    print «The second item (lists are 0-based) is 2»
    elif rangelist == 3 :
    print «The second item (lists are 0-based) is 3»
    else :
    print «Dunno»

    while rangelist == 1 :
    pass

    Функции

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


    # arg2 и arg3 - необязательые аргументы, принимают значение объявленное по умолчни,
    # если не задать им другое значение при вызове функци.
    def myfunction(arg1, arg2 = 100 , arg3 = «test» ):
    return arg3, arg2, arg1
    #Функция вызывается со значением первого аргумента - "Argument 1", второго - по умолчанию, и третьего - "Named argument" .
    >>>ret1, ret2, ret3 = myfunction(«Argument 1» , arg3 = «Named argument» )
    # ret1, ret2 и ret3 принимают значения "Named argument", 100, "Argument 1" соответственно
    >>> print ret1, ret2, ret3
    Named argument 100 Argument 1

    # Следующая запись эквивалентна def f(x): return x + 1
    functionvar = lambda x: x + 1
    >>> print functionvar(1 )
    2

    Классы

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


    class Myclass :
    common = 10
    def __init__(self ):
    self .myvariable = 3
    def myfunction(self , arg1, arg2):
    return self .myvariable

    # Здесь мы объявили класс Myclass . Функция __init__ вызывается автоматически при инициализации классов.
    >>> classinstance = Myclass () # Мы инициализировали класс и переменная myvariable приобрела значение 3 как заявлено в методе инициализации
    >>> #Метод myfunction класса Myclass возвращает значение переменной myvariable
    3
    # Переменная common объявлена во всех классах
    >>> classinstance2 = Myclass ()
    >>> classinstance.common
    10
    >>> classinstance2.common
    10
    # Поэтому, если мы изменим ее значение в классе Myclass изменятся
    # и ее значения в объектах, инициализированных классом Myclass
    >>> Myclass.common = 30
    >>> classinstance.common
    30
    >>> classinstance2.common
    30
    # А здесь мы не изменяем переменную класса. Вместо этого
    # мы объявляем оную в объекте и присваиваем ей новое значение
    >>> classinstance.common = 10
    >>> classinstance.common
    10
    >>> classinstance2.common
    30
    >>> Myclass.common = 50
    # Теперь изменение переменной класса не коснется
    # переменных объектов этого класса
    >>> classinstance.common
    10
    >>> classinstance2.common
    50

    # Следующий класс является наследником класса Myclass
    # наследуя его свойства и методы, ктому же класс может
    # наследоваться из нескольких классов, в этом случае запись
    # такая: class Otherclass(Myclass1, Myclass2, MyclassN)
    class Otherclass(Myclass):
    def __init__(self , arg1):
    self .myvariable = 3
    print arg1

    >>> classinstance = Otherclass(«hello» )
    hello
    >>> classinstance.myfunction(1 , 2 )
    3
    # Этот класс не имеет совйтсва test, но мы можем
    # объявить такую переменную для объекта. Причем
    # tэта переменная будет членом только class instance.
    >>> classinstance.test = 10
    >>> classinstance.test
    10

    Исключения

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


    def somefunction():
    try :
    # Деление на ноль вызывает ошибку
    10 / 0
    except ZeroDivisionError :
    # Но программа не "Выполняет недопустимую операцию"
    # А обрабатывает блок исключения соответствующий ошибке «ZeroDivisionError»
    print «Oops, invalid.»

    >>> fnexcept ()
    Oops, invalid.

    Импорт

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


    import random #Импортируем библиотеку «random»
    from time import clock #И заодно функцию «clock» из библиотеки «time»

    Randomint = random .randint(1 , 100 )
    >>> print randomint
    64

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

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


    import pickle
    mylist = [«This» , «is» , 4 , 13327 ]
    # Откроем файл C:\binary.dat для записи. Символ «r»
    # предотвращает замену специальных сиволов (таких как \n, \t, \b и др.).
    myfile = file (r«C:\binary.dat» , «w» )
    pickle .dump(mylist, myfile)
    myfile.close()

    Myfile = file (r«C:\text.txt» , «w» )
    myfile.write(«This is a sample string» )
    myfile.close()

    Myfile = file (r«C:\text.txt» )
    >>> print myfile.read()
    "This is a sample string"
    myfile.close()

    # Открываем файл для чтения
    myfile = file (r«C:\binary.dat» )
    loadedlist = pickle .load(myfile)
    myfile.close()
    >>> print loadedlist
    ["This" , "is" , 4 , 13327 ]

    Особенности

    • Условия могут комбинироваться. 1 < a < 3 выполняется тогда, когда а больше 1, но меньше 3.
    • Используйте операцию «del » чтобы очищать переменные или элементы массива .
    • Python предлагает большие возможности для работы со списками . Вы можете использовать операторы объявлении структуры списка. Оператор for позволяет задавать элементы списка в определенной последовательности, а if - позволяет выбирать элементы по условию.
    >>> lst1 =
    >>> lst2 =
    >>> print
    >>> print
    # Оператор «any» возвращает true, если хотя
    # бы одно из условий, входящих в него, выполняется.
    >>> any(i % 3 for i in )
    True
    # Следующая процедура подсчитывает количество
    # подходящих элементов в списке
    >>> sum (1 for i in if i == 3 )
    3
    >>> del lst1
    >>> print lst1
    >>> del lst1
    • Глобальные переменные объявляются вне функций и могут быть прочитанны без каких либо объявлений. Но если вам необходимо изменить значение глобальной переменной из функции, то вам необходимо объявить ее в начале функции ключевым словом «global », если вы этого не сделаете, то Python объявит переменную, доступную только для этой функции.
    number = 5

    def myfunc():
    # Выводит 5
    print number

    def anotherfunc():
    # Это вызывает исключение, поскольку глобальная апеременная
    # не была вызванна из функции. Python в этом случае создает
    # одноименную переменную внутри этой функции и доступную
    # только для операторов этой функции.
    print number
    number = 3

    def yetanotherfunc():
    global number
    # И только из этой функции значение переменной изменяется.
    number = 3

    Эпилог

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

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

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

    Теги: Добавить метки

    Интерпретируемые ЯП не компилируются в машинный код: инструкции просто исполняются по ходу программы.

    Преимущества интерпретируемых ЯП перед компилируемыми:

    • Кроссплатформенность (Вам не нужно компилировать программу под всё. Написанный однажды код будет работать на всём).
    • Динамическая типизация (переменные сами определяют нужный тип).
    • Рефлексия и интроспекция (способность программы к самомодификации).
    • И многое другое, что в данной статье будет излишним.

    Ну и недостатки:

    • Меньшая производительность(иногда значительно ).
    • Нужда в программе — интерпретаторе.

    Ну и плюсы самого Python 3:

    • Простой и красивый синтаксис.
    • Большое количества встроенных и доступных функций.
    • Благодаря популярности, большое количество доступной информации.

    Ну вот мы кратко узнали о том, что за Python и о его отличительных особенностях.

    Синтаксис

    Хоть сейчас мы и покажем операторы и конструкции, которых вы возможно не знаете, однако для дальнейшего обучения лучше их узнать заранее.

    Так вот, синтаксис Python крайне прост и умещается в небольшой абзац:

    • Конец строки — конец инструкции.
    • Вложенные инструкции отделяются от основных отступами т.е. разным их количеством.
    • Вложенные инструкции всегда пишутся после основной отделяясь от неё двоеточием.

    Ниже приведён пример всего вышесказанного:

    print("Hi, i am Python!") # вывод строки Hi, i am Python! if 3.14 < 1592: # условный оператор (будет рассмотрен в след. уроках) print("good") # и опять выводим сообщение print("work") # и еще

    Ну и пара частных случаев:

    • Можно писать несколько инструкций в одной строке. Однако это понижает удобочитаемость:

      x = 1.14; y = 2.0014; print(x + y)

      x = 1.14 ; y = 2.0014 ; print (x + y )

    • Можно писать одну инструкцию в нескольких строках. Для этого ее нужно заключить в пару круглых, квадратных или фигурных скобок:

      if (5 > 1 and 1 < 2 and 8 == 8 and "good" != "bad"): print("it is true")

    Ну, а теперь напишем нашу первую программу!

    Первая программа:

    Что бы написать программу в Python IDLE нужно:

    1. Открыть Python IDLE.
    2. Выбрать File -> New File .
    3. Написать программу (код ниже).
    4. Сохранить Ctrl + s .
    5. Нажать F5 для запуска.

    Для начала мы напишем и запустим код написанный ниже, а потом проанализируем его:

    s = input("What is your name?") print("Hi, ", s,"! Welcome to the world of discovering! Welcome to Python!")

    В данной строке переменной s присваивается значение функции input() с параметром "What is your name?\n" . Если вы не всё поняли то не волнуйтесь, в следующих статьях всё будет подробно рассказано.

    Пока лишь важно понимать, что функция input() получает строку введённую с клавиатуры, т.е. является оператором ввода, а s получает значение input() . Видим, что инструкция рассполжена в одной строке по правилам языка Python. Кстати символ "\n" является специальным и обозначает переход на новую строку.

    print("Hi, ", s,"! Welcome to the world of discovering! Welcome to Python!")

    print ("Hi, " , s , "! Welcome to the world of discovering! Welcome to Python!" )

    В данной же строке мы имеем лишь функцию print() , которая является оператором вывода в Python. Как мы можем заметить функция имеет много различных параметров, которые надо вывести (указываются они через запятую).

    Давайте посмотрим на типичную работу программы.

    Введение


    В связи с наблюдаемым в настоящее время стремительным развитием персональной вычислительной техники, происходит постепенное изменение требований, предъявляемых к языкам программирования. Все большую роль начинают играть интерпретируемые языки, поскольку возрастающая мощь персональных компьютеров начинает обеспечивать достаточную скорость выполнения интерпретируемых программ. А единственным существенным преимуществом компилируемых языков программирования является создаваемый ими высокоскоростной код. Когда скорость выполнения программы не является критичной величиной, наиболее правильным выбором будет интерпретируемый язык, как более простой и гибкий инструмент программирования.

    В связи с этим, определенный интерес представляет рассмотрение сравнительно нового языка программирования Python (пайтон), который был создан его автором Гвидо ван Россумом (Guido van Rossum) в начале 90-х годов.

    Общие сведения о Python. Достоинства и недостатки


    Python является интерпретируемым, изначально объектно-ориентированным языком программирования. Он чрезвычайно прост и содержит небольшое число ключевых слов, вместе с тем очень гибок и выразителен. Это язык более высокого уровня нежели Pascal, C++ и, естественно C, что достигается, в основном, за счет встроенных высокоуровневых структур данных (списки, словари, тьюплы).

    Достоинства языка.
    Несомненным достоинством является то, что интерпретатор Python реализован практически на всех платформах и операционных системах. Первым таким языком был C, однако его типы данных на разных машинах могли занимать разное количество памяти и это служило некоторым препятствием при написании действительно переносимой программы. Python же таким недостатком не обладает.

    Следующая немаловажная черта - расширяемость языка, этому придается большое значение и, как пишет сам автор, язык был задуман именно как расширяемый. Это означает, что имеется возможность совершенствования языка всеми всеми заинтересованными программистами. Интерпретатор написан на С и исходный код доступен для любых манипуляций. В случае необходимости, можно вставить его в свою программу и использовать как встроенную оболочку. Или же, написав на C свои дополнения к Python и скомпилировав программу, получить "расширенный" интерпретатор с новыми возможностями.

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

    • Numerical Python - расширенные математические возможности, такие как манипуляции с целыми векторами и матрицами;
    • Tkinter - построение приложений с использованием графического пользовательского интерфейса (GUI) на основе широко распространенного на X-Windows Tk-интерфейса;
    • OpenGL - использование обширной библиотеки графического моделирования двух- и трехмерных объектов Open Graphics Library фирмы Silicon Graphics Inc. Данный стандарт поддерживается, в том числе, в таких распространенных операционных системах как Microsoft Windows 95 OSR 2, 98 и Windows NT 4.0.
    Недостатки языка.
    Единственным недостатком, замеченным автором, является сравнительно невысокая скорость выполнения Python-программы, что обусловлено ее интерпретируемостью. Однако, на наш взгляд, это с лихвой окупается достоинствами языка при написании программ не очень критичных к скорости выполнения.

    Обзор особенностей


    1. Python, в отличие от многих языков (Pascal, C++, Java, и т.д.), не требует описания переменных. Они создаются в месте их инициализации, т.е. при первом присваивании переменной какого-либо значения. Значит, тип переменной определяется типом присваиваемого значения. В этом отношении Python напоминает Basic.
    Тип переменной не является неизменным. Любое присваивание для нее корректно и это приводит лишь к тому, что типом переменной становится тип нового присваиваемого значения.

    2. В таких языках как Pascal, C, C++ организация списков представляла некоторые трудности. Для их реализации приходилось хорошо изучать принципы работы с указателями и динамической памятью. И даже имея хорошую квалификацию, программист, каждый раз заново реализуя механизмы создания, работы и уничтожения списков, мог легко допустить трудноуловимые ошибки. Ввиду этого были созданы некоторые средства для работы со списками. Например, в Delphi Pascal имеется класс TList, реализующий списки; для С++ разработана библиотека STL (Standard Template Library), содержащая такие структуры как векторы, списки, множества, словари, стеки и очереди. Однако, такие средства имеются не во всех языках и их реализациях.

    Одной из отличительных черт Python является наличие таких встроенных в сам язык структур как тьюплы (tuple), списки (list) и словари (dictionary), которые иногда называют картами (map). Рассмотрим их поподробней.

    1. Тьюпл . Он чем-то напоминает массив: состоит из элементов и имеет строго определенную длину. Элементами могут быть любые значения - простые константы или объекты. В отличие от массива, элементы тьюпла не обязательно однородны. А тем, что отличает тьюпл от списка (list) является то, что тьюпл не может быть изменен, т.е. мы не можем i-тому элементу тьюпла присвоить что-то новое и не можем добавлять новые элементы. Таким образом, тьюпл можно назвать списком-константой. Синтаксически тьюпл задается путем перечисления через запятую всех элементов, и все это заключено в круглые скобки:

    2. (1, 2, 5, 8)
      (3.14, ‘ string ’, -4)
      Все элементы индексируются с нуля. Для получения i-го элемента необходимо указать имя тьюпла затем индекс i в квадратных скобках. Пример:
      t = (0, 1, 2, 3, 4)
      print t, t[-1], t[-3]
      Результат : 0 4 2
      Таким образом, тьюпл можно было назвать вектором-константой, если бы его элементы всегда были однородными.
    3. Список . Хорошим, частным примером списка может служить строка (string) языка Turbo Pascal. Элементами строки являются одиночные символы, ее длина не фиксирована, имеется возможность удалять элементы или, напротив, вставлять их в любом месте строки. Элементами же списка могут быть произвольные объекты не обязательно одного и того же типа. Чтобы создать список, достаточно перечислить его элементы через запятую, заключив все это в квадратные скобки:


    4. [‘string’, (0,1,8), ]
      В отличие от тьюпла, списки можно модифицировать по своему желанию. Доступ к элементам осуществляется также как и в тьюплах. Пример:
      l = ]
      print l, l, l[-2], l[-1]
      Результат : 1 s (2,8) 0
    5. Словарь . Напоминает тип запись (record) в Pascal или структуры (structure) в С. Однако, вместо схемы "поле записи"-"значение" здесь применяется "ключ"-"значение". Словарь представляет собой набор пар "ключ"-"значение". Здесь "ключ" - константа любого типа (но преимущественно применяются строки), он служит для именования (индексирования) некоторого соответствующего ему значения (которое можно менять).

    6. Словарь создается путем перечисления его элементов (пар "ключ"-"значение", разделенных двоеточием), через запятую и заключения всего этого в фигурные скобки. Для получения доступа к некоторому значению необходимо, после имени словаря, в квадратных скобках записать соответствующий ключ. Пример:
      d = {"a": 1, "b": 3, 5: 3.14, "name": "John"}
      d["b"] = d
      print d["a"], d["b"], d, d["name"]
      Результат : 1 3.14 3.14 John
      Для добавления новой пары "ключ"-"значение" достаточно присвоить элементу с новым ключом соответствующее значение:
      d["new"] = "new value"
      print d
      Результат : {"a":1, "b":3, 5:3.14, "name":"John", "new":"new value"}

    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 это интерпретирует так:

  • дать объекту "список " имя a ;
  • дать этому объекту еще одно имя - b ;
  • модифицировать нулевой элемент объекта.

  • Вот и получилась "псевдо" семантика указателей.

    И последнее, что стоит сказать насчет этого: хотя нет возможности изменения структуры тьюпла, но содержащиеся в нем мутируемые компоненты по-прежнему доступны для модификации:

    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 все гораздо проще: выделение блока операторов осуществляется путем сдвига выделяемой группы на один или более пробелов или символов табуляции вправо относительно заголовка конструкции к которой и будет относиться данный блок. Например:

    if x > 0: print ‘ x > 0 ’ x = x - 8 else: print ‘ x <= 0 ’ x = 0 Тем самым, хороший стиль записи программ, к которому призывают преподаватели языков Pascal, C++, Java и т.д., здесь приобретается с самого начала, поскольку, по-другому просто не получится.

    Описание языка. Управляющие конструкции



    Обработка исключительных ситуаций


    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 хорошо зарекомендовал себя при разработке программ работы с графами, генерации деревьев.

    Литература


    1. Бадд Т. Объектно-ориентированное программирование. - СПб.: Питер, 1997.
    2. Guido van Rossum . Python Tutorial. (www.python.org)
    3. Chris Hoffman . A Python Quick Reference. (www.python.org)
    4. Guido van Rossum . Python Library Reference. (www.python.org)
    5. Guido van Rossum . Python Reference Manual. (www.python.org)
    6. Гвидо ван Россум . Семинар по программированию на Python. (http://sultan.da.ru)

    Перейдем к теоретически-практической части и начнем с того что из себя представляет интерпретатор.

    Интерпретатор

    Интерпретатор - это такая программа, которая выполняет другие программы. Когда вы пишете программу на языке Python, интерпретатор читает вашу программу и выполняет содержащиеся в ней инструкции. В действительности, интерпретатор - это слой программной логики между вашим программным кодом и аппаратурой вашего компьютера.

    В зависимости от используемой версии Python сам интерпретатор может быть реализован как программа на языке C, как набор классов Java и в каком-либо другом виде, но об этом позже.

    Запуск сценария в консоли

    Давайте запустите в консоле интерпретатор:

    Теперь он ожидает ввода комманд, введите туда следующую инструкцию:

    Print "hello world!"

    ура, наша первая программа! :D

    Запуск сценария из файла

    Создайте файл "test.py", с содержимым:

    # вывести "hello world" print "hello world" # вывести 2 в 10 степени print 2 ** 10

    и выполните этот файл:

    # python /path/to/test.py

    Динамическая компиляция и байт-код

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

    В следующий раз, когда вы запустите свою программу интерпретатор минует этап компиляции и отдаст на выполнение откомпилированный файл с расширением ".pyc". Однако, если вы изменили исходные тексты вашей программы, то снова произойдет этап компиляции в байт-код, так как Python автоматически следит за датой изменения файла с исходным кодом.

    Если Python окажется не в состоянии записать файл с байт-кодом, например из-за отсутствия прав на запись на диск, то программа не пострадает, просто байт-код будет собран в памяти и при завершении программы оттуда удален.

    Виртуальная машина Python (PVM)

    После того как пройдет процесс компиляции, байт-код передается механизму под названием виртуальная машина , которая и выполнит инструкции из байт-кода. Виртуальная машина - это механизм времени выполнения, она всегда присутствует в составе системы Python и это крайняя составляющая системы под названием "Интерпретатор Python".

    Для закрепления пройденного еще раз проясним ситуацию, компиляция в байт-код производится автоматически, а PVM - это всего лишь часть системы Python, которую вы установили вместе с интерпретатором и компилятором. Все происходит прозрачно для программиста, и вам не надо выполнять эти операции вручную.

    Производительность

    Программисты имеющие опыт работы с такими языками как C и C++, могут заметить некоторые отличия в модели выполнения Python. Первое - это отсутствие этапа сборки или вызова утилиты "make", программы на Python могут быть сразу же запущены после написания исходного кода. Второе отличие - байт-код не является двоичным машинным кодом (например инструкции для микропроцессора Intel), он является внутренним представлением программы на языке Python.

    По этим причинам программы на Python не могут выполняться также быстро как на C/C++. Обход инструкций выполняет виртуальная система, а не микропроцессор, и чтобы выполнить байт-код, необходима дополнительная интерпретация, инструкции которой требуют большего времени, чем машинные инструкции микропроцессора.

    Однако, с другой стороны, в отличии от традиционных интерпретаторов, например как в PHP, здесь присутствует дополнительный этап компиляции - интерпретатору не требуется каждый раз анализировать исходный текст программы.

    В итоге, Python по производительности находится между традиционными компилирующими и традиционными интерпретирующими языками программирования.

    Альтернативные реализации Python

    То что было сказано выше о компиляторе и виртуальной машине, характерно для стандартной реализации Python, так называемой CPython (реализации на ANSI C). Однако также существует альтернативные реализации, такие как Jython и IronPython, о которых пойдет сейчас речь.

    Это стандартная и оригинальная реализация Python, названа так, потому что написана на ANSI C. Именно ее мы установили, когда выбрали пакет ActivePython или установили из FreeBSD портов. Поскольку это эталонная реализация, она как правило работает быстрее, устойчивее и лучше , чем альтернативные реализации.

    Jython

    Первоначальное название JPython, основная цель - тесная интеграция с языком программирования Java . Реализация Jython состоит из Java-классов, которые выполняют компиляцию программного кода на языке Python в байт-код Java и затем передают полученный байт-код виртуальной машине Java (JVM) .

    Цель Jython состоит в том, чтобы позволить программам на языке Python управлять Java-приложениями, точно также как CPython может управлять компонентами на языках C/C++. Эта реализация имеет беcшовную интеграцию с Java. Поскольку программный код на Python транслируется в байт-код Java, во время выполнения он ведет себя точно также, как настоящая программа на языке Java. Программы на Jython могут выступать в качестве апплетов и сервлетов, создавать графический интерфейс с использованием механизмов Java и т.д. Более того, Jython обеспечивает поддержку возможности импортировать и использовать Java-классы в программном коде Python.

    Тем не менее, поскольку реализация Jython обеспечивает более низкую скорость выполнения и менее устойчива по сравнению с CPython, она представляет интерес скорее для разработчиков программ на языке Java, которым необходим язык сценариев в качестве интерфейса к Java-коду.

    Реализация предназначена для обеспечения интеграции программ Python с приложениями, созданными для работы в среде Microsoft .NET Framework операционной системы Windows, а также в Mono - открытом эквиваленте для Linux. Платформа.NET и среда выполнения языка C# предназначены для обеспечения взаимодействия между программными объектами - независимо от используемого языка программирования, в духе более ранней модели COM компании Microsoft.

    IronPython позволяет программам на языке Python играть роль как клиентских, так и серверных компонентов, доступных из других языков программирования.NET. Поскольку разработка ведется компанией Microsoft , от IronPython, помимо прочего, можно было бы ожидать существенной оптимизации производительности.

    Средства оптимизации скорости выполнения

    Существуют и другие реализации, включая динамический компилятор Psyco и транслятор Shedskin C++, которые пытаются оптимизировать основную модель выполнения.

    Динамический компилятор Psyco

    Система Psyco - это компонент, расширяющий модель выполнения байт-кода, что позволяет программам выполняться быстрее. Psyco является расширением PVM , которое собирает и использует информацию о типах, чтобы транслировать части байт-кода программы в истинный двоичный машинный код, который выполняется гораздо быстрее. Для такой трансляции не требуется вносить изменения в исходный код или производить дополнительную компиляцию в ходе разработки.

    Во время выполнения программы, Psyco собирает информацию о типах объектов, и затем эта информация используется для генерации высокоэффективного машинного кода, оптимизированного для объектов этого типа. После этого произведенный машинный код заменяет соответствующие участки байт-кода, тем самым увеличивается скорость выполнения.

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

    Psyco обеспечивает увеличение скорости от 2 до 100 раз, но обычно в 4 раза, при использовании немодифицированного интерпретатора Python. Единственный минус у Psyco, это то обстоятельство, что в настоящее время он способен генерировать машинный код только для архитектуры Intel x86 .

    Psyco не идет в стандартной поставке, его надо скачать и установить отдельно. Еще есть проект PyPy , который представляет собой попытку переписать PVM с целью оптимизации кода как в Psyco , проект PyPy собирается поглотить в большей мере проект Psyco .

    Транслятор Shedskin C++

    Shedskin - это система, которая преобразует исходный код на языке Python в исходный код на языке C++, который затем может быть скомпилирован в машинный код. Кроме того, система реализует платформонезависемый подход к выполнению программного кода Python.

    Фиксированные двоичные файлы (frozen binaries)

    Иногда необходимо из своих программ на Python создавать самостоятельные исполняемые файлы. Это необходимо скорее для упаковки и распространения программ.

    Фиксированные двоичные файлы объединяют в единый файл пакета байт-код программ, PVM и файлы поддержки, необходимые программам. В результате получается единственный исполняемый файл, например файл с расширение ".exe" для Windows.

    На сегодняшний день существует три основных инструмента создания "frozen binaries":

    • py2exe - он может создавать автономные программы для Windows, использующие библиотеки Tkinter, PMW, wxPython и PyGTK для создания графического интерфейса, программы использующие программные средства создания игр PyGame, клиентские программы win32com и многие другие;
    • PyInstaller - напоминает py2exe, но также работает в Linux и UNIX и способен производить самоустанавливающиеся исполняемые файлы;
    • freeze - оригинальная версия.

    Вам надо загружать эти инструменты отдельно от Python, они распространяются бесплатно.

    Фиксированные двоичные файлы имеют немалый размер, ибо они содержат в себе PVM, но по современным меркам из все же нельзя назвать необычно большими. Так как интерпретатор Python встроен непосредственно в фиксированные двоичные файлы, его установка не является обязательным требованием для запуска программ на принимающей стороне.

    Резюме

    На сегодня всё, в следующей статье расскажу о стандартных типах данные в Python, ну и в последующих статьях рассмотрим каждый тип в отдельности, а также функции и операторы для работы с этими типами.