Разное

Python почему: Где используется язык программирования Python

Содержание

16 фактов о программировании на Python

Python занял первое место в списке лучших языков программирования по версии IEEE Spectrum за 2019 год. Сегодня мы рассмотрим некоторые интересные факты о программировании на Python, чтобы лучше понять, что делает его таким популярным. Почти каждая отрасль бизнеса сейчас использует этот язык программирования. Эксперты советуют начать его изучение как можно скорее.

Ниже мы представляем вашему вниманию подборку из 16 наиболее интересных фактов о программировании на этом языке.

1. Python изначально был хобби-проектом

В декабре 1989 года создатель Python Гвидо Ван Россум думал над хобби-проектом, чтобы занять себя в последнюю неделю перед Рождеством. Он думал о написании нового языка сценариев, который будет потомком ABC и хотел написать его на C. Он решил назвать его Python.

2. Почему он называется Python

Название языка не имеет ничего общего со змеями, он назван так в честь популярной британской комедийной труппы Монти Пайтона из 1970ых. Гвидо является большим фанатом «Летающего Цирка Монти Пайтона». Находясь в довольно мрачном настроении, он и назвал проект «Python». Разве это не интересный факт о Python?

3. Зен Python’а

Тим Питерс, основной вкладчик сообщества Python, написал это стихотворение, чтобы подчеркнуть философию Python. Если вы введете «import this» в Python, то увидите это стихотворение:

Ниже представлен перевод на русский язык:

  • Красивое лучше, чем уродливое.
  • Явное лучше, чем неявное.
  • Простое лучше, чем сложное.
  • Сложное лучше, чем запутанное.
  • Плоское лучше, чем вложенное.
  • Разреженное лучше, чем плотное.
  • Читаемость имеет значение.
  • Особые случаи не настолько особые, чтобы нарушать правила.
  • При этом практичность важнее безупречности.
  • Ошибки никогда не должны замалчиваться.
  • Если они не замалчиваются явно.
  • Встретив двусмысленность, отбрось искушение угадать.
  • Должен существовать один и, желательно, только один очевидный способ сделать это.
  • Хотя он поначалу может быть и не очевиден, если вы не голландец( Отсылка к нидерландскому программисту, создавшему язык Python, Гвидо ван Россуму  ).
  • Сейчас лучше, чем никогда.
  • Хотя никогда зачастую лучше, чем прямо сейчас.
  • Если реализацию сложно объяснить — идея плоха.
  • Если реализацию легко объяснить — идея, возможно, хороша.
  • Пространства имён — отличная штука! Будем делать их больше!

4. Реализации Python’a

Python поставляется в различных реализациях, используемых для различных целей:

  • CPython — написанный на C, наиболее распространенная реализация Python
  • Jython — написанный на Java, компилируется в байт-код
  • IronPython — реализован в C#, используется для платформ, написанных на .NET
  • Brython — браузерный Python, работает в браузере
  • RubyPython — мост между интерпретаторами Python и Ruby
  • PyPy — Python, реализованный на Python
  • MicroPython — работает на микроконтроллерах

5. Большие компании, использующие Python

Многие компании с громкими именами используют (или использовали) Python для своих продуктов/услуг. Вот некоторые из них:

  • NASA
  • Google
  • Nokia
  • IBM
  • Yahoo! Maps
  • Walt Disney Feature Animation
  • Facebook
  • Netflix
  • Expedia
  • Reddit
  • Quora
  • MIT
  • Disqus
  • Hike
  • Spotify
  • Udemy
  • Shutterstock
  • Uber
  • Amazon
  • Mozilla
  • Dropbox
  • Pinterest
  • Youtube

6. Никаких фигурных скобок

В отличие от Java и C++, Python не использует фигурные скобки для разделения кода. Для этого используются отступы. Если вы решите импортировать скобки из пакета __future__, он выбросит вам остроумную ошибку:

без шансов

7. Функции могут возвращать несколько значений

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

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

8. Python поддерживает несколько присваиваний одним оператором

Python позволит вам присвоить одно и то же значение нескольким переменным в одном операторе. Это также позволит вам присваивать значения нескольким переменным одновременно.

Это также означает, что обмен значениями в Python происходит быстрее и может быть выполнен всего в 1 строке кода:

9. Проще развернуть список при помощи слайсинга

Если мы прослайсим список значений от начала до конца, но с шагом -1, то получим список справа налево (в обратном порядке).

10. Можно использовать цепи сравнений

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

11. Строковые литералы объединяются

Если вы вводите строковые литералы, разделенные пробелом, Python объединяет их. Итак, «Привет », «Мир» становится «Привет мир».

12. Антигравитация

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

13. Python повлиял на JavaScript

Python является одним из 9 языков, которые повлияли на дизайн JavaScript. Другие языки — AWK, C, HyperTalk, Java, Lua, Perl, Scheme и Self.

14. Циклы for и while могут содержать операторы else

Оператор else используется не только с операторами if и try. Если вы добавите блок else после цикла for или while, операторы внутри блока else будут выполняться только после того, как цикл завершится нормально, то есть без ошибок. Если цикл вызывает исключение или достигает оператора break, код в else не выполняется. Это можно использовать для функций поиска.

15. _ получает значение последнего выражения

Многие люди используют Python в качестве калькулятора. Чтобы получить значение/результат последнего выражения, используйте нижнее подчеркивание.

16. Люди предпочитают Python французскому

Согласно недавнему опросу, в 2015 году в Великобритании Python обогнал французский и стал самым популярным языком в начальных школах. Из 10 родителей, 6 предпочли, чтобы их дети изучали Python, а не французский.

Надеемся, вам было весело узнавать что-то новое о Python. Хотите продолжить список? Оставьте комментарий ниже.

Python становится самым популярным языком программирования в мире / Хабр

Еще летом на The economist вышла статья о том, что Python все активнее завоевывает рынок. Но завирусилась она только сейчас. Вероятно, так произошло из-за того, что она очень неоднозначная. Ведь несмотря на такой заголовок, автор заявляет, что Python, теоретически, может повторить судьбу Фортрана или Лиспа. Чтож, обсудим. Ниже перевод этой небольшой заметки.

Я ТОЧНО не собирался создавать язык, предназначенный для массового потребления

Так сказал Гвидо ван Россум, голландский ученый, который разработал язык программирования Python в 1989 году. Но три десятилетия спустя его изобретение обогнало почти всех своих конкурентов и дало возможность без барьеров кодить, без преувеличения, всем. За последние 12 месяцев в США «Python» гуглили чаще, чем «Ким Кардашьян» (В России «Python» по тому же принципу обогнал «Тимати». — Прим. ред.). Количество запросов утроилось с 2010 года, в то время как количество запросов по другим основным языкам программирования не изменилось или уменьшилось.

Два основных преимущества языка — это его простота и универсальность. Простой синтаксис позволяет легко учиться, читать и делиться. Универсальность же легко продемонстрировать на примере: ЦРУ использовало его для взломов, Google для веб-сканирования, Pixar для производства фильмов и Spotify для рекомендаций песен.

С такой быстрорастущей пользовательской базой и широким спектром возможностей Python может показаться тем языком, который имеет шансы убить всех конкурентов. Это маловероятно, считает Грэди Буч, главный специалист по программному обеспечению IBM, который сравнивает языки программирования с империями: хотя временами растущая сила может быть близка к мировому господству, ее соперники обычно выживают в технико-культурных нишах, в которых они зародились. Python не заменит C и C++, которые являются «языками более низкого уровня». Они дают пользователю больший контроль над тем, что происходит в процессоре компьютера. Он также не убьет Java, который популярен для создания сложных приложений, или JavaScript, который поддерживает большинство веб-страниц.

Кроме того, питонисты, которые уверены в полном превосходстве своего языка, должны следить за рынком. Фортран, Лисп и Ада были очень популярны в 1980-х и 1990-х годах, согласно индексу TIOBE, который отслеживает использование языков среди профессиональных разработчиков. Их доли резко сократились, поскольку стали доступны более эффективные варианты кодинга. Ни одна империя, независимо от ее могущества, не может существовать вечно.

Python — это медленно. Почему? / Блог компании RUVDS.com / Хабр

В последнее время можно наблюдать рост популярности языка программирования Python. Он используется в DevOps, в анализе данных, в веб-разработке, в сфере безопасности и в других областях. Но вот скорость… Здесь этому языку похвастаться нечем. Автор материала, перевод которого мы сегодня публикуем, решил выяснить причины медлительности Python и найти средства его ускорения.

Общие положения

Как Java, в плане производительности, соотносится с C или C++? Как сравнить C# и Python? Ответы на эти вопросы серьёзно зависят от типа анализируемых исследователем приложений. Не существует идеального бенчмарка, но, изучая производительность программ, написанных на разных языках, неплохой отправной точкой может стать проект The Computer Language Benchmarks Game.

Я ссылаюсь на The Computer Language Benchmarks Game уже больше десяти лет. Python, в сравнении с другими языками, такими, как Java, C#, Go, JavaScript, C++, является одним из самых медленных. Сюда входят языки, в которых используется JIT-компиляция (C#, Java), и AOT-компиляция (C, C++), а также интерпретируемые языки, такие, как JavaScript.

