Начинаем программировать на python

2.1.1. История создания¶

Разработка языка Python была начата в конце 1980-х годов сотрудником голландского института CWI (Центр математики и информатики, голл. Centrum Wiskunde & Informatica) Гвидо ван Россумом (англ. Guido van Rossum), на основе языка ABC (Рисунок 2.1.1). В феврале 1991 года Гвидо опубликовал исходный текст в группе новостей alt.sources.

Рисунок 2.1.1 — Гвидо ван Россум на конференции в 2006 г.

О создании Python Гвидо ван Россум написал в 1996 г.:

В настоящее время Гвидо работает в компании Dropbox, покинув в декабре 2012 года корпорацию Google (2005-2012). Имея статус «великодушного пожизненного диктатора» проекта — он продолжает наблюдать за процессом разработки Python, принимая окончательные решения, когда это необходимо (не менее 50% рабочего времени по договоренности с DropBox).

Появившись сравнительно поздно, Python создавался под влиянием множества языков программирования. Так, например, влияние оказали такие языки, как:

  • ABC: отступы для группировки операторов, высокоуровневые структуры данных;

  • Modula-3: пакеты, модули;

  • С, C++: некоторые синтаксические конструкции;

  • Smalltalk: ООП;

  • Java: обработка исключений и др.

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

Развитие языка происходит согласно четко регламентированному процессу создания, обсуждения, отбора и реализации документов (Python Enhancement Proposal) — предложений по развитию Python.

В 2008 году, после длительного тестирования, вышла первая версия Python 3000 (или Python 3.0, также используется сокращение Py3k). В Python 3000 устранены многие недостатки архитектуры с максимально возможным (но не полным) сохранением совместимости со старыми версиями Python. На сегодня поддерживаются обе ветви развития (Python 3.x и 2.x) (сравнение и рекомендации), однако получать новый функционал будет только версия 3 .

Ключевые вехи развития языка приведены в Таблице 2.1.1.

Таблица 2.1.1 — Основные вехи развития языка Python

Ветвь (дата выхода)

Актуальная версия (дата выхода) (могла устареть)

Python 0.9.0 (1991-02)

Python 0.9.0 (1991-02)

Python 2.x (2000-10-16)

Python 2.7.11 (2015-12-05)

Python 3.x (2008-12-03)

Python 3.4.5 (2016-06-27)

Python 3.5.2 (2016-06-27)

Python 3.6.1 (2017-03-21)

На Видео 2.1.1 и 2.1.2 автор языка рассказывает об истории создания и развития Python (англ.).

Видео 2.1.1 — Guido van Rossum: The Early Years of Python

macOS users

  • For Python 3.8, we provide one installer: 64-bit-only that works on macOS 10.9 (Mavericks) and later systems.
  • Please read the «Important Information» displayed during installation for information about SSL/TLS certificate validation and the running the «Install Certificates.command».
Version Operating System Description MD5 Sum File Size GPG
Gzipped source tarball Source release 41a5eaa15818cee7ea59e578564a2629 24493475 SIG
XZ compressed source tarball Source release 51b5bbf2ab447e66d15af4883db1c133 18271948 SIG
macOS 64-bit Intel installer Mac OS X for macOS 10.9 and later 2323c476134fafa8b462530019f34394 29843142 SIG
Windows embeddable package (32-bit) Windows 40830c33f775641ccfad5bf17ea3a893 7335613 SIG
Windows embeddable package (64-bit) Windows cff9e470ee6b57c63c16b8a93c586b28 8199294 SIG
Windows help file Windows 678cdc8e46b0b569ab9284be689be807 8592697 SIG
Windows installer (32-bit) Windows 1b5456a52e2017eec31c320f0222d359 27150976 SIG
Windows installer (64-bit) Windows Recommended f69d9c918a8ad06c71d7f0f26ccfee12 28233448 SIG

Условие if (если) и циклы

Условие if довольно простое, прямолинейное и делает именно то, что вы ожидаете и скорее всего о чем подумали:

a = 20

if a > 100:
	print("a greater than 100") # здесь условие - a больше 100
elif a >= 50:
	print("a is between 50 and 100") # условие - a между 500 и 100
else:
	print("a is less than 50") # условие - a меньше 50

print(a)

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

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

for x in any_collection:
    # Do something with x

Но они также могут быть использованы традиционным способом с начальным и конечным значениями и инкрементом (англ. — приращение):

