Осваиваем Python. Унция ноль. Введение.

    Предыстория



    Присоединяюсь к MaxElc, DarwinTenk и Devgru :) Начинаю цикл статей посвященных Python. Сам я имею некоторый опыт обращения с PHP и Java. Но каждый раз, при относительном освоении какого-то инструмента — оставалось определённое неудовлетворение им, связанное с чем-то конкретным, и поиски продолжались. На сегодняшний день наиболее близко к идеалу в моих глазах стоит Python. Идеал недостижим — это понятно, посему и у Python есть недостатки. Прежде всего — это скорость выполнения, однако, эта проблема решаема несколькими путями и об этом мы обязательно поговорим чуть позднее.
    Сам я начал осваивать Python буквально недавно. Начиная этот цикл статей — я преследую несколько целей. Во-первых, это дополнительная само мотивация + интерактивность, во-вторых, опыт. В-третьих, блуждая по просторам рунета — вижу, что Python куда менее популярен, чем в мире. Ситуацию надо исправлять :)
    В соответствии с идеологией Python, а именно с тем, что одни из главных его козырей — это быстрота в освоении и скорость разработки, мы достаточно быстро, практически тезисно пронесёмся по основам синтаксиса и построения программ и перейдём к основной цели данного цикла — освоение django.
    Итак, мы начинаем.

    Архитектура



    Python — интерпретируемый, скриптовый язык программирования. При первом запуске скрипта, интерпретатор транслирует инструкции языка в байт-код, сохраняя их в файле с расширением .pyc. Далее байт-код запускается на виртуальной машине Python (PVM). При вторичном запуске скрипта, интерпретатор отслеживает были ли внесены изменения в нём. Если нет, то запускается сразу .pyc файл.
    Реализации Python:
    • CPython — стандартная реализация Python
    • Jython — альтернативная реализация Python. Основная цель которой — бесшовная интеграция с платформой Java. Состоит из java-классов, которые транслируют программный код на языке Python в java байт-код, который затем запускается на виртуальной машине Java (JVM).
    • IronPython — реализация Python предназначенная для интеграции с .NET платформой.
    • Shedskin C++ — нетрадиционный подход к выполнению программ на языке Python. Цель — оптимизация скорости выполнения. Преобразует исходный код Python в исходный код C++, который затем может быть скомпилирован в машинный код.
    • PyPy — реализация PVM на самом языке Python + JIT компилятор.


    Варианты запуска программ



    На хабре уже была написана хорошая инструкция для новичков, как быстро организовать рабочую среду для разработки на Python и django. Если вы уже проделали описанную в ней последовательность действий, то это означает, что на вашей машине уже установлен интерпретатор python. В большинстве Linux дистрибутивов он установлен по-умолчанию.

    Вариант 1. Интерактивный режим


    Для попадания в интерактивный режим необходимо ввести в командной строке команду python.

    $ python
    Python 2.5.2 (r252:60911, Oct 5 2008, 19:24:49)
    [GCC 4.3.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> print 'Hello World!'
    Hello World!


    В интерактивном режиме инструкции выполняются построчно. Для того, чтобы выполнить блок кода, можно, к примеру, набрать в пустом текстовом файле следующие две команды:

    str1 = 'Hello World!'
    str2 = " It's my second script"
    print 'import has been done successfully'


    И сохранить их в файле hi.py. Далее в командной строчке используя команду cd перейти в тот каталог, в котором вы сохранили файл и набрать команду python.
    Для импорта инструкций можно использовать инструкцию import <имя файла без расширения .py>. Файлы в языке Python являются модулями, которые внутри себя содержат пространство имён. Импортируя модуль мы получаем доступ к пространству имён верхнего уровня.

    $ python
    Python 2.5.2 (r252:60911, Oct 5 2008, 19:24:49)
    [GCC 4.3.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import hi
    import has been done successfully
    >>> print hi.str1+hi.str2
    Hello World! It's my second script


    Используя в инструкции конструкцию вида: hi.str1, мы обращаемся к имени str1, определённом внутри модуля hi.
    Строки, числа в языке Python — это тоже объекты. Здесь прослеживается наследование парадигмы берущей начало от языка SmallTalk «Всё — объекты». Однако, если мне не изменяет память там речь шла и о том, что операторы — тоже были объектами. В python оператор «+» — это перегруженный оператор для строк выполняющий конкатенацию.
    Для импортирования конкретных имён можно использовать инструкцию from:

    >>> from hi import str1
    >>> print str1
    Hello World!


    После чего мы сможем обращаться к импортируемому имени непосредственно.
    После внесения каких-то изменений в файл, для того чтобы изменения вступили в силу — необходимо перезагрузить модуль с помощью функции reload().

    >>> reload(hi)
    <module 'hi' from 'hi.pyc'>


    Для получения списка всех доступных имён модуля можно использовать функцию dir():

    >>> dir(hi)
    ['__builtins__', '__doc__', '__file__', '__name__', 'str1', 'str2']


    Вариант 2. Запуск из командной строки.


    Запустить сценарий из командной строки можно следующим образом:

    $ python hi.py

    Так же сценарию можно передавать параметры командной строки. Доступ к ним из сценария можно получить, импортировав встроенный модуль sys. Изменим файл hi.py следующим образом:

    import sys
    print sys.argv


    После чего вызовем его из команжной строки, передав несколько произвольных параметров:

    $ python hi.py 1 2 3 'param-pam-pam'
    ['hi.py', '1', '2', '3', 'param-pam-pam']


    В результате получим список, содержащий в себе переданные параметры. Список — это тоже конструкция языка Python. О списках речь пойдёт в следующих статьях.
    Потоки ввода и вывода сценария можно перенаправлять с помощью средств командной оболочки, например так:

    $ python hi.py 1 2 3 'param-pam-pam' > text.txt

    Вариант 3. IDE.


    Интерактивный режим удобен в некоторых случаях, например, когда нужно поэкспериментировать с какой-то определённой инструкцией. Однако, постоянно работать в нём неудобно т.к. Нужно постоянно вспоминать про перезагрузку модулей.
    Поэтому гораздо удобнее воспользоваться описанной выше процедурой настройки IDE и запускать программы из неё. Так же при разработке программ на Python вполне приемлем вариант написания кода в блокноте с подсветкой синтаксиса и запуском программы из консоли.

    На сегодня всё. В следующих статьях мы перейдём непосредственно к изучению конструкций языка. Не сомневаюсь, отклики будут и я буду на них ориентироваться.
    Спасибо за внимание!
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 86
      +6
      В целом хорошая статья, спасибо. Только начинаю учить Python, поэтому пока большего сказать не могу.

      P.S. Вот только однотипные названия a la «капля первая», «первая чашка», «унция ноль», «ведро первое» etc. начинают резать глаз… сугубо IMHO.
        +5
        Такими темпами скоро закончатся емкостные единицы измерения. :)

        А вообще мне эта тенденция на Хабре очень нравится. Только вот глаза разбегаются — что бы такое начать учить. :)

        И в связи с обилием подобных статей, лучше бы их было все же в раздел «Стартап „Программист“» постить, ИМХО. А то главная скоро будет только такими статьями завалена.
          0
          Питон, хорошо хоть не в мышах статьи решили измерять :)
            +7
            Надо было мерять в попугаях %)
              0
              эмм, тогда уж в кубических попугаях =)
                0
                Не, в сферических. В ваккууме. ;)
              0
              В попугаях :)
                0
                Изучаем клавиатуру. Кнопка «0».
              +1
              есть волщебный софтвер — ipython — представляет собой более интерактивный шел
                +3
                Спасибо, начну изучать Python с вами. :)
                  +13
                  Вы бы не брали дурной пример и называли темы нормально: Часть 1, часть 2 — так понятнее.
                  • НЛО прилетело и опубликовало эту надпись здесь
                    +8
                    Вместо унций назвали бы например «Попугай первый», как в мультике:). Правда там удав был, но тоже змейка:)
                    • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        Или в позвонках =)
                          0
                          В позвонках как то жестоко получается:)
                          +1
                          квант python'а :)
                          +6
                          Несмотря на то, что начинание хорошее, «лемминговость» таких циклов вызывает неприязнь.
                          • НЛО прилетело и опубликовало эту надпись здесь
                              0
                              Может, Лисп или Форт? Еще можно Erlang или Haskell.
                                +1
                                Для леммингов по хаскеллу придется дробить уже не на капли, а на молекулы:)
                                  +1
                                  разложим Lisp на атомы =)
                                    0
                                    А ассемблер тогда в чем измеряться будет?
                                      0
                                      В нуклонах, наверное. А машинный код — в кварках.
                                        +3
                                        В бозонах :)
                                        0
                                        Лисп удобнее всего мерять в скобках. Только их много понадобится
                                          +1
                                          между скобками-то атомы (http://en.wikipedia.org/wiki/Lisp_programming_language#Atoms) находятся, как не крути =)
                                        +9
                                        Erlang, клизьма первая :))
                                        0
                                        Про Erlang с огромным удовольствием бы почитал. Сам потихоньку пробую, лишний материал не помешал бы.
                                          0
                                          Я бы присоединился к всем этим каплям с Erlang-ом, но 1 — пока не хватит времени, 2 — не хочу присоединяться к леммингам прямо сейчас. Попозже. Ну, еще нехватка кармы — но это мелочи.
                                      +1
                                      Мне нравится эта тенденция на хабре :)
                                      Про питон почитаю.
                                        +17
                                        У вас флешмоб чтоли? Я за одно воскресенье начать учить C#, Java, Prolog, Python и Ruby не смогу =(
                                          +5
                                          До этого на хабре было много статей по тайм-менеджементу :)
                                            +4
                                            И про то как спать по 4 часа в сутки)
                                            +3
                                            Лучше начинайте учить SmallTalk, например, и пишите об этом свой цикл.
                                              0
                                              У меня вот была мысль описать Dolphin Smalltalk. Для начинающих в самый раз. Хоть я и не такой уж крутой смоллтокер %)
                                                0
                                                Пишите, почему нет. Про Smalltalk я бы почитал с интересом. Но лучше — попозже, когда волна ведер-унций-попугаев схлынет, впечатление будет приятнее.
                                              0
                                              Где я Prolog пропустил? :)
                                            0
                                            Перенесите пожалуйста в Стартап Программист, там легче отслеживать все капли ведра и т.д., все таки начать изучать столько языков программирования за одно воскресенье очень сложно и придеться некоторые откладывать на потом.
                                            Очень прошу.
                                              +1
                                              Спасибо, что начали. А то я уже начал бояться, что про питон никто не начнет.
                                                0
                                                Давно уже хотел изучить Python, даже начинал, но потом забросил.
                                                Есть повод вернуться к изучению, спасибо!
                                                  0
                                                  А ещё можно считать «байт 0, байт 1», «бит 0, бит 1», или, как в tcp — номер последнего написанного символа.
                                                    0
                                                    Cпасибо. Буду тоже приручать питона. Жду продолжения.
                                                      0
                                                      В Smalltalk + — это просто вызов метода с именем «+». А вот if и т. д. действительно были объектами.
                                                        0
                                                        Ну дык метод это тоже объект :)
                                                        +3
                                                        Очень хорошо, языки выучим, а программировать не научимся :) Может еще создать топик «Алгоритмы»?
                                                          0
                                                          Кто-то уже занял программирование и алгоритмизацию. с примерами на бейсике и дельфи :)
                                                            –3
                                                            не надо ля-ля, главное синтаксис и кое какие принципы выучить, и если есть понятие о программировании, хотя бы на одном языке, другие легко учатся, тем более узнаешь много нового что можно применить в другом языке, и выбирать начинаешь какой больше подойдет для конкретной задачи, а нет тот что _я знаю_,… да и никто не скрывает что лучшая практика и теория получается при работе.
                                                              +3
                                                              Ага, и в итоге знать 38 языков но не уметь программировать:)
                                                            +1
                                                            Мужик, спасибо, только не переставай писать унции, ждал кто же напишет про питон :)
                                                              +2
                                                              где-то встречал такую фразу: хочешь изучить чтото — напиши об этом книгу
                                                              похоже пошла мода претворять этот принцип в действие :)
                                                                0
                                                                Кстати действительно полезно, помогает привести мысли в порядок и укрепить изученный материал. Можно даже просто в закрытом блоге писать для себя)
                                                                +1
                                                                Мне кажется, что в разделе «Архитектура» надо было хотя бы вскользь упамянуть о том, что питон имеет LL(1) парсер (вернее, грамматика питон всё же чуть сложнее, чем LL(1), но не значительно). Это позволяет сделать время компилляции практически пропорциональным длине программы. У большинства языков это не так. И это очень большой плюс питона и свидетельство его изачально отличного дизайна.
                                                                wiki.python.org/moin/LanguageParsing
                                                                  0
                                                                  Может кто нибудь и про Stackless напишет, и про Python + Vim…
                                                                    0
                                                                    stackless тоже крайне интересует, но сомневаюсь, что что-либо появится.
                                                                    потом буду обязательно изучать, и, если не опередят, напишу.
                                                                    –2
                                                                    Не хватает кармы всех благодарить… *crazy*
                                                                      +1
                                                                      А уже кто-то пытался учить людей питону, здесь на хабре но после 5 урока перестал :( Может продолжите?
                                                                        +3
                                                                        я начинал. и перестал, так как особо и времени не было и фидбек попер негативный. но может по свободе продолжу. если единицу измерения придумаю.
                                                                          0
                                                                          пишите тоже в унициях, а то читателям сложнее будет мержить знания ;)
                                                                            0
                                                                            у меня тогда нестыковка с автором этого топика будет :)
                                                                              0
                                                                              Ну от чего же. На пару вы быстрей накормите народ фунтами знаний)
                                                                                +1
                                                                                да, списался с автором топика, надеюсь так и будет.
                                                                                в 4 руки — оно круче получится :-)
                                                                            0
                                                                            Да, а давольно интересные статьи были!
                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                              0
                                                                              Все верно пишите. Можно добавить, что компиляцию можно форсировать.
                                                                              +1
                                                                              habrahabr.ru/blogs/python/29778/#habracut
                                                                              на всякий случай — просамопиарюсь. так как суть та же.
                                                                                0
                                                                                Я вот про IDE не понял :) Раздел третий о том, что такое IDE?
                                                                                Ну или пару примеров полезнее были бы, например, PyScripter или Wing IDE… К тому же в обеих очень даже можно поэкспериментировать стоя на брекпойнте в полноценном таком интерактивном режиме. Объекты созданные в программе доступны, можно их порассматривать, поменять, методы повызывать — сказка.
                                                                                  0
                                                                                  ???
                                                                                  производительность — сильная сторона Python, он намного быстрее Java и PHP
                                                                                  > у Python есть недостатки. Прежде всего — это скорость выполнения
                                                                                    0
                                                                                    Python не быстрее Java по ряду объективных причин, но быстрее PHP.

                                                                                    Возможно там изначально Javascript имелся ввиду?
                                                                                    +5
                                                                                    На мой взгляд не совсем правильно начинать рассказ о Питоне с модулей.
                                                                                    Этак очень долго не будет понятно, что же в нём такого хорошего :)

                                                                                    Перво-наперво следует рассказать о том, какие есть структуры данных в распоряжении питонистов.
                                                                                    string: " ", u" ", r" "
                                                                                    tuple: ( )
                                                                                    list: [ ]
                                                                                    dict: { }

                                                                                    Потом не забыть, что функция — это тоже вполне себе объект, и нормально его присваивать туда-сюда, как переменную.

                                                                                    Затем рассказть про def и lambda, и обязательно про итераторы и генераторы.
                                                                                    Чем отличается конструкция [ x for i in… if… ] от ( x for i in… if… )
                                                                                    и почему второй вариант может оказаться очень эффективным во многих алгоритмах.

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

                                                                                    После такого ознакомления с, непосредственно, языком (добавив еще try: except: else: )
                                                                                    можно переходить к battaries included — т.е. к штатной библиотеке Питона.
                                                                                      0
                                                                                      Это очень правильно, что в blogs/starting_programming это написано. А не в blogs/python, как мне по rss пришло. В blogs/python то, полагаю, люди давно уже стартовавшие.
                                                                                        +1
                                                                                        Унции про джангу бы еще :). А то порой и подсмотреть некуда.
                                                                                          0
                                                                                          А djangobook вам не достаточно?
                                                                                            0
                                                                                            Джангобук приятно, но, порой, его не хватает.
                                                                                          0
                                                                                          Ждемс 2 унцию!…
                                                                                            0
                                                                                            Хорошая тенденция. Вот только нашелся бы человек, который провел сравнительный анализ всех языков. Я конечно понимаю, что для многих этот призыв звучит как призыв к религиозной войне, но… глаза разбегаются хочется ну хоть какой-то ясности.

                                                                                            Сам занимаюсь разработкой клиентской части, но очень хочу хотя бы на примитивном уровне освоить серверную часть.

                                                                                            Помогите! Должен же среди нас быть гуру, который проведет беспристрастный анализ в чиселках и выдаст показатели производительности, скорости разработки и легкости реализации стандартных алгоритмов, расскажет о том, насколько просто/сложно выполняются стандартные операции (подключение к базе, выборки, передача данных [JSON, XML], вывод).

                                                                                            Смешаем капельки, ведра, чашечки и унции в сравнительный анализ?!
                                                                                              0
                                                                                              Сферы применения языков программирования настолько обширны (и не всегда совместыми), что не представляется возможным выделить критерии оценивания. Так что, боюсь, обширный и в то же время объективный анализ «в чиселках» никто не осилит.
                                                                                                0
                                                                                                Я имел ввиду не вообще всех языков.
                                                                                                Ruby, Java (servlet, portlet), Python, C# (PHP, Perl).

                                                                                                Я понимаю, что те же JAVA, C# (да и наверное любой другой язык) имеют куда более широкое применение нежели web, но было бы интересно почитать мнение эксперта (опытного программиста) относительно возможностей этих языков для web.
                                                                                                  0
                                                                                                  Лично я почему-то воспринимаю Java, C#, Python не как языки написания web-приложений. И если «легкость реализации стандартных алгоритмов» я могу понять, то подключение к БД, работу с XML и т.д. «стандартными операциями» у меня язык не поворачивается назвать. Наверное, это потому что я учусь на системного программиста.

                                                                                                  Так что даже для приведенного Вами списка языков будет довольно трудно (но не невозможно) провести беспристрастный анализ. У каждого языка свои фичи, поэтому под каждую задачу свой язык.
                                                                                              0
                                                                                              Эх, только вот судя по скорости выхода «капель» — про руби цикл был готов сразу.
                                                                                              Но ничего — буду ждать:)
                                                                                                0
                                                                                                Может просто дело в наличии большего количества свободного времени у автора капель?
                                                                                                0
                                                                                                надеюсь, в вашем курсе будет практика на python.
                                                                                                здесь на хабре есть отличные задачи для начинающих на Java.
                                                                                                думаю и для python они сгодятся: habrahabr.ru/blogs/java/44031/
                                                                                                  0
                                                                                                  только reload, имхо стоит рассматривать вместе с импортом (когда рассматривать импорт более подробно, а то можно получить очень интересное поведение), и указать что так можно релоадить только модуль.

                                                                                                  да и вообще все не так просто с перезагрузкой модулей.

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

                                                                                                    Самое читаемое