Тут мне хотелось бы отметить, что говоря «Python», я имею в виду эталонную реализацию интерпретатора Python — CPython. В этом материале мы коснёмся и других его реализаций. Собственно говоря, здесь мне хочется найти ответ на вопрос о том, почему Python требуется в 2-10 раз больше времени, чем другим языкам, на решение сопоставимых задач, и о том, можно ли сделать его быстрее.

Вот основные теории, пытающиеся объяснить причины медленной работы Python:

  • Причина этого — в GIL (Global Interpreter Lock, глобальная блокировка интерпретатора).
  • Причина в том, что Python — это интерпретируемый, а не компилируемый язык.
  • Причина — в динамической типизации.

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

GIL

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

Например, у моего браузера Chrome, в тот момент, когда я это пишу, имеется 44 открытых потока. Тут стоит учитывать то, что структура и API системы работы с потоками различается в операционных системах, основанных на Posix (Mac OS, Linux), и в ОС семейства Windows. Операционная система, кроме того, занимается планированием работы потоков.

Если раньше вы не встречались с многопоточным программированием, то сейчас вам нужно познакомиться с так называемыми блокировками (locks). Смысл блокировок заключается в том, что они позволяют обеспечить такое поведение системы, когда, в многопоточной среде, например, при изменении некоей переменной в памяти, доступ к одной и той же области памяти (для чтения или изменения) не могут одновременно получить несколько потоков.

Когда интерпретатор CPython создаёт переменные, он выделяет память, а затем подсчитывает количество существующих ссылок на эти переменные. Эта концепция известна как подсчёт ссылок (reference counting). Если число ссылок равняется нулю, тогда соответствующий участок памяти освобождается. Именно поэтому, например, создание «временных» переменных, скажем, в пределах областей видимости циклов, не приводит к чрезмерному увеличению объёма памяти, потребляемого приложением.

Самое интересное начинается тогда, когда одними и теми же переменными совместно пользуются несколько потоков, а главная проблема тут заключается в том, как именно CPython выполняет подсчёт ссылок. Тут и проявляется действие «глобальной блокировки интерпретатора», которая тщательно контролирует выполнение потоков.

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

▍Как GIL влияет на производительность Python-приложений?

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

Если же, в пределах одного процесса интерпретатора Python, надо реализовать параллельную обработку данных с применением механизмов многопоточности, и используемые потоки будут интенсивно использовать подсистему ввода-вывода (например, если они будут работать с сетью или с диском), тогда можно будет наблюдать последствия того, как GIL управляет потоками. Вот как это выглядит в случае использования двух потоков, интенсивно нагружающих процессов.

Визуализация работы GIL (взято отсюда)

Если у вас имеется веб-приложение (например, основанное на фреймворке Django), и вы используете WSGI, то каждый запрос к веб-приложению будет обслуживаться отдельным процессом интерпретатора Python, то есть, у нас имеется лишь 1 блокировка на запрос. Так как интерпретатор Python запускается медленно, в некоторых реализациях WSGI имеется так называемый «режим демона», при использовании которого процессы интерпретатора поддерживаются в рабочем состоянии, что позволяет системе быстрее обслуживать запросы.

▍Как ведут себя другие интерпретаторы Python?

В PyPy есть GIL, он обычно более чем в 3 раза быстрее, чем CPython.

В Jython нет GIL, так как потоки Python в Jython представлены в виде потоков Java. Такие потоки используют возможности по управлению памятью JVM.

▍Как управление потоками организовано в JavaScript?

Если говорить о JavaScript, то, в первую очередь, надо отметить, что все JS-движки используют алгоритм сборки мусора mark-and-sweep. Как уже было сказано, основная причина необходимости использования GIL — это алгоритм управления памятью, применяемый в CPython.

В JavaScript нет GIL, однако, JS — это однопоточный язык, поэтому в нём подобный механизм и не нужен. Вместо параллельного выполнения кода в JavaScript применяются методики асинхронного программирования, основанные на цикле событий, промисах и коллбэках. В Python есть нечто подобное, представленное модулем asyncio.

Python — интерпретируемый язык

Мне часто приходилось слышать о том, что низкая производительность Python является следствием того, что это — интерпретируемый язык. Подобные утверждения основаны на грубом упрощении того, как, на самом деле, работает CPython. Если, в терминале, ввести команду вроде python myscript.py, тогда CPython начнёт длительную последовательность действий, которая заключается в чтении, лексическом анализе, парсинге, компиляции, интерпретации и выполнении кода скрипта. Если вас интересуют подробности — взгляните на этот материал.

Для нас, при рассмотрении этого процесса, особенно важным является тот факт, что здесь, на стадии компиляции, создаётся .pyc-файл, и последовательность байт-кодов пишется в файл в директории __pycache__/, которая используется и в Python 3, и в Python 2.

Подобное применяется не только к написанным нами скриптам, но и к импортированному коду, включая сторонние модули.

В результате, большую часть времени (если только вы не пишете код, который запускается лишь один раз) Python занимается выполнением готового байт-кода. Если сравнить это с тем, что происходит в Java и в C#, окажется, что код на Java компилируется в «Intermediate Language», и виртуальная машина Java читает байт-код и выполняет его JIT-компиляцию в машинный код. «Промежуточный язык» .NET CIL (это то же самое, что .NET Common-Language-Runtime, CLR), использует JIT-компиляцию для перехода к машинному коду.

В результате, и в Java и в C# используется некий «промежуточный язык» и присутствуют похожие механизмы. Почему же тогда Python показывает в бенчмарках гораздо худшие результаты, чем Java и C#, если все эти языки используют виртуальные машины и какие-то разновидности байт-кода? В первую очередь — из-за того, что в .NET и в Java используется JIT-компиляция.

JIT-компиляция (Just In Time compilation, компиляция «на лету» или «точно в срок») требует наличия промежуточного языка для того, чтобы позволить осуществлять разбиение кода на фрагменты (кадры). Системы AOT-компиляции (Ahead Of Time compilation, компиляция перед исполнением) спроектированы так, чтобы обеспечить полную работоспособность кода до того, как начнётся взаимодействие этого кода с системой.

Само по себе использование JIT не ускоряет выполнение кода, так как на выполнение поступают, как и в Python, некие фрагменты байт-кода. Однако JIT позволяет выполнять оптимизации кода в процессе его выполнения. Хороший JIT-оптимизатор способен выявить наиболее нагруженные части приложения (такую часть приложения называют «hot spot») и оптимизировать соответствующие фрагменты кода, заменив их оптимизированными и более производительными вариантами, чем те, что использовались ранее.

Это означает, что когда некое приложение снова и снова выполняет некие действия, подобная оптимизация способна значительно ускорить выполнение таких действий. Кроме того, не забывайте о том, что Java и C# — это языки со строгой типизацией, поэтому оптимизатор может делать о коде больше предположений, способствующих улучшению производительности программ.

JIT-компилятор есть в PyPy, и, как уже было сказано, эта реализация интерпретатора Python гораздо быстрее, чем CPython. Сведения, касающиеся сравнения разных интерпретаторов Python, можно найти в этом материале.

▍Почему в CPython не используется JIT-компилятор?

У JIT-компиляторов есть и недостатки. Один из них — время запуска. CPython и так запускается сравнительно медленно, а PyPy в 2-3 раза медленнее, чем CPython. Длительное время запуска JVM — это тоже известный факт. CLR .NET обходит эту проблему, запускаясь в ходе загрузки системы, но тут надо отметить, что и CLR, и та операционная система, в которой запускается CLR, разрабатываются одной и той же компанией.

Если у вас имеется один процесс Python, который работает длительное время, при этом в таком процессе имеется код, который может быть оптимизирован, так как он содержит интенсивно используемые участки, тогда вам стоит серьёзно взглянуть на интерпретатор, имеющий JIT-компилятор.

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

CPython пытается обеспечить поддержку как можно большего количества вариантов использования Python. Например, существует возможности подключения JIT-компилятора к Python, правда, проект, в рамках которого реализуется эта идея, развивается не особенно активно.

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

Python — динамически типизированный язык

В статически типизированных языках, при объявлении переменных, необходимо указывать их типы. Среди таких языков можно отметить C, C++, Java, C#, Go.

В динамически типизированных языках понятие типа данных имеет тот же смысл, но тип переменной является динамическим.

a = 1
a = "foo"

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

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

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

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

Именно архитектура Python чрезвычайно усложняет оптимизацию.

Для того чтобы проиллюстрировать эту идею, я собираюсь воспользоваться инструментом для трассировки системных вызовов в MacOS, который называется DTrace.

В готовом дистрибутиве CPython нет механизмов поддержки DTrace, поэтому CPython нужно будет перекомпилировать с соответствующими настройками. Тут используется версия 3.6.6. Итак, воспользуемся следующей последовательностью действий:

wget https://github.com/python/cpython/archive/v3.6.6.zip
unzip v3.6.6.zip
cd v3.6.6
./configure --with-dtrace
make

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

sudo dtrace -s toolkit/<tracer>.d -c ‘../cpython/python.exe script.py’

А вот как средство трассировки py_callflow показывает вызовы функций в приложении.
Трассировка с использованием DTrace