for i in range(0, 100, 1)

Цикл выше начинается с нуля и считается до 99, увеличивая «i» на единицу с каждым шагом. Начальное значение и значение приращения являются необязательными. По умолчанию диапазон начинается с нуля и увеличивается на единицу. Python также позволяет использовать ключевое слово else в сочетании с циклом for:

for i in range(0,100,1):
	print(i)
else:
	print("Loop done!")

Код внутри блока else будет выполнен после завершения цикла.

Последней важной структурой является цикл while, который будет выполняться, пока выполняется определенное условие:

i = 0

while i < 100:
	print(i)
	i = i + 1
else:
	print("Loop done!")

Этот цикл while будет делать то же самое, что и цикл for выше. Два важных ключевых слова, которые можно использовать внутри циклов, это break и continue. Break выйдет из цикла, а continue пропустит код, следующий за ним, и начнет со следующей итерации цикла.

Что не стоит писать на Питоне

Несмотря на огромный потенциал, язык слабо подходит для ряда отраслей. Яркий пример – область микроконтроллеров . Отечественные «питонисты» убедительно демонстрировали возможности инструмента MicroPython, но реальный список микроконтроллеров, которые поддерживает «Питон» — практически нулевой.

Другая область – кросс-платформенные GUI приложения . У Python есть инструменты, которые позволяют писать такие программы:

  • PyQt;
  • WxPython;
  • Tkinter;
  • PyGTK.

На практике ни один инструмент не позволяет разработать полностью кросс-платформенное приложение. Постоянно встречаются несостыковки, ошибки и другие «подводные камни». Коммерческий Desktop – это еще одна сомнительная область для работы на «Питоне».

Отдельным особняком стоит разработка мобильных приложений . Реальной работы в области Mobile Development, которая требует знаний «Питона», на рынке не найти. Лучше изучать другие, более традиционные инструменты (пример – Java).

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

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

Сложные вычислительные процессы

Это та самая сфера, где Питон может потягаться в своих возможностях с FORTRAN или C++. Специальное расширение NumPy, написанное для математических расчётов, прекрасно функционирует с массивами, интерфейсами уравнений и другими данными. Как только расширение устанавливается на компьютер, Python без проблем проходит интеграцию с библиотеками формул.

Но NumPy предназначен не только для вычислений. Помимо своей основной задачи, с его помощью можно создавать анимированные элементы и прорисовывать объекты в среде 3D, производя при этом параллельные вычисления. Например, популярное дополнение ScientificPython может похвастаться собственными библиотеками, которые созданы для вычислительных процессов в сфере науки.

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

Дополнительные материалы

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

Книги

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

Далее вы сразу сможете применить полученные знания в 3 крупных проектах: шутер с динамической сложностью, обработка и визуализация большого объёма данных, и веб-приложение на Django, гарантирующее пользователям конфиденциальность.

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

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

В этой книге рассказывается о Python 3: функции, типы данных, операторы и принципы ООП. Также из неё вы узнаете о прикладных возможностях языка: регулярные выражения, популярные инструменты стандартной библиотеки и работа с файлами. Тут вы ознакомитесь с системой SQLite, узнаете о способах доступа к базам данных и методах получения информации из них.

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

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

Ответы на вопросы читателей

Насколько сложно выучить Python? Азы Питона изучаются достаточно просто. Чтобы стать экспертом и высококлассным специалистом потребуется практика и решение реальных задач. Быстро выучить можно, было бы желание.

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

Сколько времени потребуется на изучение Питона? Стандартных временных рамок не существует. Однако уже через 1-2 месяца при интенсивной самостоятельной работе с языком можно создавать простые парсеры, небольшие игры, автоматизаторы рутинных задач. А вообще, есть правило 10 тыс. часов – именно столько времени практики потребуется, чтобы посчитать себя специалистом хорошего уровня.

Есть ли слабые стороны у Питона? У любого языка программирования они имеются. Во-первых, скорость работы несколько ниже, чем у компилируемых языков (С++, Java), но ее обычно хватает. Во-вторых, работа с 3d-графикой ограничена. В-третьих, отсутствует проверка типа переменной в момент компиляции.

Какая зарплата у Python-разработчика начинающего уровня? В зависимости от региона она варьируется, но даже Junior-разработчик вполне может рассчитывать на 30-50 тыс. руб. в первые месяцы работы. По мере роста количества навыков лимиты повышаются в разы, а то и десятки раз.

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

