Пользователь
0,0
рейтинг
27 августа 2012 в 15:18

Разработка → Учим Python качественно из песочницы

Здравствуйте всем!

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

Удобочитаемый синтаксис, прост в обучении, высокоуровневый язык, Объектно-Ориентированый язык программирования (ООП), мощный, интерактивный режим, масса библиотек. Множество иных плюсов… И это всё в одном языке.
Для начала окунёмся в возможности и узнаем, что же умеет Python?

А зачем мне твой Python?


Много начинающих программистов задают подобные вопросы. Это как с покупкой телефона, скажите, почему я должен купить этот телефон, а не этот?

Качество программного обеспечения

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

Библиотеки поддержки

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

Переносимость программ

Большая часть программ на языке Python выполняется без изменений на всех основных платформах. Перенос программного кода из Linux в Windows заключается в простом копировании файлов программ с одной машины на другую. Также Python предоставляет Вам массу возможностей по созданию переносимых графических интерфейсов .

Скорость разработки

По сравнению с компилирующим, или строго типизированными языками, такими как С, С++ или Java, Python во много раз повышает производительность труда разработчика. Объем программного кода на языке Python обычно составляет треть, или даже пятую часть эквивалентного программного кода на языке С++ или Java, что означает меньший объем ввода с клавиатуры, меньшее количество времени на откладку и меньший объем трудозатрат на сопровождение. Кроме того, программы на языке Python запускаются сразу же, минуя длительные этапы компиляции и связывания, необходимые в некоторых других языках программирования, что еще больше увеличивает производительность труда программиста.

Где используется Python?


  • Компания Google использует Python в своей поисковой системе и оплачивает труд создателя Python — Гвидо ван Россума
  • Такие компании, как Intel, Cisco, Hewlett-Packard, Seagate, Qualcomm и IBM, используют Python для тестирования аппаратного обеспечения
  • Служба коллективного использования видеоматериалов YouTube в значительной степени реализована на Python
  • NSA использует Python для шифрования и анализа разведданных
  • Компании JPMorgan Chase, UBS, Getco и Citadel применяют Python для прогнозирования финансового рынка
  • Популярная программа BitTorrent для обмена файлами в пиринговых сетях написана на языке Python
  • Популярный веб-фреймворк App Engine от компании Google использует Python в качестве прикладного языка программирования
  • NASA, Los Alamos, JPL и Fermilab используют Python для научных вычислений.

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

Python является языком сценариев.

Литература


Вот мы и познакомились поближе с языком программирования Python. Можно сказать отдельно, что плюсы Python состоят еще в том, что у него есть масса качественной литературы. Не каждый язык этим может похвастаться. К примеру язык программирования JavaScript не может порадовать пользователей множеством литературы, хотя язык действительно неплохой.

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

Настоятельно рекомендую прочитать первым делом книгу — Марк Лутц. Изучаем Python, 4-е издание. Книга переведена на русский язык, так что бояться не стоит, если Вы вдруг не знаете английский. Но именно четвёртое издание.

Для тех, кто знает английский, можно прочитать документацию на официальном сайте Python. Там всё довольно понятно описано.

Неплохой ресурс — Основы программирования на Python. Учебник. Вводный курс
Одна из моих недавно прочитанных книг — Язык программирования Python. Объясняется всё довольно доступно и на русском.

Хорошая книга, тоже всё доступно и на русском — Python. Подробный справочник, 4-е издание.

А если же Вы более принимаете информацию по видео, то могу посоветовать уроки от компании Google, которые ведёт Ник Парланте — ученик из Стэнфорда. Шесть видеолекций на YouTube . Но в бочке мёда тут есть капля дёгтя… Ведёт он на английском языке с английскими субтитрами. Но надеюсь, что остановит это немногих.

Что делать, если я прочитал книги, но не знаю как применять знания?