Теперь ответим на вопрос о том, влияет ли динамическая типизация на производительность Python. Вот некоторые соображения по этому поводу:

  • Проверка и конверсия типов — операции тяжёлые. Каждый раз, когда выполняется обращение к переменной, её чтение или запись, производится проверка типа.
  • Язык, обладающей подобной гибкостью, сложно оптимизировать. Причина, по которой другие языки настолько быстрее Python, заключается в том, что они идут на те или иные компромиссы, выбирая между гибкостью и производительностью.
  • Проект Cython объединяет Python и статическую типизацию, что, например, как показано в этом материале, приводит к 84-кратному росту производительности в сравнении с применением обычного Python. Обратите внимание на этот проект, если вам нужна скорость.

Итоги

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

Приложения, написанные на Python, можно оптимизировать, используя возможности по асинхронному выполнению кода, инструменты профилирования, и — правильно подбирая интерпретатор. Так, для оптимизации скорости работы приложений, время запуска которых неважно, а производительность которых может выиграть от использования JIT-компилятора, рассмотрите возможность использования PyPy. Если вам нужна максимальная производительность и вы готовы к ограничениям статической типизации — взгляните на Cython.

Уважаемые читатели! Как вы решаете проблемы невысокой производительности Python?

Почему существует так много Питонов? / Хабр

Питон изумителен.

Удивительно, но это довольно неоднозначное заявление. Что я имею ввиду под “Питоном”? Может, абстрактный интерфейс Питона? Или CPython, распространенная реализация Питона (не путать с похожим по названию Cython)? Или я имею ввиду что-то совсем иное? Может, я косвенно ссылаюсь на Jython, или IronPython, или PyPy. Или может я отвлекся так сильно, что говорю о RPython или RubyPython (которые очень сильно отличаются).

Не смотря на схожесть в названиях указанных выше технологий, некоторые из них имеют совсем другие задачи (или, как минимум, работают совершенно иными способами)

При работе с Питоном я столкнулся с кучей таких технологий. Инструменты *ython. Но лишь недавно я уделил время, чтобы разобраться, что они собой представляют, как они работают и почему они (каждая по-своему) необходимы.

В этом посте я начну с нуля и пройдусь по разным реализациям Питона, а закончу подробным введением в PyPy, за которым, по моему мнению, будущее языка.

Все начинается с понимания того, чем на самом деле является “Питон”.

Если у вас хорошее понимание машинного кода, виртуальных машин и так далее, можете пропустить этот раздел.

Питон интерпретируемый или компилируемый?

Это распространенный источник непонимания среди новичков Питона.

Первое, что необходимо понять: “Питон” – это интерфейс. Существует спецификация, описывающая, что должен делать Питон, и как он должен себя вести (что справедливо для любого интерфейса). И существует несколько имплементаций (что также справедливо для любого интерфейса).

Второе: “интерпретируемый” и “компилируемый” это свойства имплементации, но не интерфейса.

Так что сам вопрос не совсем корректен.

В случае с самой распространенной реализацией (CPython: написанный на C, часто называемый просто “Python”, и, конечно, именно тот, который вы используете, если понятия не имеете о чем я толкую) ответ: интерпретируемый, с некоторой компиляцией. CPython компилирует* исходный код на Питоне в байткод, а затем интерпретирует этот байткод, запуская его в процессе.

* Замечание: это не совсем “компиляция” в традиционном смысле. Обычно, мы считаем, что “компиляция” это конвертация из высокоуровневого языка в машинный код. Тем не менее – в некотором роде это “компиляция”.

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

Байткод или машинный код

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

— Cи компилируется в машинный код, который впоследствии запускается напрямую процессором. Каждая инструкция заставляет процессор производить разные действия.

— Java компилируется в байткод, который впоследствии запускается на Виртуальной машине Java (Java Virtual Machine, JVM), абстрактном компьютере, который запускает программы. Каждая инструкция обрабатывается JVM, который взаимодействует с компьютером.

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

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

Возвращаясь к CPython, цепочка операций выглядит следующим образом:

1. CPython компилирует ваш исходный код на Питоне в байткод.

2. Этот байткод запускается на виртуальной машине CPython.

Новички зачастую допускают, что Питон компилируемый из-за наличия .pyc-файлов. Это отчасти верно: .pyc-файлы – это скомпилированный байткод, который впоследствии интерпретируется. Так что если вы запускали ваш код на Питоне, и у вас есть .pyc-файл, то во второй раз он будет работать быстрее, потому что ему не нужно будет заново компилироваться в байткод.

Альтернативные виртуальные машины: Jython, IronPython и другие

Как я говорил выше, у Питона существует несколько реализаций. Опять же, как говори-лось выше, самой популярной является CPython. Эта версия Питона написана на C и считается имплементацией “по умолчанию”.

Но как насчет альтернатив? Одна из наиболее видных это Jython, реализация Питона на Java, которая использует JVM. В то время как CPython генерирует байткод для запуска на CPython VM, Jython генерирует байткод Java для запуска на JVM (это то же самое, что генерируется при компиляции программы на Java).

“Зачем может понадобиться использовать альтернативную реализацию?”, спросите вы. Ну, для начала, разные реализации хорошо ладят с разными наборами технологий.

CPython упрощает написание C-расширений для кода на Питоне потому что в конце он запускается интерпретатором Cи. Jython в свою очередь упрощает работу с другими программами на Java: вы можете импортировать любые Java-классы без дополнительных усилий, призывая и используя ваши Java-классы из программ на Jython. (Замечание: если вы еще не думали об этом всерьез, это довольно безумно. Мы дожили до того времени, когда можно смешивать разные языки и компилировать их в одну сущность. Как заметил Rostin, программы, смешивающие код на Фортране с Cи появились довольно давно, так что это не совсем новинка. Но это все же круто.)

В качестве примера, вот корректный код на Jython:

[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_51

>>> from java.util import HashSet

>>> s = HashSet(5)

>>> s.add("Foo")

>>> s.add("Bar")

>>> s

[Foo, Bar]

IronPython это другая популярная реализация Питона, написанная полностью на C# и предназначенная для .NET. В частности, она запускается на виртуальной машине .NET, если ее можно так назвать, на Common Language Runtime (CLR), от Майкрософт, сравнимым с JVM.

Можно сказать, что Jython: Java :: IronPython: C#. Они работают на соответствующих виртуальных машинах, есть возможность импортировать классы C# в код IronPython и классы Java в код Jython, и так далее.

Вполне реально выжить, не прикасаясь к ни к чему, кроме CPython. Но, переходя на другие имплементации, вы получаете преимущество, в основном из-за используемого стека технологий. Используете много языков, основанных на JVM? Jython может вам подойти. Все на .NET? Возможно, стоит попробовать IronPython (и, возможно, вы уже сделали).

Кстати, хоть это и не станет причиной для перехода на другую имплементацию, стоит упомянуть, что имплементации эти на самом деле отличаются поведением. Это касается не только способов интерпретации кода на Питоне. Однако эти отличия, как правило, не-значительны, они исчезают и появляются со временем из-за активной разработки. К примеру, IronPython использует строки Unicode по умолчанию; однако CPython использует ASCII в версиях 2.x (выдавая ошибку UnicodeEncodeError для не-ASCII символов), и при этом поддерживает символы Unicode по умолчанию в версиях 3.x.

Компиляция на лету (Just-in-Time Compilation): PyPy и будущее

Итак, у нас есть имплементация Питона, написанная на Си, еще одна – на Java, и третья на C#. Следующий логичный шаг: имплементация Питона, написанная на… Питоне. (Подготовленный читатель заметит, что это утверждение немного обманчиво).

Вот почему это может сбивать с толку. Для начала, давайте обсудим компиляцию на лету (just-in-time или JIT).

JIT. Почему и как

Напомню, что нативный машинный код намного быстрее байткода. Ну, а что, если бы можно было компилировать часть байткода и запускать его как нативный код? Пришлось бы “заплатить” некоторую цену (иными словами: время) за компиляцию байткода, но если результат будет работать быстрее, то это здорово! Этим и мотивируется JIT-компиляция, гибридная техника, которая совмещает в себе преимущества интерпретато-ров и компиляторов. В двух словах – JIT старается использовать компиляцию, чтобы ускорить систему интерпретации.

Например, вот распространенный подход JIT:

  1. Определить байткод, который запускается часто.
  2. Скомпилировать его в нативный машинный код.
  3. Закэшировать результат.
  4. Всегда когда необходимо запустить тот же самый байткод, использовать уже скомпилированный машинный код и пожинать плоды (в частности, прирост скорости).

В этом вся суть PyPy: использовать JIT в Питоне (в дополнении можно найти предыдущие попытки). Конечно, есть и другие цели: PyPy нацелен на кроссплатформенность, работу с небольшим количеством памяти и поддержку stackless (отказа от стека вызовов языка Си в пользу собственного стека). Но JIT это главное преимущество. В среднем на основе временных тестов, фактор ускорения составляет 6.27. Более подробные данные можно получить из схемы от PyPy Speed Center:

В PyPy сложно разобраться

У PyPy есть огромный потенциал, и в данный момент он хорошо совместим с CPython (так что на нем можно запускать Flask, Django, и т.д.).

Но с PyPy есть много путаницы. (оцените, к примеру, это бессмысленное предложение создать PyPyPy…). По моему мнению основная причина в том, что PyPy одновременно является:

1. Интерпретатором Питона, написанным на RPython (не Python (я обманул вас до этого)). RPython это подмножество Python со статичной типизацией. В Python, вести тщательные беседы о типах “в целом невозможно” почему это так сложно? рассмотрите следующее:

x = random.choice([1, "foo"])

это корректный код на Python (спасибо Ademan‘у). Какой тип у x? Как мы можем обсуждать типы переменных, когда типы даже не форсируются?). В RPython мы жертвуем некоторой гибкостью, но взамен получаем возможность гораздо проще управлять памятью и много чего еще, что помогает при оптимизации.