Где можно посмотреть задачи для новичков, простые проекты? Чтобы попрактиковаться в навыках, необходимо решать разные задачи и сравнивать результаты с другими программистами. Для этого подойдут следующие ресурсы: https://www.codingame.com/, https://www.codewars.com/, https://www.hackerrank.com/. Здесь имеются задания для специалистов любого уровня.

This is the tenth and final regular maintenance release of Python 3.8

Note: The release you’re looking at is Python 3.8.10, a bugfix release for the legacy 3.8 series. Python 3.9 is now the latest feature release series of Python 3. Get the latest release of 3.9.x here.

According to the release calendar specified in PEP 569, Python 3.8.10 is the final regular maintenance release. Starting now, the 3.8 branch will only accept security fixes and releases of those will be made in source-only form until October 2024.

Compared to the 3.7 series, this last regular bugfix release is relatively dormant at 92 commits since 3.8.9. Version 3.7.8, the final regular bugfix release of Python 3.7, included 187 commits. But there’s a bunch of important updates here regardless, the biggest being Big Sur and Apple Silicon build support. This work would not have been possible without the effort of Ronald Oussoren, Ned Deily, Maxime Bélanger, and Lawrence D’Anna from Apple. Thank you!

Take a look at the change log for details.

And Now For Something Completely Different

trong>Mr. Praline (John Cleese): ‘ELLO POLLY!!! Testing! Testing! This is your nine o’clock alarm call!
(Takes parrot out of the cage , throws it up in the air and watches it plummet to the floor.)
Mr. Praline: Now that’s what I call a dead parrot.
Owner (Michael Palin): No, no… No, he’s stunned!
Mr. Praline: STUNNED?!
Owner: Yeah! You stunned him, just as he was wakin’ up! Norwegian Blues stun easily, major.
Mr. Praline: Um… now look, mate. I’ve definitely ‘ad enough of this. That parrot is definitely deceased, and when I purchased it not ‘alf an hour ago, you assured me that its total lack of movement was due to it bein’ tired and shagged out following a prolonged squawk.
Owner: Well, he’s… he’s, ah… probably pining for the fjords.

Version Operating System Description MD5 Sum File Size GPG
Gzipped source tarball Source release 83d71c304acab6c678e86e239b42fa7e 24720640 SIG
XZ compressed source tarball Source release d9eee4b20155553830a2025e4dcaa7b3 18433456 SIG
macOS 64-bit Intel installer Mac OS X for macOS 10.9 and later 690ddb1be403a7efb202e93f3a994a49 29896827 SIG
macOS 64-bit universal2 installer Mac OS X experimental, for macOS 11 Big Sur and later; recommended on Apple Silicon ae8a1ae082074b260381c058d0336d05 37300939 SIG
Windows embeddable package (32-bit) Windows 659adf421e90fba0f56a9631f79e70fb 7348969 SIG
Windows embeddable package (64-bit) Windows 3acb1d7d9bde5a79f840167b166bb633 8211403 SIG
Windows help file Windows a06af1ff933a13f6901a75e59247cf95 8597086 SIG
Windows installer (32-bit) Windows b355cfc84b681ace8908ae50908e8761 27204536 SIG
Windows installer (64-bit) Windows Recommended 62cf1a12a5276b0259e8761d4cf4fe42 28296784 SIG

Замыкание

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

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

Чтобы сделать ее каррированной, она должна быть переписана следующим образом:

Это же самое можно выразить при помощи лямбда-функций:

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

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

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

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

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

Отметим, что функции и сохраняют значение переменной . Эта переменная существовала только в среде , несмотря на то, что эти возвращенные функции абсолютно независимы от функции . Напомним еще раз: замыкание – это функция, которая имеет доступ к некоторым переменным за пределами своей собственной среды.

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

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

Такой подход позволяет создавать несколько счетчиков без применения глобальных переменных

Обратите внимание, что в этом примере использовано ключевое слово , которое объявляет, что переменная n не является локальной для вложенной функции fn. В приведенном ниже интерактивном сеансе показано, как это работает:

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

Списки, кортежи, множества и словари

Списки, кортежи, множества и словари – еще 4 типа данных в Питоне, включающие в себя несколько значений и являющиеся итерируемыми (перебираемыми, как строки).

Особенности показаны в таблице 3.