Без паники!
Советую почитать книгу Марк Лутц. Программирование на Python (4-е издание). Ранее было «изучаем», а тут «Программирование». В «Изучаем» — Вы получаете знания Python, в «Программирование» — Марк Вас учит как их применять в Ваши будущие программы. Книга очень полезная. И думаю одной её Вам хватит.

Хочу практики!


Легко.
Выше я писал о видеолекциях от Ника Парланте на YouTube, но у них есть также некие задачки на сайте. Интересные задачки, советую каждому. На английском.

Недавно школа программирования Codecademy открыла интерактивные Python-курсы. После прохождения каждого мини-курса, Вам будет позволено пройти некую «практику». Уроки ведутся на английском, но всё доступно и понятно. Начинается с переменных и типов данных.

И на окончание — хорошие закрепляющие и начинающие курсы. Learn Python The Hard Way.

Ну вот и всё!


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

Дерзайте! Всем удачи.
@driverx18
карма
4,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

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

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

  • +2
    Читаемый синтаксис!=качество ПО.
    «Перенос программного кода из Linux в Windows заключается в простом копировании файлов программ с одной машины на другую.» — если программа написано ГРАМОТНО :-)

    А вот из минусов — нет проверки кода перед исполнением. То есть если я напишу
    str='param'
    if (i==0):
    str=strr+'bad'

    ошибку я буду получать только при выполнении условия. C/C++ подобные ошибки обнаружат в легкую. Аналогично про сложение строк и чисел и т.д.
    • +10
      Компилируемый язык != интерпретируемый язык.
      • +1
        Я это прекрасно понимаю. Но проблема с проверкой типов и имен переменных все равно остается :-/
        • +10
          Видимо плохо понимаете. Исходник перед передачего его интерпретатору, только синтаксическим анализатором прогоняется, по большому счету. Синтаксис верен? -Okay, let's do it! Вы же, похоже, хотите предварительную компиляцию? Интерпретируемого языка? Что, серьезно? Я могу подобную же ахинею сказать: пока C/C++ канпелятор канпелирует программу, мой питон уже работает! Считаю это проблемой! Следует более ясно понимать, суть и назначение языка.
        • +4
          Отсутствие проверки типов и имён переменных — это не проблема, это фишка динамически типизированных языков. Компилируемый он или интерпретируемый особого значения не имеет, особенно в наше время, когда интерпретируемые вроде языки используют предварительную компиляцию в байт-код, а во вроде бы компилируемых интерпретируется результат компиляции (тот же по сути байт-код) виртуальной машиной.
    • +4
      Можно использовать pylint/pyflakes. pylint, если мне не изменяет память как раз «выполняет» код, чтобы его проверить. И этот минус, внезапно, не такой уж и минус ;)
      • +6
        Вот, например, вывод pylint:

        W:  1,0: Redefining built-in 'str'
        C:  1,0: Missing docstring
        C:  1,0: Invalid name "str" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
        E:  2,4: Undefined variable 'i'
        C:  3,4: Invalid name "str" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
        E:  3,10: Undefined variable 'strr'
        


        Я прекрасно понимаю, что static code analysis не панацея, но мне иногда кажется, что если я буду исправлять всё, что мне советует исправить pylint, то у подобных ошибок просто нет шанса выжить :)
        • +3
          а мне иногда кажется, что если исправлять всё, что советует pylint, то надо писать на бейсике
          info.update(**hdr) # warning pylint/W0142:Used * or ** magic
          
          contents = filter(lambda x: not x.deleted, self.contents) # warning pylint/W0141:Used builtin function 'filter'
          
          def foo(count): # info pylint/C0102:Black listed name "foo"
          

          • 0
            Не замечал таких сообщений об ошибках, но запрещать *, ** и встроенные функции — это паранойя.
            • 0
              ну, чисто по-lintовски его понять можно.
              это места вероятных ошибок новичков, о чём вполне резонно предупредить.
              надо только поотключатьнекторые предупреждения.
            • 0
              Думаю filter легко заменяется на:
              contents = [x for x in self.contents if not x.deleted]
              В большинстве случаев это наглядней чем лямбда. А код с передачей параметров через * и ** иногда бывает весьма неочевиден и не всегда необходим (единственное что приходит в голову — форвард параметров в другую функцию, например, метод суперкласса).
              • 0
                К слову, built-in функции не запрещаются, только некоторые, вроде map, filter. Да и то это warning, а не error :)
    • 0
      Никто не мешает проверять код с помощью, например, PyChecker. Жаль такая возможность не встроена в интерпретатор.
      • 0
        Да ну, не нужна она там :) Поставить virtualenv с нужными инструментами — 5 минут. Даже pep8.py, который рекомендуется в PEP8 не включен в стандартную поставку.
        • +1
          Ну почему же не нужна? Я думаю многие бы пользовались. По-моему легче написать, например, python -check ./prog.py чем ставить сторонние приблуды.
          • 0
            Я к Emacs подключил pep8 pylint и pyflakes через flymake. Работает отлично прям по ходу редактирования файла.
    • +7
      str(7)
      

      '7'

      str='param'
      str(7)
      

      TypeError: 'str' object is not callable

      вы зачем билд-ины переопределяете?
      ^__^
    • +2
      «Перенос программного кода из Linux в Windows заключается в простом копировании файлов программ с одной машины на другую.» — если программа написано ГРАМОТНО :-)


      Если программа написана переносимо. Это не эквивалентно )
    • 0
      почитав Макконнелла думаю:
      (Читаемый синтаксис) ∈ (качество ПО)

      но в Питоне также можно наделать генераторов, цепочки вызовов и так далее, потому что он слабо ограничивает программиста и там уже все может получиться сложнее чем должно бы быть
  • +10
    Спасибо за статью. Но мне кажется, что давать ссылки на книги на rutracker при том, что их можно совершенно свободно приобрести — это не хорошо (и, наверное, противоречит правилам)
    • +2
      А при отсутствии возможности/желания покупать — найти хитрый способ завладеть ими сможет даже школьник.
      • 0
        Хотел купить Лутца, пока цену не увидел. 3 тысячи за два тома я думаю желание покупать не у многих появляется.
        • 0
          Книги и правда не дешевые. Мне повезло, я успел купить, когда они только вышли, по акции вроде за 1500 за оба тома «программирования».
    • +2
      Спасибо и Вам! Заменил ссылки
  • +1
    Спасибо за ссылки, некоторые еще не встречал. Сам учил язык именно по книгам Лутца. Но, к сожалению, редко получается его использовать в жизни.

    P.S. По-моему python.ru умер давно.
    P.S.S Вот еще полезная ссылочка. Думаю, понадобится многим.
  • +19
    Заголовок решительно не соответствует содержанию.
    Решил поделиться методом обучения

    И где метод? Я вижу лишь не очень упорядоченный набор ссылок, который ничуть не лучше, чем список литературы на на статье про Python в Википедии.
  • 0
    Я думаю, что неплохо было бы рассказать, что у Лутца книги по разным версиям. Последнее издание по 3ей версии, предпоследнее по 2.6 с оглядкой на третью версию (если память не изменяет). В целом книги интересные, я с ним в общем-то и начал. Но в зависимости от специализации (если она выбрана), в моем случае это веб, лучше брать предпоследнее издание (на данный момент).
    Но самая большая проблема на самом деле, во всех курсах и методиках обучения по ИТ, и я считаю это самым огромным провалом и упущением всех курсов, это отсутствие нормальных курсах по фундаментальным знаниям в ИТ. В школе дают мало, в ВУЗе уже сразу более узкую специализацию. Скажу честно, если бы не мой опыт системного администратора, Лутц был бы для меня тяжел. Помимо того, что он дает просто очень много информации в одной книге, неподготовленному человеку она кажется еще и непонятной с точки зрения основ.
    Я как-то задался этим вопросом, хотел дать своей супруге как раз такой курс по фундаменту, для более быстрого вхождения. Оказалось, что таких курсов и книг не оказалось (либо я просто не нашел, хоть и искал долго и много), в итоге сделал подборку из ссылок, и предложить прочесть в определенном порядке.
    Если есть примеры удачных курсов или книг, буду благодарен.
    • 0
      В 4-м издании упор сделан на 3 версию, но про вторую он не забыл.
  • +2
    Я бы добавил в качестве примеров проектов, которые широко его используют instagr.am, dropbox, quora, pinterest, disqus, новый digg, reddit, впрочем, продолжать этот список можно долго.
    • +1
      И не только используют, а активно выкладывают свои наработки под open source.
      • 0
        Да-да, для обучения очень полезно походить в отладчике по сложному коду, поглядеть на код из реальной жизни. Опять же, попробовать расширить какую-то функциональность гораздо интереснее, чем писать скучный хелло-ворлд с нуля.
    • +1
      EVE online, если сведения не устарели :)
      • +1
        Не то, что не устарели, но недавно был даже лик исходников, который изрядно порадовал любителей stackless, но stackless мне показался слишком экзотической темой для того, чтобы упоминать проекты на нем.
        • 0
          Это детали, по-моему :)
    • +2
      Яндекс. Расписания например на Django.
  • 0
    Python challenge очень интересный сайт для практики, интересные задачи, которые мотивируют на их решение.
  • +2
    Язык выучить относительно просто по сравнению со всеми эти многочисленными фреймворками и библиотеками, требующимися в работе. Тысячи их, а времени так мало…
    • +2
      а вы сравните с изучением фрейморков и стандартной библиотеки пхп
  • 0
    > Python содержит самые современные механизмы многократного использования программного кода, каким является ООП.

    С одной стороны это да, но в то же время насколько я помню инкапсуляция страдает — нет ограничителей области видимости public/private. А еще меня удивляет необходимость в каждом методе объявлять первый аргумент self — зачем?
    • +6
      А еще меня удивляет необходимость в каждом методе объявлять первый аргумент self — зачем?

      Явное лучше неявного :)
      • –1
        что чрезмерно — то не на пользу. Во всём нужна умеренность и в данном случае она не соблюдается, на мой взгляд.
    • +1
      Если название метода начинается с двух подчеркиваний (например, __doSomethig(self)), то он будет приватным.
      • +2
        нет, в Питоне нет приватных методов и свойств из коробки(можно попробовать переписать метод __getattr или __call). __ защищает от возможности переопределения методов.
    • +6
      «Java programmers around the globe are in a panic today over a Wikileaks press release issued at 8:15am GMT. Wikileaks announced that they will re-release the source code for thousands of Open Source Java projects, making all access modifiers 'public' and all classes and members non-'final»
    • 0
      а вы объявляйте this :)
  • +1
    ни о чем… половину инфы можно найти в начале любой книги по Питону (особенно маркетинговый shit про NASA)… это как джава-маркетологи в свое время любили писать про свои виртуальные машины в чайниках, двд-плеерах и тп. сколько уже можно…
  • 0
    Мне очень понравился курс Udacity Design of Computer Programs. Целенаправленно учить Пайтон желания не возникало, но тут он легко выучился сам собой. Кроме того Норвиг пишет очень красивый код.
  • +1
    Сколько раз, интересно, надо повторить, что ООП предназначено не для облегчения повторного использования кода, а для управления сложности?
    • 0
      («сложностью», конечно)
    • +1
      … а для управления сложностью, в том числе путём облегчения повторного использования кода :)
  • 0
    Пишу на python с 2007 года. Начинаю уже уставать понемногу от его супер-пупер гибкости. Подумываю что-нить более строгое изучить типа java.
    • +2
      Use C, Luke.
      Будешь потом либы к питону катать. Чтобы супер-пупер гибкость питона стала ещё более гибкой :3
      • 0
        Чисто формально у python более строгая типизация чем у C.
    • 0
      Гриш, я тут в сторону Scala посматриваю. Говорят очень ок.
      • 0
        Хороший выбор. Scala легко встраивается в любой Java проект. Так же она менее многословна, в отличии от Java.
    • 0
      Если вдруг получится — обязательно напишите статью!
      особенно интересно, как вы справитесь с привычками функционального программирования.
      функциональные замыкания, передача функций параметрами, декораторы, filter, map, list/dict comprehension, вот это всё.
      • 0
        Ну в той же java, насколько я знаю, это всё есть.

        Декораторы я не очень люблю, на мой взгляд они запутывают код (в виде @записи). Т.е. вместо явного вызова функции-декоратора, мы с помощью магического записи @ объявляем, что она должна будет вызвна в определённый момент.

        Замыкания редко использую, можно сказать, они мне не нужны.

        > list/dict comprehension
        Ну это вообще синтаксический сахар (как и декораторы в @ запиcи)
        • +2
          Мне не нравится такое поведение из коробки:

          >>> 0.5 > True
          False
          >>> 2 > True
          True
          >>> 'foo' > 2
          True
          >>> 'foo' > 2000
          True

          Т.е. вместо ошибки я получаю какие-то загадочные ответы :) Ну True/False я, кажется, знаю почему так ведут себя т.к. они как-то из int типа сделаны и соотвествуют 1 и 0 числовым значения. Но это не отменяет того факта, что я бы просто Exception хотел видеть в этом месте.
          • 0
            в третьей версии так и есть для строк:
            >>> 'fff' > 2
            Traceback (most recent call last):
            File "<pyshell#6>", line 1, in 'fff' > 2
            TypeError: unorderable types: str() > int()

            а вообще это обычное приведение типов, не в этом ничего страшного
            • 0
              От того, что вы назвали это приведением типов, такое поведение нравиться мне не перестало :)

              > 'foo' + 1
              «foo1»

              Обычное приведение типов в javascript :) Хорошо хоть такое в python не работает.

              Вот ещё про обычное приведение типов :) www.destroyallsoftware.com/talks/wat
              • 0
                Пардон, я там в отрицаниях запутался, вот правильный вариант:
                От того, что вы назвали это приведением типов, такое поведение не стало мне нравиться :)
        • 0
          В жаве нету ни фунаргов, ни замыканий, ни continuatons, ни темболее yield.
          • +1
            Ясно, разговора к сожалению не получится, т.к. я не знаю java :)
            А концепция yield мне нравится, да.
  • +4
    По сравнению с компилирующим, или строго типизированными языками, такими как С, С++ или Java, Python во много раз повышает производительность труда разработчика.


    Странное противопоставление. Вообще-то, Python динамический строго типизированный язык с, так называемой, утиной типизацией. Вы путаете статическую/динамическую типизацию со строгой/слабой.
  • 0
    По данному Вами адресу «Описание охватывает наиболее распространенные версии Python: от 1.5.2 до 2.0.» Вам не кажется, что это несколько старовато?
  • 0
    В Udacity обучают программированию с нуля использую Python.

    Курс Intro to Computer Science (CS101).
    После решения задачек самостоятельно, лектор объясняет как их решать.

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

    Очень интересно так учится.

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

    Вот галерея лучших проектов, сделанных по окончанию курса.
    • 0
      Парсер Хабра скушал ссылки.
      Никак не получается вставить их. Странно.
      • 0
        Рейтинг, дружище, рейтинг. Он бы и разметку так же точно скушал, вместе со ссылками :}
        Немножко позабавило вот что:
        >Например, что первый в истории компилятор написала женщина, которая кроме всего прочего была контр-адмиралом военно-морских сил США.
        Нам это в 9ом классе говорили, на информатике :} Хотя, у всех разные преподаватели, я это понимаю, да.
        • 0
          Курс ведь предназначен для людей, которые первый раз в жизни услышали понятие «язык программирования», не то что «компилятор». :)

          Спасибо, что просветили про связь рейтинг — ссылки.
  • 0
    Сайт python.ru уже давно не шевелится. Владелец домена ничего не делает и видимо не продает или пытается продать очень дорого, мог хотя бы список литературы там обновлять.
    Некрасиво как-то.
  • +1
    А вот скажите мне пожалуйста, как незнающему — как программы с python потом устанавливать на другие компьютеры? Это каждый раз необходимо будет заставлять пользователя устанавливать интерпретатор?!
    Если в большинстве *nix систем Python уже идёт из коробки, то как дела с Windows? Про py2exe я слышал, но отзывы не очень хорошие.
    Вот BitTorrent. Написан (если верить ТС) на Pytho, но при установке не требует устанавливать интерпретатор. Он устанавливает его самостоятельно?
    Разъясните пожалуйста, кто знает.
    • 0
      Под винды есть ActivePython, и IronPython (под .net).
      Гуглится с первого раза, всё с кнопочками 'free download', 47Mb и 15Mb.
      Ставится в два клика.

      А вот что делать с зависимостями, pip-пакетами и вообще, в каком виде пакеты под винды отдавать и как эти яйца выглядят с того боку — вот это вопрос!
    • 0
      Многие игрушки используют питон в качестве языка сценариев. Интерпретатор ставить не просят. Видимо там всё не так сложно, как страшно :-)
  • 0
    Ещё есть bbfreeze и cx-freeze. (доступны в activepython pypm)

    bbfreeze кривое, забывает поставить зависимость, и результат заработал.

    cx-freeze вроде заработало, но у меня в пакете был ini-файл, который парсился как os.join(os.path.direname(__file__), «myfile.ini»)
    cx с эитм не справился
  • 0
    «Марк Лутц. Изучаем Python, 4-е издание»
    не самая лучшая книга по программированию — слишком много повторов и воды, но лучше книги я не нашел

    Сейчас идет переход с 2 на 3 версию питона и приходится запоминать много нюансов в обоих

    В любом случае Питон захватывает и это окупает любые трудности на его изучение
  • +1
    Увы Программирование на Python (4-е издание) охватывает только 3 версию Python, и его стандартную библиотеку. Всё бы ничего, но я пользуюсь 2-ой, и переходить на 3-ю пока для себя не вижу никакого практического смысла. Большинство дистрибутивов идет с 2 по умолчанию, как и большинство библиотек, не говоря о том что многое до сих пор под 3 недоступно. В итоге книгу читать во многом бессмысленно, а предыдущие издания на русском не нашел. Это грустно, т.к. Изучаем Python прочел, и хотелось бы почитать практический материал.
  • +1
    Немножко дополню: книжка «язык программирования python» — это перевод tutorial'а с python.org. Притом достаточно старого издания (хотя не знаю, много ли там изменилось). Кстати, в английской версии прочёл взахлёб, а в русской перед этим не осилил. Если Откидач для вас тяжеловат — стоит попробовать оригинал.
    Лучшей книгой по ознакомлению с синтаксисом и тезисным введением «в двух словах» считаю Rapid GUI Programming with Python and Qt. В первых трёх главах даётся хорошее введение в язык.
    Для чего-то интересного советую Dive into Python Пилгрима. Отличная книжка, построенная на примерах. Есть на русском (Вглубь языка Python).
  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Недавно начавшийся курс «Learn to Program» на Coursera
  • 0
    Подскажите какого-нибудь практика в Москве, у кого можно поучиться программировать на практике на питоне?
  • 0
    https://www.lektorium.tv/course/22895

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