2. Компилятором, который компилирует код на RPython в разные форматы и поддерживает JIT. Платформой по-умолчанию является Си, то есть компилятор RPython-в-Си, но в качестве целевой платформы также можно выбрать JVM и другие.

Для простоты описания, я буду называть их PyPy (1) и PyPy (2).

Зачем могут понадобиться эти две вещи, и почему – в одном наборе? Думайте об этом так: PyPy (1) это интерпретатор, написанный на RPython. То есть он берет пользовательский код на Питоне и компилирует его в байткод. Но чтобы сам интерпретатор (написанный на RPython) мог работать, он должен быть интерпретирован другой реализацией Пи-тона, верно?

Итак, можно просто использовать CPython чтобы запускать интерпретатор. Но это будет не слишком быстро.

Вместо этого мы используем PyPy (2) (называемый RPython Toolchain) чтобы компилировать интерпретатор PyPy в код для другой платформы (например, C, JVM, или CLI) для запуска на конечной машине, с добавлением JIT. Это волшебно: PyPy динамически добавляет JIT к интерпретатору, генерируя собственный компилятор! (Опять же, это безумие: мы компилируем интерпретатор, добавляя другой отдельный, самостоятельный компилятор).

В конце концов результатом будет самостоятельный исполняемый файл, который интерпретирует исходный код на Питоне и использует оптимизацию JIT. То, что нужно! Понять сложновато, но, возможно, эта схема поможет:

Повторим: настоящая красота PyPy в том, что мы можем написать себе кучу разных интерпретаторов Питона на RPython не волнуясь о JIT (не считая пары деталей). После этого PyPy реализует для нас JIT, используя RPython Toolchain/PyPy (2).

На самом деле, если копнуть глубже в абстракцию, теоретически можно написать интерпретатор любого языка, направить его в PyPy и получить JIT для этого языка. Это возможно потому, что PyPy концентрируется на оптимизации самого интерпретатора, а не деталей языка, который тот интерпретирует.

В качестве отступления я бы хотел заметить, что сам JIT совершенно восхитителен. Он использует технику под названием “отслеживание” (tracing), которая работает следующим образом:

  1. Запустить интерпретатор и интерпретировать все (не добавляя JIT).
  2. Провести легкое профилирование интерпретированного кода.
  3. Определить операции, которые уже выполнялись ранее.
  4. Скомпилировать эти части кода в машинный код.

Узнать больше можно из этой легкодоступной и очень интересной публикации.

Подытожим: мы используем PyPy-компилятор RPython-в-Си (или другую целевую плат-форму), чтобы скомпилировать реализованный на RPython интерпретататор PyPу.

Заключение

Почему все это так восхитительно? Почему стоит гнаться за этой безумной идеей? По-моему, Алекс Гейнор объяснил это очень хорошо в своем блоге: “[За PyPy будущее] потому что [он] более быстрый, более гибкий и является лучшей платформой для развития Питона”.

Вкратце:

  • Он быстрый – потому что компилирует исходный код в нативный код (используя JIT).
  • Он гибкий – потому что добавляет JIT в интерпретатор без особых усилий.
  • Он гибкий (опять) – потому что вы можете писать интерпретаторы в RPython, что впоследствии упрощает расширение по сравнению с тем же Си (на самом деле упрощает настолько, что даже есть инструкция по написанию собственных интерпретаторов).
Дополнение: другие названия, которые вы, возможно, слышали

Python 3000 (Py3k): альтернативное название Python 3.0, основной релиз Питона с обратной совместимостью, который появился в 2008. году. Команда Py3k предсказала, что новой версии понадобится примерно пять лет чтобы полностью прижиться. И в то время, как большинство (внимание: надуманное утверждение) разработчиков на Питоне продолжают использовать Python 2.x, люди все больше задумываются о Py3k.

Cython: надмножество Python, включающее возможность вызывать функции Си.

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

Numba: “специализированный just-in-time компилятор”, который добавляет JIT в снабженный примечаниями код на Питоне. Проще говоря, вы даете ему подсказки, а он ускоряет некоторые части вашего кода. Numba является частью дистрибутива Anaconda набора пакетов для анализа и управления данными.

IPython: сильно отличается от всего, что мы обсудили. Вычислительная среда для Питона. Интерактивная, с поддержкой GUI-пакетов, браузеров и так далее.

Psyco: модуль расширения Питона, одна из первых попыток Питона в области JIT. Давно помечен как “неподдерживаемый и мертвый”. Главный разработчик Psyco Армин Риго сейчас работает над PyPy.

Привязки к языкам
  • RubyPython: мост между виртуальными машинами Ruby и Python. Позволяет встраивать код на Питоне в код на Ruby. Вы обозначаете, где начинается и заканчивается Питон, а RubyPython обеспечивает передачу данных между виртуальными машинами.
  • PyObjc: языковое соединение между Python и Objective-C, которые ведет себя как мост между ними. На практике это означает, что вы можете использовать библиотеки Objective-C (включая все, что нужно для создания приложения под OS X) в коде на Питоне, и модули Питона в коде на Objective-C. Это удобно, потому что CPython написан на Си, который является подмножеством Objective-C.
  • PyQt: в то время как PyObjc позволяет связать Питон с компонентами OS X GUI, PyQt делает то же для фреймворка Qt. Это дает возможность создавать полноценные графические интерфейсы, обращаться к SQL базам данных и так далее. Еще один инструмент, нацеленный на перенос простоты Питона в другие фреймворки.
JavaScript фреймворки
  • pyjs (Pyjamas): фреймворк для создания веб и десктопных приложений на Питоне. Включает в себя компилятор Python-в-JavaScript, набор виджетов и некоторые другие инструменты.
  • Brython: виртуальная машина Python, написанная на Javascript. Позволяет запустить код на Py3k в веб-браузере.

Почему Python, а не любой другой язык программирования?

Простота

Питон воспринимается легче за счёт отсутствия синтаксической шелухи. Фигурные скобки заменили на отступы; избавились от лишних круглых скобок; классы, функции и переменные объявляются без лишних слов (модификаторов). Код на питоне читается почти как естественный язык. Пример:

def get_roots(a, b, c):
    discriminant = b ** 2 - 4 * a * c
    if discriminant < 0:
        return
    root1 = (-b - sqrt(discriminant)) / (2 * a)
    root2 = (-b + sqrt(discriminant)) / (2 * a)
    if discriminant == 0:
        return root1, None
    else:
        return root1, root2

Такой подход заложен в основу языка: один из постулатов дзена питона гласит: «Readability counts». Из-за своей простоты Python преподают первым языком программирования во многих иностранных школах и ВУЗах.

Из коробки

На большинстве операционных систем Linux и на любой современной macOS питон уже есть. Не надо ничего устанавливать: достаточно набрать в терминале python3.

Богатая библиотека

Стандартная библиотека языка Python огромна. Большая часть решается командой import module_name, импортом нужного инструмента из набора питона. Если решить проблему стандартными средствами не удалось, можно воспользоваться сторонними модулями. Достаточно одной команды pip install module_name и всё, можно делать import, как описано выше!

Распространенность

Благодаря богатой библиотеке, питон находит применение в самых разных областях:

  • В разработке крупных преложений для людей:
    • BitTorrent
    • Центр приложений Ubuntu
    • Dropbox
  • В разработке игр:
    • Civilization IV
    • Battlefield 2
    • World of Tanks
  • Богатый модуль для работы с ОС нашёл своё применение в области компьютерной безопасности, например в поиске уязвимостей. В том числе и злоумышленниками (чёрный пиар тоже пиар).
  • Используется учеными как инструмент в различных предметных областях областях
  • Web-разработка (Django, Flask, Tornado).

На Википедии есть отдельная страничка с программами на Python.

Кто использует

На Python пишут в Яндексе, Гугле, Авито, Мэйле, Касперском и даже в NASA. Питон используется в Dropbox, Youtube, Bitly, Reddit, а Instagram, Disqus, Spotify, Bitbucket работают на Django!
И таких примеров много. А вот ещё один факт: Python занял третье по популярности место на GitHub в 2016-м году

Сообщество

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

Да, Python медленный, но меня это не волнует / Хабр

Разговоры о снижении производительности ради продуктивности.
Я беру паузу в моём обсуждении asyncio в Python, чтобы поговорить о скорости Python. Позвольте представиться, я — ярый поклонник Python, и использую его везде, где только удаётся. Одна из причин, почему люди выступают против этого языка, — то, что он медленный. Некоторые отказываются даже попробовать на нём поработать лишь из-за того, что «X быстрее». Вот мои мысли на этот счёт.

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

Раньше программы выполнялись очень долго. Ресурсы процессора и памяти были дорогими, и время работы было важным показателем. А уж сколько платили за электричество! Однако, те времена давно прошли, потому что главное правило гласит:

Оптимизируйте использование своих самых дорогих ресурсов.