Список (list) Кортеж (tuple) Множество (set) Словарь (dict)
Изменяемый Неизменяемый Изменяемое Изменяемый
Значения могут дублироваться Значения могут дублироваться Значения не могут дублироваться Ключи не могут дублироваться
Доступ по индексу возможен Доступ по индексу возможен Доступ по индексу невозможен Есть доступ к ключам и значениям

Таблица 3 – Коллекции данных в Python

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

Рассмотрим часть функционала.

Результат работы скрипта:

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

На их основании также возможны срезы, доступ по индексу, нахождение максимума или минимума (если элементы представлены числами), поиск количества вхождений значений.

Результат работы скрипта:

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

Важно и то, что порядок объектов внутри множества не гарантирован, что исключает доступ по индексу

Результат работы скрипта:

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

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

Результат работы скрипта:

Таким образом, в зависимости от ситуации применяется тот или иной тип коллекций. Чаще всего это списки и словари.

Особенности «Пайтона»

Многие специалисты считают, что «Пайтон» действительно упрощает написание кода, а также увеличивает скорость разработки. Да, можно программировать проще и быстрее, но это стало возможным благодаря следующим особенностям:

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

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

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

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

a, b = b, a. Мы только что изменили значения переменных с помощью этой простейшей строки. Что было в а, стало в b и наоборот. Такой способ удобен и позволяет обменивать значения трех, пяти и более переменных;

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

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

циклу for. В «Пайтоне» довольно удобно работать со списками, массивами и иными контейнерами

Если надо перебрать все его элементы, то конструкция кодового блока выглядит следующим образом: “” (то есть перебор осуществляется с нуля до последнего элемента; индекс можно обозначить как -1). Когда необходимо, чтобы выполнилось некоторое число циклов, пишут “” (циклический блок станет выполняться со значениями у от 1 до 7);

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

Переменные в Python

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

Пример плохих или неверных наименований:

  • abswqw – не понятно, какой смысл у данной переменной;
  • 12Q – имена не могут начинаться с цифры;
  • myname – два слова, не отделенные нижним подчеркиванием;
  • nomer_telefona – не нужно транслита, следует использовать английские слова, чтобы ваш код понял программист из любой точки планеты.

Правильные переменные:

  • name – понятно и отражает суть;
  • birth_year – используем змеиную нотацию.

Реализуем простую задачу для новичков на Питоне, которая иногда встречается на собеседованиях!

Получим от пользователя следующие сведения: его имя и страну, в которой бы он хотел побывать. Выведем на печать сообщение: «Доброго дня, {ИМЯ}. {СТРАНА} – интересная страна!». А после этого продемонстрируем пользователю еще одну фразу: «Было приятно с вами поболтать, {ИМЯ}».

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

Чтобы передать в функцию print переменную вместе с текстом, удобно пользоваться так называемыми f-строками. Синтаксис следующий: print(f’Вы передали переменную {variable}’).

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

More resources

  • Online Documentation
  • PEP 596, 3.9 Release Schedule
  • Report bugs at https://bugs.python.org.
  • Help fund Python and its community.
Version Operating System Description MD5 Sum File Size GPG
Gzipped source tarball Source release cc8507b3799ed4d8baa7534cd8d5b35f 25411523 SIG
XZ compressed source tarball Source release 2a3dba5fc75b695c45cf1806156e1a97 18900304 SIG
macOS 64-bit Intel installer Mac OS X for macOS 10.9 and later 2b974bfd787f941fb8f80b5b8084e569 29866341 SIG
macOS 64-bit universal2 installer Mac OS X for macOS 10.9 and later, including macOS 11 Big Sur on Apple Silicon (experimental) 9aa68872b9582c6c71151d5dd4f5ebca 37648771 SIG
Windows embeddable package (32-bit) Windows b4bd8ec0891891158000c6844222014d 7580762 SIG
Windows embeddable package (64-bit) Windows 5c34eb7e79cfe8a92bf56b5168a459f4 8419530 SIG
Windows help file Windows aaacfe224768b5e4aa7583c12af68fb0 8859759 SIG
Windows installer (32-bit) Windows b790fdaff648f757bf0f233e4d05c053 27222976 SIG
Windows installer (64-bit) Windows Recommended ebc65aaa142b1d6de450ce241c50e61c 28323440 SIG
Добавить комментарий

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

Adblock
detector