Исторически самым дорогим было процессорное время. Именно к этому подводят при изучению информатики, фокусируясь на эффективности различных алгоритмов. Увы, это уже не так — железо сейчас дёшево как никогда, а вслед за ним и время выполнения становится всё дешевле. Самым дорогим же становится время сотрудника, то есть вас. Гораздо важнее решить задачу, нежели ускорить выполнение программы. Повторюсь для тех, кто просто пролистывает статью:

Гораздо важнее решить задачу, нежели ускорить выполнение программы.

Вы можете возразить: «В моей компании заботятся о скорости. Я создаю веб-приложение, в котором все ответы приходят меньше, чем за x миллисекунд» или «от нас уходили клиенты, потому что считали наше приложение слишком медленным». Я не говорю, что скорость работы не важна совсем, я хочу лишь сказать, что она перестала быть самой важной; это уже не самый дорогой ваш ресурс.

Скорость — единственная вещь, которая имеет значение.

Когда вы употребляете слово «скорость» в контексте программирования, скорей всего вы подразумеваете производительность CPU. Но когда ваш CEO употребляет его применительно к программированию, то он подразумевает скорость бизнеса. Самая главная метрика — время выхода на рынок. В конечном счёте неважно насколько быстро работают ваши продукты, не важно на каком языке программирования они написаны или сколько требуется ресурсов для их работы. Единственная вещь, которая заставит вашу компанию выжить или умереть, — это время выхода на рынок. Я говорю больше не о том, насколько быстро идея начнёт приносить доход, а о том, как быстро вы сможете выпустить первую версию продукта. Единственный способ выжить в бизнесе — развиваться быстрее, чем конкуренты. Неважно, сколько у вас идей, если конкуренты реализуют их быстрее. Вы должны быть первыми на рынке, ну или как минимум не отставать. Чуть затормозитесь — и погибните.

Единственный способ выжить в бизнесе — развиваться быстрее, чем конкуренты.

Поговорим о микросервисах

Крупные компании, такие как Amazon, Google или Netflix, понимают важность быстрого развития. Они специально строят свой бизнес так, чтобы быстро вводить инновации. Микросервисы помогают им в этом. Эта статья не имеет никакого отношения к тому, следует ли вам строить на них свою архитектуру, но, по крайней мере, согласитесь с тем, что Amazon и Google должны их использовать. Микросервисы медленны по своей сути. Сама их концепция заключается в том, чтобы использовать сетевые вызовы. Иными словами, вместо вызова функции вы отправляетесь гулять по сети. Что может быть хуже с точки зрения производительности?! Сетевые вызовы очень медленны по сравнению с тактами процессора. Однако, большие компании по-прежнему предпочитают строить архитектуру на основе микросервисов. Я действительно не знаю, что может быть медленнее. Самый большой минус такого подхода — производительность, в то время как плюсом будет время выхода на рынок. Создавая команды вокруг небольших проектов и кодовых баз, компания может проводить итерации и вводить инновации намного быстрее. Мы видим, что даже очень крупные компании заботятся о времени выхода на рынок, а не только стартапы.

Процессор не является вашим узким местом

Если вы пишете сетевое приложение, такое как веб-сервер, скорее всего, процессор не является узким местом вашего приложения. В процессе обработки запроса будет сделано несколько сетевых обращений, например, к базе данных или кешу. Эти сервера могут быть сколь угодно быстрыми, но всё упрётся в скорость передачи данных по сети. Вот действительно классная статья, в которой сравнивается время выполнения каждой операции. В ней автор считает за один такт процессора одну секунду. В таком случае запрос из Калифорнии в Нью-Йорк растянется на 4 года. Вот такая вот сеть медленная. Для примерных расчётов предположим, что передача данных по сети внутри датацентра занимает около 3 мс, что эквивалентно 3 месяцам по нашей шкале отсчёта. Теперь возьмём программу, которая нагружает CPU. Допустим, ей надо 100 000 циклов, чтобы обработать один вызов, это будет эквивалентно 1 дню. Предположим, что мы пишем на языке, который в 5 раз медленнее — это займёт 5 дней. Для тех, кто готов ждать 3 месяца, разница в 4 дня уже не так важна.

В конечном счёте то, что python медленный, уже не имеет значения. Скорость языка (или процессорного времени) почти никогда не является проблемой. Google описал это в своём исследовании. А там, между прочим, говорится о разработке высокопроизводительной системы. В заключении приходят к следующему выводу:

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

Другими словами:

CPU редко когда является сдерживающим фактором.

Что, если мы всё-таки упираемся в CPU?

Что насчёт таких аргументов: «Всё это прекрасно, но что, если CPU становится узким местом и это начинает сказываться на производительности?» или «Язык x менее требователен к железу, нежели y»? Они тоже имеют место быть, однако вы можете масштабировать приложение горизонтально бесконечно. Просто добавьте серверов, и сервис будет работать быстрее 🙂 Без сомнения, Python более требователен к железу, чем тот же C, но стоимость нового сервера гораздо меньше стоимости вашего времени. То есть дешевле будет докупить ресурсов, а не бросаться каждый раз что-то оптимизировать.

Так что, Python быстрый?

На протяжении всей статьи я твердил, что самое важное — время разработчика. Таким образом, остается открытым вопрос: быстрее ли Python языка X во время разработки? Смешно, но я, Google и кое-кто ещё, могут подтвердить насколько продуктивен Python. Он скрывает так много вещей от вас, помогая сосредоточиться на основной вашей задаче и не отвлекаясь на всякие мелочи. Давайте рассмотрим некоторые примеры из жизни.

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

В представленном выше исследовании Python более чем в 2 раза продуктивнее Java. Многие другие также языки программирования дают похожий результат. Rosetta Code провёл довольно обширное исследование различий изучения языков программирования. В статье они сравнивают python с другими интерпретируемыми языками и заявляют:

Python, в целом, наиболее краток, даже в сравнении с функциональными языками (в среднем в 1,2-1,6 раза короче).

По-видимому, в реализации на Python будет как правило меньше строк кода, чем на каком-либо другом языке. Это может показаться ужасной метрикой, однако несколько исследований, в том числе и упомянутых выше, показывают, что время, затраченное на каждую строку кода, примерно одинаково на каждом языке. Таким образом, чем меньше строк кода, тем больше продуктивность. Даже сам codinghorror (программист на C#) написал статью о том, что Python более продуктивен.

Я думаю, будет справедливо сказать, что Python более продуктивен, чем многие другие языки программирования. В основном это связано с тем, что он поставляется «с батарейками», а также имеет множество сторонних библиотек на все случаи жизни. Вот небольшая статья, сравнивающая Python и X. Если вы мне не верите, можете сами убедиться насколько этот язык программирования прост и удобен. Вот ваша первая программа:

import __hello__

Но что, если скорость действительно важна?

Мои рассуждения выше могли сложить мнение, что оптимизация и скорость выполнения программы вообще не имеют значения. Во многих случаях это не так. Например, у вас есть веб-приложение и некоторый endpoint, который уж очень тормозит. У вас могут быть даже определённые требования на этот счёт. Наш пример строится на некоторых предположениях:

  1. есть некоторый endpoint, который выполняется медленно
  2. есть некоторые метрики, определяющие насколько медленными может быть обработка запросов

Мы не будем заниматься микро-оптимизацией всего приложения. Всё должно быть «достаточно быстро». Ваши пользователи могут заметить, если обработка запроса занимает секунды, но они никогда не заметят разницу между 35 мс и 25 мс. Вам нужно лишь сделать приложение «достаточно хорошим».Дисклеймер

Должен заметить, что есть некоторые приложения, которые обрабатывают данные в реальном времени, которые нуждаются в микрооптимизации, и каждая миллисекунда имеет значение. Но это скорее исключение, чем правило.

Чтобы понять как оптимизировать, мы должны сначала понять что именно надо оптимизировать. В конце концов:

Любые улучшения, сделанные где-либо помимо узкого места, являются иллюзией. — Джин Ким.

Если оптимизация не устраняет узкого места приложения, то вы просто потратите впустую своё время и не решите реальную проблему. Вы не должны продолжать разработку, пока не исправите тормоза. Если вы пытаетесь оптимизировать нечто, не зная конкретно что, то вряд ли результат вас удовлетворит. Это и называется «преждевременной оптимизацией» — улучшение производительности без каких-либо метрик. Д. Кнуту часто приписывают следующую цитату, хотя он утверждает, что она не его:

Преждевременная оптимизация — корень всех зол.

Если быть точным, то более полная цитата:

Мы должны забыть об эффективности, скажем, на 97% времени: преждевременная оптимизация — корень всех зол. Однако мы не должны упускать наши возможности в этих критических 3%.

Другими словами, здесь говорится, что большую часть времени вам не нужно думать об оптимизации. Код и так хорош 🙂 А в случае, когда это не так, нужно переписать не более 3% Вас никто не похвалит, если вы сделаете обработку запроса на несколько наносекунд быстрее. Оптимизируйте то, что поддаётся измерению.

Преждевременная оптимизация, как правило, заключается в вызове более быстрых методов <прим пер. видимо, подразумеваются ассемблерные вставки> или использовании специфичных структур данных из-за их внутренней реализации. В университете нас учили, что если два алгоритма имеют одну асимптотику Big-O, то они эквивалентны. Даже если один из них в 2 раза медленнее. Компьютеры сейчас настолько быстры, что вычислительную сложность пора измерять на большом количестве данных. То есть, если у вас есть две функции O(log n), но одна в два раза медленнее другой, то это не имеет большого значения. По мере увеличения размера данных они обе начинают показывать примерно одно и то же время выполнения. Вот почему преждевременная оптимизация — это корень всего зла; Это тратит наше время и практически никогда не помогает нашей общей производительности.

В терминах Big-O все языки программирования имеют сложность O(n), где n — кол-во строк кода или инструкций. Не имеет значения, насколько медленным будет язык или его виртуальная машина — все они имеют общую асимптоту. <прим. пер. автор имеет ввиду, что даже если сейчас язык X в два раза медленнее Y, то в будущем после оптимизаций они будут примерно равны по скорости> В соответствии с этим рассуждением можно сказать, что «быстрый» язык программирования всего лишь преждевременно оптимизированный, причём непонятно по каким метрикам.

Оптимизируя Python

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

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

Существует также язык Cython, который является надмножеством Python. Он представляет из себя смесь с типизированным C. Любой код Python является также валидным кодом и на Cython, который транслируется в C. Вы можете смешивать типы C и утиную типизацию. Используя Cython, вы получаете прирост производительности только в узком месте, не переписывая весь остальной код. Так делает, например, EVE Online. Эта MMoRPG использует только Python и Cython для всего стека, проводя оптимизацию только там, где это требуется. Кроме того, есть и другие способы. Например, PyPy — реализация JIT Python, которая может дать вам значительное ускорение во время выполнения долгоживущих приложений (например, веб-сервера), просто путем замены CPython (реализация по умолчанию) на PyPy.

Итак, основные моменты:

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

Спасибо за внимание!

Зачем изучать Python — 7 причин, по которым вы должны изучить Python сейчас

В этой статье мы поговорим о том, почему вам следует изучать Python прямо сейчас.

  1. Python отлично подходит для начинающих
  2. Веб-разработка на Python
  3. Итеративный, гибкий дизайн
  4. У Python высокие зарплаты
  5. Безопасность Python
  6. Python, искусственный интеллект и машинное обучение
  7. Python Разнообразие и гибкость

Знаете, что я действительно ненавижу?

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

Серьезно — как можно доверять тому, кто никогда не был в окопах, не участвовал в войне и не возвращался домой измученный боями, но победивший?

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

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

Я здесь не для того, чтобы проповедовать Python.

Я здесь не для того, чтобы сказать вам, что Python — «лучший язык программирования» (что бы это ни значило).

Я даже не собираюсь посоветовать вам «попробовать» построить следующий проект на Python, потому что я не знаю, , , каков ваш следующий проект и подойдет ли Python для него.

Вместо этого моя цель — познакомиться с вами как с программистом. Я собираюсь поделиться некоторыми личными историями из моей карьеры программиста, и я надеюсь, что вы поймете, почему вам следует изучать Python.

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

С учетом сказанного, давайте углубимся.

№1. Программист впервые? Изучите Python быстро.

Я помню, как начал свой путь к разработке программного обеспечения более 15 лет назад.

Я был совсем маленьким, лет 13 максимум.

Эндрю, мой друг детства, познакомил меня с миром компьютеров и показал, как они могут делать гораздо больше, чем просто подключаться к Интернету и получать доступ к веб-сайтам.

Он показал мне основы HTML и как на самом деле веб-сайты были построены с использованием «тегов» и основного языка разметки.

С этого момента я стал зависимым.

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

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

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

Летом (и с помощью Эндрю) я использовал эту книгу, чтобы изучить основы программирования, основные структуры управления и то, как организовать программу.

Но в конце дня я был очень разочарован — и я чуть не забросил программирование совсем к началу школы осенью.

Как так?

Я ничего не мог сделать « cool » с BASIC — язык по самой своей природе был чрезвычайно ограничивающим и ограничивающим (иронично, поскольку теперь я использую Python, названный в честь змеи, которая сжимает и раздавливает свою добычу, прежде чем съесть ее. ).

Мне не удалось получить доступ к системным ресурсам низкого уровня.

Я не мог загружать изображения и управлять ими.

А какой тип статистики или вычислительного анализа?

Забудьте об этом.

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

Сказав все это, я пошел вперед. Я понял, что моя «карьера» программиста не должна заканчиваться на BASIC.

На первом году обучения в средней школе я перешел на C / C ++. Это был намного более сложный язык, и мне потребовалось время, чтобы овладеть им. Мне также очень понравилась свобода, которую дал мне Си, даже если это означало время от времени стрелять себе в ногу.

После C / C ++ я перешел к Java и объектно-ориентированному программированию. Это было весело, но казалось, что eternity что-то делает.

К концу второго года обучения в средней школе я впервые попробовал языки сценариев, в частности, Python.

Я был поражен.

Код был легко читаемым — почти как письмо элементарного английского или простой абстрактной математики.

Сам код тоже был объектно-ориентированным.Не до крайности, как на Java, ровно столько, чтобы я почувствовал, что это старый друг — там, когда мне это нужно.

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

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

Оглядываясь назад, я хотел бы начать с Python.

Конечно, BASIC научил меня основам программирования, но Python может делать и это таким же простым способом.

Если бы мне пришлось повернуть время вспять, я бы вообще пропустил BASIC и сразу переключился на Python. Я бы получил больше удовольствия от этого опыта, получил бы большую отдачу от вложенного времени и был бы лучше подготовлен к изучению C / C ++ и Java.

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

№ 2.Python используется для веб-разработки.

Признаюсь:

Когда я впервые начал писать веб-приложения, я не использовал Python — я использовал PHP.

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

Я ошибался.

Совершенно неправильно.

Только когда мой друг Патрик показал мне веб-фреймворк Python Django, мое мнение изменилось навсегда.

То, что когда-то занимало у меня часа на PHP, можно было сделать за минуты с использованием Python.

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

От Django я перешел на Flask, еще один веб-фреймворк, но крошечный и созданный для настройки.

Когда я начал работать с Django и Flask, я никогда не возвращался к PHP.

Хотя большинство веб-сайтов по-прежнему работают на PHP, многие новых веб-приложений создаются с использованием Python.

Если вы планируете заниматься разработкой любого веб-приложения, попробуйте Python и Django / Flask. Я думаю, вы будете впечатлены.

№ 3. Итеративный, гибкий дизайн.

Успех стартапов не приходит в одночасье.

Вместо этого он происходит из серии из итераций , которые часто выглядят так:

  1. Узнайте, что хочет / нуждается (потенциальный) клиент.
  2. Создайте минимально жизнеспособный продукт (т. Е. наименьший возможный набор функций, который решает проблему клиента).
  3. Покажите заказчику.
  4. Повторяйте процесс, пока клиент не будет доволен.

Этот процесс позволяет стартапам «ступенчато» продвигаться к успеху. Начните с идеи, затем совершенствуйте идею и продукт, пока не добьетесь успеха.

В онлайн-мире Python идеально подходит для этого процесса.

Язык позволяет быстро кодировать , создавая сложные приложения с минимальным количеством строк кода (в 5 раз меньше, чем у Java, и в 10 раз меньше, чем у C ++).

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

Лично я работаю в стартапах с 18 лет.

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

№ 4. Высокие зарплаты.

В исследовании заработной платы разработчиков, проведенном в 2016 году на сайте Indeed.com и опубликованном codementor.io, было обнаружено, что средняя зарплата разработчика Python составляла 107000 долларов США:

Основываясь на этом исследовании, Swift, Python, Ruby, C ++ и Java принесут вам больше всего денег (PHP завершает нижнюю часть).

Учитывая монетизацию мобильных приложений, возможно, неудивительно видеть Swift в верхней части списка, поскольку он обычно используется для разработки приложений для iOS и macOS.

Но чуть ниже Swift находятся Python и Ruby: единственные два языка сценариев в пятерке лучших.

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

Python же другой: более разнообразен.

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

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

Когда я работал разработчиком PHP, я зарабатывал меньше всего денег в своей карьере.

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

Но настоящих изменений для меня не произошло, пока я не начал работать в сообществе Python по информатике.

Хотя это строго анекдотическое мнение, я, , искренне верю, , что Python открывает больше дверей, чем Ruby, особенно с научной точки зрения .

Я предсказываю, что, учитывая рост Python не только как языка программирования общего назначения, но и как научного языка программирования , мы скоро увидим, как Python вытеснит Ruby с точки зрения более высоких зарплат.

№ 5. Безопасность Python.

Пять месяцев назад мой приятель по спортзалу познакомил меня со своим сыном Шоном.

Шон только что закончил среднюю школу и в осеннем семестре собирался поступать в Чикагский университет.

Заинтересовавшись его специальностью, я спросил Шона, что он планирует изучать.

Его ответ?

Кибербезопасность.

Это отличное поле для работы, и здесь можно заработать много денег.

Подумайте об этом — участие в кибербезопасности имеет много параллелей с ведением бизнеса, построенного вокруг моргов и похоронных бюро.

Это может быть ужасно, но люди будут продолжать умирать; у похоронных бюро нет шансов на стагнацию, если мы волшебным образом не найдем эликсир жизни.

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

Шон рассказал мне о классах программирования в своей средней школе, как он потратил два года на Java, объектно-ориентированное программирование и разработку программного обеспечения.

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

Во время рождественских каникул я встретился с Шоном и спросил его, как ему нравится учиться в Чикагском университете.

У него все было отлично.

Он потряс все свои уроки информатики.

Он присоединился к школьной команде по кибербезопасности…

… и даже попутно изучил Python.

Улыбаясь, потому что я уже знал ответ, я спросил его: «Что заставило вас изучить Python?»

Он ответил: «Это так просто, чувак! Вы можете делать буквально все, что угодно, с Python. Когда я впервые присоединился к команде кибербезопасности, я писал тестеры на проникновение с помощью Java.Мне потребовались часы, чтобы за минуты закодировать то, что делали мои коллеги ».

Шон осознал всю мощь языков сценариев.

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

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

№ 6. Python — это будущее искусственного интеллекта и машинного обучения.

Язык программирования Python в настоящее время способствует научному программированию, но так было не всегда.

В течение лет академических ученых и частных исследователя использовали язык MATLAB для научных исследований.

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

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

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

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

В наши дни я трачу на гораздо больше времени на написание научного кода Python, чем на что-либо еще, поэтому я явно предвзято, но могу сказать вам следующее:

Python — это будущее искусственного интеллекта.

Учитывая гибкость языка, его скорость и функциональность машинного обучения, предоставляемую такими библиотеками, как scikit-learn, Keras и TensorFlow, мы продолжим видеть, что Python доминирует в сфере машинного обучения.

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

№ 7. Разнообразие и гибкость.

За прошедшее лето я установил свой первый 401к.

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

Как бы разговор ни начинался, он всегда заканчивался одним и тем же местом:

Управление моим риском, а точнее, , как его минимизировать.

В инвестиционном мире это просто сводится к тому, чтобы «не класть все яйца в одну корзину». Если вы уроните корзину, вы разбьете все яйца.

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

Имеет смысл, правда?

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

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

В последнее десятилетие становится все более ценным иметь специализацию по программированию, но вы должны быть осторожны, чтобы не клеймить себя как «тот парень Java» или «тот парень C ++».

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

Например, я программист, и я, , специализируюсь на компьютерном зрении и машинном обучении.

Однако я , а не , просто «Python парень» или «OpenCV парень».

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

Я использовал C ++ для работы с приложениями реального времени.

Я даже создал специальные приложения PHP для масштабирования до сотен тысяч пользователей.

Моя точка зрения такова: мое резюме и биографические данные являются разнообразными .

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

Если у вас нет Python за плечами, подумайте о том, чтобы добавить его в свой репертуар и повысить свою диверсификацию и конкурентоспособность как программиста.

Что теперь?


Итак, вы готовы изучать Python, , но с чего начать?

Я вернусь в следующем месяце, чтобы ответить на этот вопрос и предоставить свои любимые ресурсы для изучения языка программирования Python.

Тогда увидимся!

.

Почему вы должны изучать Python в 2020 году? — Питон — единственная надежда, — гласит ваш гороскоп

.

Зачем изучать Python? — Причины его ажиотажа в мире программирования

Индустрия ИТ развивается быстрыми темпами, и с каждым днем ​​вы слышите о новых технологиях или языках программирования, которые появляются, и о людях, которые их укрепляют. Это становится ошеломляющим для новичков, которые не знают, какой язык программирования им лучше всего подходит.

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

Начнем с интересного факта.

Термин «Python», относящийся к языку программирования, более популярен, чем известная звезда «Ким Кардашьян». Вы можете подтвердить этот факт, сравнив их в Google Trends.

Зачем изучать Python?

Первый вопрос, который, вероятно, приходит вам в голову: «Зачем именно изучать Python?» Что ж, ответ на этот вопрос довольно прост.Подумайте о факторах, которые вы хотели бы включить в язык программирования.

1. Обучаемость

Будет сложно? Нет! Не за что. Python является первым языком, выбранным во многих университетах, и даже дети в школе учатся программировать на Python. Язык Python был разработан для упрощения программирования с использованием синтаксиса, подобного английскому, он сокращает все низкоуровневые задачи и обеспечивает абстракцию высокого уровня для выполнения любых задач, которые вы хотите.

Единое руководство по всем темам Python, которые нельзя пропустить — Python Master Guide

2.Повышенная производительность

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

270+ учебных пособий по Python — получите все, что связано с Python, от базовых концепций до проектов в реальном времени

3.Высокие зарплаты

Изучение Python — лучшее вложение, которое вы можете сделать сегодня. Разработчики Python получают самую высокую зарплату, особенно в области веб-разработки, машинного обучения и науки о данных . Заработная плата может варьироваться от $ 70 000 до $ 1,50 000 в зависимости от местоположения и вашего опыта в отрасли. В ИТ-индустрии существует большой спрос на разработчиков Python, поэтому у вас не будет проблем с поиском вакансий на Python на рынке.

Еще один интересный факт — Python занимает 3-е место в индексе Tiobe, и он неоднократно был языком программирования года, включая 2018 год, и, согласно нашим прогнозам, он, вероятно, будет языком программирования года и в 2019 году. . Посмотрим, что в январе 2020 года.

Погрузитесь в удивительные карьерные возможности в Python

Приложения Python

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

1. Веб-разработка

Python — хороший выбор для быстрой разработки веб-приложений. Благодаря множеству фреймворков, таких как Django , Pyramid и Flask, Python позволяет создавать веб-приложения с большой скоростью. Python используется на стороне сервера веб-разработки, вы можете использовать Python для взаимодействия с базой данных и создания сервисов Rest API.

2. Наука о данных

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

  • Pandas (Анализ данных)
  • Numpy (Числовые и научные вычисления)
  • Matplotlib , Seaborn (визуализация данных)
  • Scikit-learn (машинное обучение)
  • Tensorflow , Keras (машинное и глубокое обучение)
3.Искусственный интеллект

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

  • NLTK — Набор инструментов естественного языка для обработки естественного языка
  • OpenCV — Библиотека компьютерного зрения с открытым исходным кодом
  • Керас — библиотека глубокого обучения
  • Набор когнитивных инструментов Microsoft — фреймворк для глубокого обучения
4. Автоматика

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

  • Каркас робота
  • PyTest
  • Селен Python
  • PyUnit

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

Как выучить Python?

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

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

Семь грехов, которые вы должны совершить:

Шаг 1. Усильте основы

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

Шаг 2. Изучите процесс принятия решений и управления

После знакомства с основами узнайте, как принимать решения на языке программирования. Существуют разные методы, такие как операторы if и else, которые позволяют принимать решения в соответствии с условием. Циклы также являются важной частью всех языков программирования. Вы можете легко выполнить повторяющуюся задачу, используя циклы, и изучить концепцию, реализуя различные типы циклов, такие как цикл For, цикл while и вложенные циклы.

Шаг 3. Освоение объектно-ориентированного программирования (упс)

Объектно-ориентированное программирование — это подход к решению всех проблем путем размышления о реальных объектах в виде объектов и классов . Чтобы стать лучшим программистом, нужно понимать концепции и принципы объектно-ориентированного программирования. К сожалению, полезны при создании крупномасштабных приложений, это помогает нам писать чистый код за счет повторного использования используемых компонентов. За ними также легко ухаживать.

Шаг 4: Практические программы

Практика — самый важный аспект программирования. Вы никогда не станете хорошим программистом, пока не потратите часы на решение различных типов задач. Еще раз хочу напомнить, что программировать не так сложно, как принято думать. Просто нужно время, чтобы найти подходы к решению разных задач. Так что не забывайте практиковаться!

Шаг 5. Создание веб-приложений с использованием фреймворков

В среде веб-разработки Python используется при программировании веб-приложений на стороне сервера.Мы используем HTML, CSS и JavaScript на лицевой стороне, чтобы определить внешний вид нашего веб-сайта вместе с переходами и анимацией. Это также называется внешним интерфейсом приложения. Внутренняя часть приложения включает обработку запросов из браузера или внешнего интерфейса, получение данных из базы данных и выполнение операций. Python управляет всеми этими задачами, связанными с сервером. Самым популярным фреймворком Python для веб-разработки является Django. Еще один популярный фреймворк — Flask .Эти фреймворки предлагают быструю разработку приложений. Таким образом, вы можете выбрать любой из них и создать небольшой проект, создав веб-приложение с базовыми операциями CRUD.

Шаг 6. Приобретите навыки машинного обучения и обработки данных

Мир науки о данных и машинного обучения сильно зависит от Python. Вы можете повысить свой профиль, получив навыки специалиста по данным или инженера по машинному обучению. Начните с введения по этим темам, типов алгоритмов машинного обучения , попрактикуйтесь в программировании, реализуя различные модели машинного обучения.Анализируйте данные с помощью библиотеки Pandas, выполняйте числовые вычисления с помощью библиотеки Numpy, создавайте модели машинного обучения с помощью scikit-learn и визуализируйте данные с помощью таких библиотек, как matplotlib или seaborn.

Шаг 7. Работа над проектами Python

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

Приготовьтесь к работе над проектами Python в реальном времени с исходным кодом:

  1. Обнаружение фейковых новостей Python Project
  2. Проект Python по обнаружению болезни Паркинсона
  3. Проект Python для распознавания эмоций речи
  4. Проект Python по классификации рака молочной железы
  5. Проект Python для определения возраста и пола
  6. Проект чат-бота на Python
  7. Обнаружение сонливости драйвера Python Project
  8. Проект Python для распознавания дорожных знаков
  9. Генератор подписей к изображениям Python Project

Сводка

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

Время готовиться к интервью с Top Python Interview Questions

Поделитесь своим мнением о том, зачем изучать статью о Python в разделе комментариев.Наши специалисты DataFlair будут рады вам помочь.

.

Почему программирование? Почему Python? Почему сейчас?

Программирование — недостающее звено в образовании. Это позволяет вам исследовать, играть, работать с другими и терпеть неудачи в безопасной среде. Каждый должен научиться программировать.

Программирование — недостающее звено в образовании

Цель современного образования — вырастить взрослого человека, способного решать сложные проблемы завтрашнего дня. Однако в школах нас учат запоминать и отрыгивать. Большинство студентов не подходят к исследовательскому, итеративному обучению решению проблем.Я хочу рассказать вам, почему программирование — лучший способ восполнить эти пробелы. Независимо от того, сколько вам лет, практика программирования для вас.

Есть четыре основных аспекта обучения, которые наиболее эффективны:

  1. Проблемно-ориентированный и индивидуальный
  2. Развлечения
  3. Сейф от отказа
  4. Задание группы

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

Идея такова: если у вас есть проблема или цель, которую нужно достичь, вы можете исследовать варианты и работать методом проб и ошибок в своем собственном темпе. В среде, где неудачи не только нормальны, но и ожидаемы, и в окружении других людей, сталкивающихся с аналогичными проблемами, вы не только сможете решить свою небольшую проблему, но и обретете достаточно уверенности для решения более серьезных проблем. Звучит немного идеалистично? Может быть, но это хорошая площадка для развития нематериальных навыков, таких как уверенность в себе и решение проблем.Столкнувшись с реальной проблемой (которая, скорее всего, не имеет ничего общего с программированием), у вас будет достаточно усилий, чтобы найти правильный ответ, на который вы хотите, чтобы ваша уверенность и настойчивость поддерживали вас.

Программирование — идеальная песочница. Вспомните свои 5-летние дни, когда вы играли в песочнице. Вы попали в другой мир, наполненный муравьями, дюнами, грузовиками и лопатами. Ничего не играло по правилам извне, и все, что вы делали в песочнице, не работает вне песочницы.Вы были тем, кто двигался от одного к другому, и единственное, что оставалось неизменным, — это ваши знания изнутри и снаружи. В случае с образовательной ареной программирование — это наша песочница. Проблемы, которые мы решаем внутри песочницы, не обязательно имеют отношение к внешнему миру, но они сами по себе интересны. Выяснение того, что вам нужно сильнее толкать грузовик, не относится к тротуару рядом с песочницей, но решение этого вопроса значительно улучшает нашу игру внутри песочницы.Цель решения этих проблем — не продвигать мир за пределы песочницы, а продвигать себя внутри песочницы. Поскольку после этого вы можете свободно перемещаться между песочницей и внешним миром, навыки, которые вы приобретаете внутри песочницы, можно сразу же применить для решения любых внешних проблем. В песочнице, когда вы узнаете о том, как разделить лучшую лопату с тремя другими детьми, вы тайно осваиваете навыки совместной работы в команде. Упражнения по программированию работают одинаково: вы изучаете процесс решения проблемы и берете с собой эти знания по решению проблем, когда заканчиваете.

Почему программирование — эффективное образование?

  1. Это проблемно-ориентированный и индивидуальный . По определению, каждая программа, которую вы пишете, решает проблему. Почему? Поскольку каждая программа выполняет задачу, проблема очень проста: «Я не могу выполнить эту задачу». Например, если я попросил вас записать все множители 10 на листе бумаги менее чем за 10 секунд, это ваша проблема. Может быть, это просто, но тогда я могу попросить вас сделать то же самое для номера 123456789 (все еще через 10 секунд).Еще не готовы решить эту проблему? Не волнуйтесь — существует множество более простых проблем, которые ждут вас! У вас есть лишний день на этой неделе? Не волнуйтесь — вы можете решить другую задачу! Вы можете работать в своем собственном темпе над решением небольших проблем.
  2. Это удовольствие . Удовлетворение от того, что ваш компьютер впервые выводит текст для вас, — это чистая радость — я все еще помню время, когда мой отец научил меня команде «echo» в командной строке DOS. Я думал, что я такой крутой.
  3. защищен от отказа . Упражнения по программированию не критичны; если вы испортите первые 100 раз, никто не умрет в результате вашей опечатки. Ни страшных засух, ни отчуждений от родственников, ни лесных пожаров. Просто возьмите то, что вы напортачили, и попробуйте снова.
  4. Это сообщество . Поскольку существует множество других, решающих проблемы программирования (на Python), вы всегда можете задать вопрос.

Python — это ответ

Когда вы начинаете изучать программирование, зачем начинать именно с Python? Несколько причин:

  1. Python является отраслевым стандартом.Если вы изучаете / осваиваете его и хотите работать инженером по программному обеспечению, это один шаг. У Google и YouTube есть разделы внутреннего программного обеспечения, написанные на Python.
  2. В Python существует большое сообщество разработчиков. Обмен, комментирование, просмотр чужого кода — это именно способ узнать больше. (См. Критерий образования № 4 сверху)
  3. Существует множество библиотек, написанных на Python для решения многих задач. Каждый день разрабатываются новые инструменты и библиотеки, так что вы можете автоматизировать любые задачи, которые только можете придумать на Python.Библиотека fuzzywuzzy реализует нечеткий поиск; пакет Youtube-dl позволяет загружать видео с YouTube; этот пакет показывает текст «Дзен Python» на экране; пр.
  4. Python читается как английский — если есть какой-либо язык, код которого вы можете посмотреть и просто прочитать, это Python. Например:
  для числа в диапазоне (-4, 5):
        если число> 0:
            печать ("положительный")
        еще:
            print ("негативный")  

Что делает эта программа? Он просматривает каждое число в диапазоне чисел от -4 до 5 (не включительно), затем проверяет, больше ли число или нет, печатая сообщение в соответствии с этим свойством.Смотри, англичанин!

Почему вам следует научиться программировать прямо сейчас

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

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

Хотите начать? Начните с Упражнения 1 или посетите нашу страницу ресурсов для учащихся, чтобы найти книги, курсы и онлайн-ресурсы Python, которые помогут вам в вашем путешествии.

Пожалуйста, включите JavaScript, чтобы просматривать комментарии от Disqus.

комментарии предоставлены

.

Pyzo — почему python

Python — это динамический
объектно-ориентированный язык программирования. Он разработан, чтобы было легко
программа и легко читается. Гвидо ван Россум начал разработку
Python в 1980 году. С годами Python приобрел популярность в
широкий спектр областей от веб-разработки, игр, использования в качестве скриптов
язык и, конечно же, наука и техника.

Python открыт

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

Python общего назначения

Python — это язык общего назначения, что означает, что многие вещи
стало легко. Примеры: обработка строк, чтение / запись файлов,
сокеты, веб-сайты (например, этот), базы данных, графический интерфейс. Вот почему он был принят
таким количеством людей и для такого широкого круга задач. Большой
сообщество пользователей очень активное и
известен как дружелюбный.

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

Python динамичен

Примечание. Строго говоря, Python является спецификацией языка и может быть
компилируется, а также интерпретируется. Pyzo основан на cPython, наиболее
обычная реализация Python, в которой используется интерпретатор, написанный на C.

Быть динамичным языком
означает, что новый код может быть выполнен во время
время выполнения без ограничений. Это невероятно полезно в науке и
инженерия или любая другая ситуация, в которой программист проектирует
сложный алгоритм. Это означает, что пользователю не нужно проходить
цикл компиляция-запуск-отладка каждый раз, когда он вносит изменения в код.
Вместо этого часть кода (например, часть алгоритма) может быть
неоднократно изменялись и выполнялись в одном интерпретаторе.Это результаты
в высоко интерактивной среде, что сокращает время разработки
цикл значительно (быстрое прототипирование). При использовании с большими наборами данных
(например, КТ или МРТ) их нужно только один раз загрузить в
интерпретатор, после которого пользователь может многократно изменять и выполнять
кусок кода.

Python легко читается

Python разработан таким образом, чтобы его было легко читать. Это важнее тебя
может подумать, потому что распространенная проблема с программным обеспечением заключается в
код читать сложнее, чем писать.Лучшая читаемость упрощает
делиться кодом или работать над программными проектами с другими людьми. Как
ваши алгоритмы становятся более сложными (как это часто бывает в науке)
здорово иметь возможность сосредоточиться на алгоритме без необходимости писать
сложный код для простых вещей: он помогает сохранить ваши алгоритмы как
как можно проще. Для образования ясно, что удобочитаемость имеет значение.

Python использует отступы для структурирования кода. Люди, которые
привыкшие к другому языку часто жалуются на отсутствие скобок.Но это одно из ключевых преимуществ Python! На языках, которые используют
фигурные скобки, люди также используют отступы, чтобы сделать его более читаемым для других
люди. Поэтому они используют фигурные скобки, чтобы сообщить программе, что они означают, и
отступ, чтобы рассказать другим людям, что они имеют в виду. Это дает место для
двусмысленность. В Python есть только один способ обозначить структуру:
способ, который легко читать как людям, так и компьютерам. Есть просто
одна вещь, на которую следует обратить внимание: никогда не смешивайте табуляции и пробелы. Правильный
IDE не позволит вам это сделать.

Python великолепен в самоанализе

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

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

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


.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *