Как изучить Python самостоятельно с нуля в 2023 году
Оглавление:
Что это такоеОбласти применения
Топ 3 направления разработчики
Рекомендации и советы для начинающих
Как установить: пошаговая инструкция
Синтаксис, операторы и библиотеки
Переменные, условия, массивы
Регулярные выражения и функции
Работа со строками
Решение задач с примерами
Python — (в русском языке также иногда используются названия «Пито́н» или прямая транскрипция «Па́йтон») — это многоцелевой язык программирования, который можно применять практически везде, где используются математические вычисления, данные или код, то есть он не ограничивается только веб-разработкой.
Характеристики языка:
-
Общего назначения.
-
Объектно-ориентированный.
-
Высокоуровневый.
-
Простой синтаксис.
-
Интерпретируемый.
-
Динамическая типизация (строгая).
-
Высокое потребление памяти.
-
Мультипарадигменный.
Поддерживает следующие виды программирования:
-
Императивное.
-
Процедурное.
-
Объектно-ориентированное.
-
Структурное.
-
Функциональное.
-
Метапрограммирование.
Преимущества Python
Язык широко используется как любителями, так и профессиональными разработчиками. Его самое большое преимущество — простота и упрощенный синтаксис (близкий к естественному языку). Все это облегчает изучение и чтение кода.
Еще одним большим преимуществом языка является то, что он ускоряет разработку благодаря наличию стандартных библиотек, содержащих обширный набор встроенных классов и функций. Эти библиотеки позволяют писать код быстрее и проще. Кроме того, разработчик может выполнять и тестировать код сразу после его написания.
Выполнение и тестирование кода не требует промежуточного процесса компиляции.
Наконец, этот язык более универсален по сравнению со многими другими языками. Он переносимый и кроссплатформенный, то есть программисты могут писать и выполнять его код на любой операционной системе, где установлен интерпретатор Python. Этот подход намного быстрее и удобнее, чем компилируемые языки, которые требуют изменения кода для каждой платформы.
Области применения Python
Поскольку язык универсален, он активно используется для широкого спектра приложений в различных отраслях. Некоторые из наиболее популярных: наука о данных, машинное обучение, финансовый анализ, веб-разработка, автоматизация и создание сценариев, тестирование, прототипирование программного обеспечения и многое другое.
Области разработки, в которых язык применяется наиболее широко
Топ 3 направления Python-разработчика: Data Science, машинное обучение, тестирование
Давайте рассмотрим самые популярные и востребованные области применения языка.
Data Science
Одним из самых популярных применений языка является наука о данных, когда специалисты по подготовке данных и аналитики используют язык программирования для манипулирования данными — для составления отчетов, предиктивного анализа и многого другого.
Самые популярные библиотеки для DS
Одной из причин, по которой Python предпочитают использовать в приложениях, связанных с наукой о данных, является его простой синтаксис и широкий выбор полезных библиотек сторонних разработчиков.
Машинное обучение
Машинное обучение (Machine Learning, ML) опирается на уникальные алгоритмы и предполагает возможность программных систем обучаться самостоятельно, постоянно обновляя и совершенствуя себя на основе входных данных.
Самые популярные библиотеки для ML-специалиста
Python помогает таким системам научиться решать новые задачи, генерируя выходные данные на основе предыдущих наборов данных. В итоге алгоритм постепенно становится более «умным».
Тестирование и прототипирование программного обеспечения
Python оптимизирует разработку программного обеспечения, особенно в таких специфических задачах, как контроль сборки, отслеживание ошибок и тестирование.
Самые популярные фреймворки для тестирования
Разработчики программного обеспечения могут использовать Python для автоматизации тестирования новых программных продуктов или функций.
Веб-разработка
Еще одна важная область применения языка Python — веб-разработка, где он используется для разработки бэкенда сайтов и приложений.
Топ-10 фреймворков для веб-разработки
Интерпретатор Python запускается сервером приложений, позволяя через API обрабатывать запросы с фронтенда и взаимодействовать с базами данных.
Автоматизация или создание сценариев
Python помогает автоматизировать рабочие процессы путем написания сценариев. Автоматизация позволяет находить ошибки в файлах, конвертировать их из одного формата в другой, удалять дубликаты данных и выполнять простые математические вычисления. Новички могут использовать Python для автоматизации простых задач типа загрузки онлайн-контента, отправки электронных писем через определенные промежутки времени или переименования файлов.
Финансовый анализ
Python используется и в финансовой нише— благодаря своим возможностям обработки данных и сторонним библиотекам, специально разработанным для финансового анализа.
Повседневные задачи
С Python работают не только профессионалы, с его помощью можно решать свои повседневные задачи. Помимо программистов и специалистов по анализу данных, Python могут задействовать журналисты, владельцы бизнеса, маркетологи социальных сетей, биржевые трейдеры и другие специалисты.
Например, Python можно использовать для отслеживания цен на фондовом рынке или сравнения динамики определенной криптовалюты, отправки напоминаний, обновления списков, переименования больших коллекций файлов, преобразования текстовых файлов в электронные таблицы, автоматического заполнения форм. Примеров применения можно найти массу!
Рекомендации для начинающего специалиста: как определиться с направлением и что делать дальше
Вообще определяться с направлением следует в тот момент, когда за вашими плечами уже есть какие-то проекты. Если вопрос трудоустройства ещё не стоит перед вами, то выбор конкретной специализации Python не имеет большого смысла. Ведь в процессе обучения вы можете понять, что выбранный курс совсем не ваш и придётся от него отказаться в пользу другого направления.
Если же вы на 100% уверены, что хотите стать питонистом, то ниже вы найдете полезные пошаговые инструкции.
Как стать разработчиком Python без опыта?
Вы можете стать разработчиком без опыта, но, как уже говорилось выше, единственный способ добиться этого — приобрести необходимые навыки и затем суметь продемонстрировать их работодателю.
Ищите подходящие варианты курсов для изучения языка, а затем начинайте кодить на этом языке. Чем раньше вы приступите к этому процессу, тем эффективнее будет ваше обучение.
Как получить работу без опыта работы
Вот пошаговая инструкция, как устроиться на работу питонисту:
-
Убедитесь, что вы знаете основы: программирование, библиотеки, фреймворки и ORM-библиотеки.
-
Работайте на фрилансе в качестве разработчика для создания портфолио.
-
Вносите вклад в проекты с открытым исходным кодом на GitHub.
-
Начните вести блог, документируя свои проекты и свое обучение языку.
-
Начало карьеры в качестве внештатного разработчика — еще один способ получить работу без опыта. Это позволит начать создавать портфолио и заводить контакты в отрасли, которые могут привести к получению работы.
Разработчики пользуются большим спросом — по данным опроса BrainStation 2022 Digital Skills Survey, примерно 32% разработчиков знакомы с этим языком. С другой стороны, стать питонистом проще, чем разработчиком на более сложных языках вроде Java или C++.
Еще один способ получить работу в студии или компании — регулярно вносить свой вклад в открытый исходный код. Вы можете найти чужие репозитории на GitHub и пытаться изменить связанные с ними проекты. Позже работодатель поймет, что вы командный игрок, который может принести пользу уже существуему проекту.
Наконец, вы можете завести блог, чтобы завоевать доверие и внимание работодателей. Вы можете написать о своем пути в качестве разработчика, например, о конкретных проектах над которыми вы работали или работаете в данным момент. Или, например, о том, какие материалы вы использовали для сбора информации. Это даст рекрутерам возможность быстро изучить ваш стиль кодирования.
Что нужно изучать
Теперь давайте подробнее рассмотрим некоторые из основных навыков, которые вам нужно будет развить, чтобы стать разработчиком на этом языке.
Само собой, вам потребуется хорошо освоить сам язык программирования. Это аксиома. Для начала вам придется изучить основные концепции языка, включая:
-
Основной синтаксис.
-
Семантика.
-
Примитивные типы данных.
-
Арифметические операторы.
-
Объектно-ориентированное программирование.
Язык Python был разработан именно для удобства чтения, он имеет существенное сходство с английским языком и в нем прямо прослеживается влияние математики. Так что знания в этих областях помогут вам в обучении.
Как установить Python в 2023 году: пошаговая инструкция
Как установить Python на ОС Windows? Ничего сложного здесь нет: вам нужно выполнить несколько элементарных шагов. Ниже мы рассмотрим процесс установки, который в итоге позволит получить доступ к языку из любой точки системы.
1. Откройте браузер. На официальном сайте https://www.python.org/ загрузите программу установки для Windows.
Скачайте установочный дистрибутив
2. Сделайте двойной клик по скаченному файлу. Установите программу для всех пользователей, для этого нажмите кнопку Install Now (у вашего аккаунта Windows должны быть права администратора). Также убедитесь в том, что отмечены два чекбокса внизу.
Нажмите на кнопку Install now («Установить сейчас»), чтобы начать процесс установки
Добавление программы в системную переменную PATH позволит использовать интерпретатор языка из любой части файловой системы.
Ждем пока установка будет завершена
3. После завершения установки отключите опцию ограничения длины пути.
Мы можем использовать более 260 символов в пути к файлу
4. Нажмите кнопку Close, чтобы завершить установку.
Запуск
Откройте командную строку и введите "python", затем нажмите Enter.
Такой вывод будет в том случае, если программу установлена корректно
Всё, теперь вы находитесь в интерактивном интерпретаторе, где можно вводить и исполнять код.
Синтаксис, операторы и библиотеки
В отличие от большинства других языков, для определения блоков кода в Python используются отступы (то есть пробелы и табуляции), а не специальные символы. И это лишь одно отличие.
Итак, давайте начнем изучать устройство языка с анализа синтаксиса, затем посмотрим операторы, и в конце — библиотеки.
Синтаксис. Ключевые слова
В версии языка 3.x задействовано 33 ключевых слова. Поскольку они имеют предопределенное значение, их нельзя использовать ни для каких других целей. Список ключевых слов можно получить с помощью команды:
help("keywords")
Вывод выглядит следующим образом:
Пример ключевых слов языка
Давайте разберем все ключевые слова:
-
False. Булево значение Ложь.
-
pass. Это нулевой оператор, который ничего не делает.
-
def. Используется для объявления функции или метода.
-
global. Доступ к глобальной переменной элементарен, как и к любой другой переменной, но чтобы изменить глобальную переменную, необходимо применить global.
-
continue. Это оператор потока управления, используемый для перехода к следующей итерации цикла. В отличие от break, оператор continue не завершает цикл.
-
or. Логический оператор, соединяющий два утверждения. Возвращает True, если хотя бы одно из утверждений истинно.
-
class. Используется для объявления класса.
-
from. Позволяет импортировать функции из модуля.
-
not. Еще один логический оператор, который возвращает False, если значение его операнда равно True и наоборот.
-
for. Это ключевое слово используется для создания цикла for.
-
break. Это оператор потока управления, используемый для выхода из цикла.
-
yield. Используется вместо return в генераторах.
-
nonlocal. Применяется для создания анонимных функций.
-
finally. Является необязательной частью конструкции try... except error. Инструкции, указанные в секции finally, выполняется всегда, независимо от того, возникла ли ошибка или нет.
-
assert. Оператор assert используется для отладки.
-
with. Оператор with используется для упрощения обработки исключений.
-
lambda. Лямбда-функция – это анонимная функция. Она может принимать любое количество аргументов, но состоит только из одного выражения.
-
except. Часть структуры обработки ошибок type... except. Указывает, что делать при возникновении исключения.
-
as. Оператор as переназначает возвращаемый объект на новый идентификатор. По сути, он создает псевдоним для объекта.
-
while. Применяется для старта цикла while, в котором итерации продолжаются до того момента, как проверяемое условие перестанет быть истинным.
-
is. Применяется для установления равенства между двумя переменными.
-
else. Условный оператор, который указывает на выполнение альтернативного действия, если проверяемое условие в операторе if равно False.
-
and. Логический оператор, который возвращает True, если оба операнда истинны.
-
try. Оператор try используется для создания конструкции try... except. Оператор try запускает на выполнение блок кода. В случае возникновения в этом коде ошибки управление передается в блок except.
-
in. Оператор in используется для проверки наличия элемента в итерируемом списке или кортеже.
-
elif. Сокращение от else if для проверки, выполняется ли какое-то другое условие, если условие в операторе if ложно.
-
True. Булево значение Истина.
-
return. Применяется для выхода из метода или функции и возврата какого-либо значения.
-
import. Позволяет импортировать модули.
-
del. Применяется для удаления объекта.
-
None. В языке не существует нулевого значения. None — это объект, который представляет отсутствие значения (пустой объект).
-
raise. Оператор raise используется для выявления ошибки. Эти ошибки видны в трассировке, и они отменяют выполнение программы, если не обработаны должным образом.
-
if. Оператор if используется для создания условного оператора. Если проверяемое условие равно True, то выполняется некоторое действие.
Комментарии
Широкое использование комментариев в исходном коде программы считается хорошей привычкой.
Пример комментария
Комментарий — это некоторое описание или пояснительный текст в программе.
Описательный текст игнорируется интерпретатором языка. Однако он чрезвычайно полезен для разработчика, чтобы понять или вспомнить логику, синтаксис.
Идентификатор (Identifier):
Идентификатор, то есть имя объекта, может начинаться либо с буквы латинского алфавита (в нижнем или верхнем регистре), либо с символа подчеркивания (_). После первого символа может следовать более одного буквенно-цифрового символа или знака подчеркивания.
В программе могут быть: ключевые слова, пакеты, переменные, модули, классы, функции.
Отступы (Indents):
Несколько выражений обычно группируются вместе для определения функции, класса или цикла. При этом для группировки используются равные отступы.
Пример отступов
Для обозначения соответствующей группы или соответствующего блока применяются идентичные отступы. Как правило, блок открывается знаком двоеточия (:).
Инструкции (Statements):
Любой текст, завершаемый клавишей Enter (символ новой строки), распознается интерпретатором как инструкция (оператор). Следовательно, каждая строка в ячейке ввода является инструкцией. Иногда инструкция может занимать несколько строк.
Пример заявления
Если инструкция занимает несколько строк — используйте обратный слэш (\) в качестве символа продолжения.
Основные операторы
Операторы — невероятно большая тема, подробный разбор которой займёт много часов. В рамках этой обзорной статьи мы не можем разобрать действие каждого оператора с примерами, поэтому разберём только самое главное.
Арифметические операторы
Арифметические операторы используются для выполнения математических операций, таких как сложение, вычитание, умножение.
Вот пример использования арифметического оператора:
sub = 10 - 5 # 5
Здесь - является арифметическим оператор для вычитания двух значений или переменных.
Пример арифметических операторов
a = 7
b = 2
# addition
print ('Sum: ', a + b)
# subtraction
print ('Subtraction: ', a - b)
# multiplication
print ('Multiplication: ', a * b)
# division
print ('Division: ', a / b)
# modulo
print ('Modulo: ', a % b)
# a to the power b
print ('Power: ', a ** b)
Смотрим далее результат:
Sum: 9
Subtraction: 5
Multiplication: 14
Division: 3.5
Modulo: 1
Power: 49
Следующие примеры операторов рассмотрим кратко, так как подробный анализ займет слишком много времени.
Операторы присваивания
Операторы присваивания используются для присвоения значений переменным. Например,
# assign 5 to x
x = 5
В вышеуказанном примере оператор = является оператором присваивания (он сохраняет в переменной x число 5).
Вот список различных операторов присваивания, доступных в языке:
Примеры разных операторов присваивания
Пример использования различных вариантов оператора присваивания вы можете увидеть ниже:
# assign 10 to a
a = 10
# assign 5 to b
b = 5
# assign the sum of a and b to a
a += b # a = a + b
print(a)
# Output: 15
Здесь мы использовали оператор += для присвоения суммы a и b переменной a.
Аналогично, мы можем использовать любые другие операторы присваивания в зависимости от необходимости.
Операторы сравнения
Операторы сравнения используется для сравнения значения или переменных и возвращают булевы значения: True или False. Например,
a = 5
b =2
print (a > b) # True
Здесь используется оператор сравнения >, чтобы сравнить, больше ли a, чем b или нет.
Пример операторов сравнения
Логические операторы
Логические операторы используются для установление истинности или ложности выражения. Например, взгляните на пример ниже:
a = 5
b = 6
print((a > 2) and (b >= 6)) # True
Здесь and — это логический оператор "И". Поскольку оба выражения a > 2 и b >= 6 равны True, результат будет True.
Примеры логических операторов
Побитовые операторы. Они действуют на операнды как на строки двоичных цифр.
Эти операторы функционируют побитно, поэтому имеют соответствующее название.
Допустим: в двоичном формате 7 = равно 111, а 2 = 10.
Пример побитовых операторов
Специальные операторы
В языке также предусмотрены специальные операторы для установления тождества и принадлежности.
Операторы тождества
Операторы is и not применяются для проверки того, что значения двух операндов располагаются в одной части памяти.
Пример операторов тождества
Операторы членства
Операторы in и not in называются операторами принадлежности. Они используются для проверки присутствия значения в строке, списке, кортеже, наборе и словаре.
В словарях проверяется только присутствие ключа, но не само значение.
Пример операторов членства
Установка библиотек
По сути, библиотека — это набор полезных методов, классов и модулей, которые код приложения может использовать для выполнения определенных задач, без написания функциональных возможностей с нуля.
Matplotlib, Pandas, Numpy, SQLAlchemy, BeautifulSoup — примеры известных библиотек для языка Python.
Библиотеки часто имеют узкую область применения (например, Strings, Input / Output и Sockets). Вот почему API меньше и требуют меньше зависимостей. Это не более чем список определений классов. Теперь вопрос, который должен возникнуть у каждого — зачем нам нужны библиотеки?
В жизни программиста библиотеки играют роль автопилота, поскольку они позволяют разработчику не изобретать снова и снова колесо, а вместо этого сосредоточиться на реальной проблеме.
Программа использует библиотеки, чтобы уменьшить объем собственного кода, так как эти библиотеки представляют собой многократно используемые фрагменты кода.
В Python существует очень маленькая разница между пакетом и библиотекой, поскольку пакет содержит коллекцию модулей, которые можно установить с помощью менеджера пакетов, а библиотеки содержат набор функций языка.
Существует библиотеки для конкретных отраслей разработки (веб, ML, Data Science и так далее).
В каких случаях используются библиотеки
Каждый раз, когда нужно использовать какую-либо уже известную функциональность, вы просто вставляете шаблон кода (открываете файл, вставляете собственные данные и вуаля — получаете готовый результат)
Как установить библиотеку
В качестве первого шага необходимо убедиться, что у вас установлен рабочий интерпретатор с менеджером пакетов pip. Это можно сделать, указав команды, которые мы дадим ниже и убедившись, что результат выглядит аналогично.
На Windows нужно выполнить такую команду:
C:> py --version
Python$ python --version
Python 3.N.N
$ python -m pip --version
pip X.Y.Z from ... (python 3.N.N)
На Linux и MacOS нужно выполнить такую команду:
$ python --version
Python 3.N.N
$ python -m pip --version
pip X.Y.Z from ... (python 3.N.N)
Если это сработало, поздравляем! У вас уже присутствует рабочий pip. Если же вы получили результат, не похожий на приведенный выше пример, пожалуйста, прочитайте страницу.
По умолчанию pip копирует библиотеки из так называемого PPI (Python Package Index) — это такой индекс (хранилище), где по умолчанию находятся все библиотеки для Python.
Для инсталляции библиотеки на Windows:
C:> py -m pip install sampleproject
[...]
Successfully installed sampleproject
Для инсталляции библиотеки на Linux и MacOS:
$ python -m pip install sampleproject
[...]
Successfully installed sampleproject
Как установить библиотеку из GitHub
Установить библиотеку можно и в том случае, если она находится на GitHub. Посмотрим, как это сделать.
Для инсталляции библиотеки из GitHub на Windows, укажите такую команду:
C:> py -m pip install git+https://github.com/pypa/sampleproject.git@main
[...]
Successfully installed sampleproject
Для инсталляции библиотеки из GitHub на Linux и MacOS, укажите такую команду:
$ python -m pip install git+https://github.com/pypa/sampleproject.git@main
[...]
Successfully installed sampleproject
Как установить библиотеку из дистрибутива
Pip также может устанавливать библиотеки непосредственно из дистрибутивных файлов.
Для инсталляции библиотеки из дистрибутива на Linux и MacOS, укажите такую команду:
$ python -m pip install sampleproject-1.0.tar.gz
[...]
Successfully installed sampleproject
$ python -m pip install sampleproject-1.0-py3-none-any.whl
[...]
Successfully installed sampleproject
Для инсталляции библиотеки из дистрибутива на Windows, укажите такую команду:
C:> py -m pip install sampleproject-1.0.tar.gz
[...]
Successfully installed sampleproject
C:> py -m pip install sampleproject-1.0-py3-none-any.whl
[...]
Successfully installed sampleproject
Библиотеки
Существует множество библиотек для Python, которые можно использовать для различных приложений (наука о данных, глубокое обучение, обработка изображений, машинное обучение и обработка естественного языка NLP).
Как язык программирования с открытым исходным кодом, Python имеет широкий спектр библиотек, которые здорово упрощают жизнь как начинающих, так и опытных разработчиков. Для разных проектов потребуются разные библиотеки, но уже изначально неплохо ознакомиться с самыми распространенными, включая Pandas и NumPy.
Python Package Index (PyPI) — это репозиторий программного обеспечения для языка.
Удобный поиск проектов доступен на сайте каталога (pypi.org)
О том, как установить библиотеки как работать с ними — мы расскажем чуть ниже. А пока — пару слов о фреймворках.
Фреймворки
Чтобы стать разработчиком на Python, вам в любом случае потребуется знание фреймворков для этого языка. Но конкретные фреймворки, с которыми вы будете работать, зависят от специфики выбранного направления и самого проекта. Самые востребованные фреймворки:
-
Django
-
Flask
-
CherryPy
Большинство фреймворков для Python — исключительно серверные технологии, хотя некоторые веб-фреймворки включают, например, код AJAX, который помогает разработчикам справиться с трудной задачей программирования на стороне клиента.
ORM
Разработчикам также очень полезно уметь работать с библиотеками Object Relational Mapping (ORM), такими как SQLAlchemy или Django ORM. Эти библиотеки помогают преобразовать данные между несовместимыми системами.
ORM связывает БД с концепциями объектно-ориентированных языков программирования
ORM обеспечивает высокоуровневую абстракцию реляционной базы данных, позволяя разработчикам писать код для создания, обновления, чтения и удаления данных в БД напрямую на языке (вместо SQL).
Переменные, условия, массивы, циклы
Начнем с разбора разных типов переменных в языке.
Переменные
Переменные могут хранить не только числа, но и содержать другие типы информации. Тип переменной зависит от типа данных, которые она хранит. Давайте рассмотрим различные типы переменных:
-
Integer (int): целые числа, такие как -5, 0, 15. Пример: num_lives = 4
-
Float: число с десятичной дробью, например 23.54, -0.21, 44.2543. Пример: cost = 60.25
-
String: текст — обратите внимание, что строки всегда окружаются кавычками. Пример: name = "New Dawn".
-
Булево значение: либо истина, либо ложь. Пример: is_pumpkin = True.
Вы создаете переменную, выбирая имя для контейнера и присваивая ему начальное (стартовое) значение.
Например, у нас есть игра. И переменная, хранящая количество жизней игрока, может выглядеть следующим образом:
num_lives = 7
Допустим, игрок теряет жизнь и теперь у него 2 жизни. Мы изменяем значение переменной, присваивая ей другое значение:
num_lives = 3
При присвоении нового значения существующей переменной важно, чтобы название переменной было идентичным. Например, num_Lives = 3 создаст совершенно новую переменную из-за заглавной буквы L.
При нейминге переменных следуйте правилам:
-
Без пробелов.
-
Начинается с буквы или символа подчеркивания ( _ ).
-
Все буквы строчные.
-
Если имя составлено из нескольких слов, используйте знак подчеркивания (_) между словами.
Условия
Условие if - else
If - else — это условная инструкция. Вы можете представить ее как развилку железнодорожных путей. В зависимости от того, в какую сторону установлен переключатель на рельсах, поезд поедет по одному из двух путей.
Язык Python — интерпретируемый, то есть интерпретатор читает строки исходного кода сверху вниз. В простейшем случае это приводит к строго линейному потоку — строки кода читаются, интерпретируются и выполняются одна за другой. Однако, этот простой случай не позволяет создавать более сложные программы. Для достижения уровня вариативности, необходимого для реального программирования, нужны другие управляющие структуры. К таким мы и отнесем условия if - else.
Операторы ветвления и принятия решений позволяют выполнять некоторые блоки кода только при выполнении определенных условий.
Циклы for и while позволяют выполнять повторения.
Операторы if - else работают так же, как и в других языках. Однако, есть несколько важных отличий. Давайте взглянем на них ниже.
Общий синтаксис операторов if - else может быть выражен непосредственно в коде. Сперва мы определяем условие, а затем — указываем функцию, которая будет выполняться, если условие выполняется. Затем, в блоке else, мы указываем код, который должен быть выполнен, если условие не выполняется.
Представить вышесказанное можно следующим образом:
if condition:
if_body()
else:
else_body()
Обратите внимание: условие может быть либо истинным, либо — ложным. Мы можем сделать эту схему более понятной, непосредственно введя True или False в качестве условий. Это приведет к потоку, в котором будет выполняться только один из двух возможных путей.
Вот пример использования для ложного условия:
if False:
# этот код не будет выполнен
if_body()
else:
else_body()
Теперь для истинного условия:
if True:
if_body()
else:
# этот код не будет выполнен
else_body()
Конечно, этот шаблон не является реальным. Мы включили его только для того, чтобы проиллюстрировать, как работают операторы if - else. В реальных же приложениях — вы будете для условия использовать выражение, а не статическое значение True или False.
Выражение будет оцениваться во время выполнения программы, в результате чего будет получено значение истинности.
В зависимости от того, истинно это значение или ложно, программа будет разветвляться в одном или другом направлении.
Важно понимать, что часть else является необязательной. Код в теле else выполняется только в том случае, если условие в операторе if не выполняется, а иногда тело else вообще не нужно.
Вывод с условием
Вывод с условием — это утверждения, которые являются истинными или ложными. В языке существует множество различных способов написания выводов с условием, наиболее распространенные способы — просто сравнивают два различных значения. Например, вы можете проверить, больше ли 2, чем 3.
print(2 > 3)
False
Язык определяет вышеуказанный пример как False, поскольку 2 не больше 3.
Условия также можно использовать для сравнения значений переменных.
Взглянем на следующий пример:
var_one = 1
var_two = 2
print(var_one < 1)
print(var_two >= var_one)
False
True
Var_one имеет значение 1, а var_two — значение 2. В условиях мы проверяем, что var_one меньше 1 (результат False), и проверяем, что var_two больше или равно var_one (результат True).
Общие символы
Список общих символов, которые вы можете использовать для построения условий, приведен ниже.
-
== равно
-
!= не равно
-
< меньше чем
-
<= меньше или равно
-
> больше чем
-
>= больше или равно
Важное замечание: когда вы проверяете равенство двух значений, убедитесь, что вы используете знак ==, а не знак =:
-
var_one==1 проверяет, равно ли значение var_one 1, но
-
var_one=1 устанавливает значение var_one равным 1.
Условные операторы
Они используют условия для изменения выполнения функции. Условные операторы проверяют значение условия, и если условие оценивается как True — выполняется определенный блок кода. Если же условие равно False — код не выполняется.
Массивы
Понятия массива и списка в этом языке не равнозначны. Массив может быть списком, все элементы которого имеют один и тот же тип. Элементы списка могут иметь разный тип.
Взгляните на этот пример:
simple.py
#!/usr/bin/python
# simple.py
nums = [1, 2, 3, 4, 5]
print(nums[0])
print(nums[-1])
print(nums)
Изменяемый контейнер означает, что всегда можно добавить значения, удалять такие значения или изменять уже установленные значения.
Чтобы создать список нужно использовать соответствующий элемент:
names = ["Sergei", "Denis", "Alexei"]
Обратите внимание: элементы находятся внутри квадратных скобок и отделяются запятыми.
Циклы
Итерируемый компонент — любой объект, по которому можно выполнять итерации, или «циклы», и возвращать по одному элементу за раз.
-
Списки, например, являются итерируемыми и возвращают по одному элементу списка за раз, в порядке перечисления элементов.
-
Строки являются итерируемыми и возвращают по одному символу за раз, в порядке появления символов.
For
Циклы for применяются для так называемого перебора (примеры подходящих итерируемых компонентов: набор, список, кортеж). Таким образом, происходит выполнение одного и того же действия для каждого элемента.
Вы создаете цикл for, сначала определяя итерируемый объект, который вы хотите перебрать, а затем — определяя действия, которые вы нужно выполнить над каждым элементом в этом итерируемом объекте. Например, при итерации по списку сперва определяется список, по которому требуется выполнить итерацию, а затем — указывается конкретное действие, которое нужно выполнить над каждым элементом списка.
Давайте рассмотрим небольшой пример: если бы у нас был список имен, мы могли бы использовать цикл for для итерации по этому списку, печатая каждое имя, пока не достигнем конца списка. Ниже мы создадим наш список имен, а затем напишем цикл for, который будет итерировать его, последовательно печатая каждый элемент списка.
our_list = ['Sergei', 'Denis', 'Alexei', 'Tatiana']
for name in our_list:
print(name)
Код в этом простом цикле вызывает вопрос: откуда взялось имя переменной? Мы не определяли ее ранее в нашем коде! Но поскольку циклы for последовательно перебирают списки, кортежи и так далее, эту переменную можно назвать как угодно. Язык будет интерпретировать любое имя переменной, которое мы поместим в это место, как ссылку на каждый элемент списка по порядку по мере выполнения цикла.
While
Цикл while позволяет повторять выполнение одной или нескольких строк кода до тех пор, пока не изменится булево значение проверяемого условия. Блок кода внутри цикла while будет выполняться до тех пор, пока булево значения в условии цикла while будет равно True.
Цикл while имеет следующий синтаксис:
while :
statements
— это одна или несколько строк кода, они должны быть отделены четырьмя пробелами. Утверждения повторяются до тех пор, пока выражение не изменится.
-
Выражение
expr
оценивается в булевом контексте. -
Если выражение
expr
равно True — выполняется тело цикла. Пока оно остается True, цикл повторяется. -
Если выражение
expr
становится равным False — цикл завершается.
Теперь взглянем на простейшую программу с циклом while:
i = 1
while i < 7:
print(f"i = {i}")
i = i + 1
Вот что происходит:
выражение expr
равно i < 7, код ниже повторяется, пока True. В нем есть два оператора.
-
1-й оператор print(f "i = {i}") выводит текущее значение переменной i.
-
2-й оператор i = i + 1 увеличивает значение i на единицу.
-
цикл while прекращается, когда
expr
становится False: i >= 7.
Почему же 7 не включено? Ответ: если i равно 7, то условие i < 7 является ложным. Чтобы включить 7, измените логический оператор на <=.
А еще с помощью цикла while можно сделать таймер обратного отсчета. Например, представить его вот таким образом:
i = 10
while i > 1:
print(i)
i = i - 1
Цикл будет повторяться до тех пор, пока переменная i не станет равной единице.
Регулярные выражения и функции
Регулярные выражения (сокращенно они называются regex) — это текстовые шаблоны, которые можно использовать для автоматизации поиска и замены элементов в строках текста, либо иных задач.
Regex значительно упрощают очистку и работу с тестовыми наборами данных, избавляя от необходимости перебирать горы текста вручную.
Давайте посмотрим подробнее, что «умеют» регулярные выражения.
Возможности регулярных выражений
Вот примеры конкретных задач, которые вы можете решить при помощи регулярных выражений:
-
Быстрое выполнение стандартных операций.
-
Определение формата имейл-адреса.
-
Определение формата номера телефона.
-
Поиск символов.
-
Извлечение символов.
-
Замена символов.
-
Деление строку на более мелкие части.
Примеры поиска данных с помощью регулярных выражений
Регулярные выражения (напомним, они называются regex) обеспечивают быстрый и функциональный метод поиска, а также извлечения данных. Кроме того, при помощи regex можно производить замену определенных данных в документах.
^ |
Начинать с начала строки или с начала линии. |
\s{1,3} | Поиск участка, который встречается от 1 до 3 раз. |
[A-Z0-9]* | Поиск рандомного символа символ в диапазоне A-Z и 0-9, "*" — это указание найти как можно больше вхождений. |
XYZ | Поиск все символы "XYZ" |
А теперь — посмотрим на простой-простой regex:
v^\s{1,3}[A-Z0-9]XYZ
-
Если бы в примере выше строка начиналась со значения "AZR8987XYZ" — мы бы получили совпадение.
-
А если в примере было значение "AZR898XY" — совпадения не было.
Регулярные выражения очень гибкие. Благодаря ним шаблоны могут быть построены таким образом, чтобы соответствовать практически любым форматам данных. Для текста — это дата / время, индексы, артикулы.
Номер банковской карты:
(^(4|5)\d{3}-?\d{4}-?\d{4}-?\d{4}|(4|5)\d{15})|(^(6011)-?\d{4}-?\d{4}-?\d{4}|(6011)-?\d{12})|(^((3\d{3}))-\d{6}-\d{5}|^((3\d{14})))
Индекс или ZIP-код:
^(?!00000)(?(?\d{5})(?:[ -](?=\d))((?\d{4})?)$
Номер телефона (американский формат):
^([0-9]( |-)?)?(\(?[0-9]{3}\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4}|[a-zA-Z0-9]{7})$.
Работа с файлом
Сначала подготовим набор данных, открыв текстовый файл в режиме «только для чтения» и прочитав его. Дескриптор открытого файла сохраним в переменной fh:
fh = open(r"test_emails.txt", "r").read()
Обратите внимание: путь к каталогу предваряется символом r. Этот метод преобразует строку в необработанную, чтобы избежать конфликтов, вызванных тем, как некоторые машины читают символы (например, обратные слеши в путях к каталогам в Windows).
Теперь предположим, что мы хотим узнать, от кого приходят письма. Мы можем попробовать проверить наличие слова "From:" в строках файла:
for line in fh.split("n"):
if "From:" in line:
print(line)
Вот, что мы при этом получим:
Но этот вариант нас не устроит по понятной причине. Чтобы решить эту проблему — можно задействовать модуль re Python. А регулярные выражения нам в этом помогут.
Начнем с импорта модуля re в Python, затем — воспользуемся функцией re.findall(), которая возвращает список всех экземпляров заданного нами шаблона в рассматриваемой строке.
Представить вышеуказанные действия имен, например, вот так:
import re
for line in re.findall("From:.*", fh):
print(line)
Длина идентична. Всё корректно! И чем больше проблем вы хотите решить, тем больше времени regex сэкономит.
Важно: функция с именем re.findall() изначально учитывает 2 аргумента — re.findall(pattern, string). Здесь наш знакомый паттерн представляет собой подстроку, которую мы хотим найти, а string — основную строку, в которой мы хотим ее найти. Основная же строка может состоять из нескольких строк. В данном случае мы хотим, чтобы она искала во всех строках.
Символ .* — это сокращение для шаблона строки. Регулярные выражения работают, используя эти сокращенные шаблоны для поиска конкретных деталей в тексте.
Паттерны
Шаблон, который мы использовали в re.findall() выше, содержит полностью прописанную строку "From:". Это полезно, когда мы точно знаем, что ищем, вплоть до букв и того, в верхнем или нижнем регистре они написаны. Но если точный формат строк неизвестен, быстро возникают проблемы. К счастью, в regex есть базовые шаблоны, которые учитывают этот сценарий.
Давайте рассмотрим те, которые используются наиболее часто:
-
w — обычные алфавитно-цифровые символы a-z, A-Z и 0-9. Также этому шаблону соответствует подчеркивание, _, и тире, -.
-
d — соответствует цифрам, то есть 0-9.
-
s — соответствует пробельным символам, к которым относятся символы табуляции, новой строки, возврата каретки и пробела.
-
S — соответствует символам, не являющимся пробельными.
-
. — соответствует любому знаку, но без учета символа новой строки.
Функции
Вы наверняка уже сталкивались с десятками предопределенных функций (например, print(), filter(), map(). Так вот, язык также предоставляет возможность создавать свои собственные (пользовательские) функции. Чаще всего, их называют пользовательскими или предопределенными.
Как создать функцию? Всё просто: мы можем определить функции при помощи ключевого слова def, как показано ниже
def function_name():
#Любое, какое захочется, название.
Например, вот так:
def hello():
print("Добро пожаловать в Россию!")
Мы можем вызвать эту функцию позже в любой части кода, как показано ниже.
1 #Function Definition
2 def hello():
3 print("Welcome to Russia!")
4
5 #Function call
6 hello() #prints Добро пожаловать в Россию!
7
Но бывают случаи, когда нужно изменить логику кода в зависимости от входных данных. Для таких случаев при определении функции мы можем указать ее параметры (аргументы), а во время вызова функции передать в нее соответствующие переменные или значения.
Вот как мы определяем функции с аргументами:
def function_name(arg1, arg2):
#Всё, что угодно, что нужно сделать с arg1 и arg2
Язык поддерживает два типа аргументов. Позиционные — это обязательные аргументы, которые необходимо передать во время вызова функции. Аргументы с ключевым словом (именованные аргументы) — это аргументы со значением по умолчанию, которое будет применено в том случае, если такой аргумент не будет задействован во время вызова.
Вот что вам нужно запомнить:
-
Позиционные аргументы — могут быть переданы с указанием их непосредственных позиций.
-
Аргументы с ключевым словом передаются с помощью имен аргументов.
И конечно, функция (как и любой другой компонентный объект) может быть связана с переменной, каким-то элементом в контейнере или конкретным атрибутом объекта.
Функции также могут быть ключами в словаре.
Допустим: вам нужно быстро найти обратную функцию, заданную какой-то первоначальной функцией. Для этого нужно определить словарь, ключами и значениями которого являются такие функции, а затем — сделать словарь двунаправленным
inverse = {sin:asin, cos:acos, tan:atan, log:exp}
for f in inverse.keys( ): inverse[inverse[f]] = f
Работа со строками
Формирование строк с переменными
Создать строку из переменной можно несколькими способами.
Вариант 1 — формат строки
Вы можете использовать метод строки format для создания новых строк со вставленными значениями. Этот метод работает во всех версиях языка. Взгляните на пример ниже:
>>> shepherd = "Denis"
>>> string_in_string = "Shepherd {} is on duty.".format(shepherd)
>>> print(string_in_string)
Shepherd Denis is on duty.
Фигурные скобки показывают, куда должно быть вставлено значение. Здесь мы вставляем одну строку в другую строку.
Значения не обязательно должны быть строками — это могут быть числа и другие объекты.
Важно: вы можете вставить более одного значения
Теперь посмотрим на пример, когда вставляется более одного значения:
>>> shepherd = "Denis"
>>> age = 21
>>> stuff_in_string = "Shepherd {} is {} years old.".format(shepherd, age)
>>> print(stuff_in_string)
Shepherd Denis is 21 years old.
Вы можете выполнять более сложное форматирование чисел и строк, используя параметры форматирования внутри фигурных скобок.
Вариант 2 — f-строки (для версий >= 3.6)
Если у вас язык версии выше 3.6, то есть еще один привлекательный вариант — использовать новый синтаксис форматированного строкового литерала (так называемые f-строки). F-строки используются специально для вставки значений переменных.
Символ f в начале строки указывает на то, что в качестве имен переменных в строке можно использовать любые допустимые в данный момент имена переменных. Например, вот пример, подобный приведенному выше, с использованием синтаксиса f-строки:
>>> shepherd = "Denis"
>>> age = 21
>>> # Note f before first quote of string
>>> stuff_in_string = f"Shepherd {shepherd} is {age} years old."
>>> print(stuff_in_string)
Shepherd Denis is 21 years old.
Вариант 3 — «старая школа»
Существует еще один метод форматирования строк — с помощью оператора %. Он немного менее гибкий, чем два вышеописанных варианта.
Вот пример формирования строки из переменных с использованием форматирования %. Обратите внимание: присутствует маркер %s — для вставки строки и маркер %d, который применен для вставки целого числа.
>>> stuff_in_string = "Shepherd %s is %d years old." % (shepherd, age)
>>> print(stuff_in_string)
Shepherd Denis is 21 years old.
В этом простом примере хорошо видно, как используется оператор %.
Форматируя строку с помощью оператора %, вы показываете, куда должны быть вставлены значения, используя символ %, за которым следует спецификатор формата, указывающий, как именно должно быть вставлено значение.
Запомнить
В языке строка формируется путем создания переменной — в ней мы и будем сохранять нашу строку.
Строка — набор символов, собранных в слова или какие-то другие комбинации.
Например, мы создадим переменную bird — это будет переменная, в которой мы будем хранить нашу строку. Строки обычно создаются с помощью одинарных кавычек:
1 bird = 'Nachtigall'
2
3 print(type(bird))
4
Также можно использовать двойные кавычки. НО: нельзя смешивать двойные и одинарные кавычки в одной строке. Это приведет к ошибке:
1 animal = "elephant"
2 print(type(animal))
3
Тройные кавычки также можно использовать для создания строк. Тройные кавычки хороши тем, что они позволяют писать строки, охватывающие сразу несколько блоков кода. Это особенно полезно для комментирования больших блоков или, может быть, для написания чего-то в верхней части сценария, на что нужно сослаться позже.
Мы можем просто набрать print, а затем — имя нашей переменной.
1 animal = '''elephant
2 tiger'''
3 print(animal)
Строки можно индексировать точно так же, как мы это делаем со списком или словарем в языке. Обычно при индексировании мы используем квадратные скобки, а затем задействуем номер индекса для ссылки на каждую букву.
Решение задач и пример
Problem-solving присутствует в этом языке, как и в любом другом. Давайте попробуем решить первую проблему вместе.
Сумма целых до n
Подсказка: подумайте о integersums.py.
Задание: добавьте функцию add_it_up(), (напомним: она позволяет принять на вход лишь одно число (обязательно целое). Затем функция должна вернуть сумму целых чисел — от нуля до входного параметра. Не забывайте запускать тесты, пока не добьетесь финиша.
Вышеуказанная функция должна возвращать 0, если на вход передано нецелое число.
*Ответ (попробуйте решить сами, не смотрите сразу)
Даем несколько ответов и наводок на то, как можно решить поставленную задачу.
Первое из решений можно назвать не очень корректным. Вот как его можно представить:
# integersums.py
def first(n):
num = 1
sum = 0
while num < n + 1:
sum = sum + num
num = num + 1
return sum
Для этого метода устранения проблему придется написать while-цикл для перебора чисел от 1 до n.
Вы сохраняете текущую сумму и возвращаете ее после завершения цикла.
Важная поправка: описанный метод не идеальный (главным образом потому, что он не показывает ваши умения и не согласуется с возможностью появления ошибки).
Как же решить проблему корректнее? Первое, о чем следует подумать, это while-цикл. Ведь в Python уже предусмотрены неплохие инструменты для итерации по спискам и диапазонам. Создавать свои собственные, как правило, не нужно.
Попробуем заменить while на цикл for:
range():
# integersums.py
def better(n):
sum = 0
for num in range(n + 1):
sum += num
return sum
Цикл while успешно заменен циклом с итерацией по диапазону range
Код стал чище и опрятнее. Следует отметить, что range() доходит до заданного числа, но не включает его, поэтому — здесь нужно использовать n + 1. Что ж, неплохой промежуточное решение: у нас теперь убрана шаблонная часть кода, которая использовалась для перебора диапазона. Мы также обозначили свою цель более конкретно.
Вычисление суммы для списка целых чисел — ещё одна из множества вещей, встроенных в Python. Представим её ниже:
# integersums.py
def even_better(n):
return sum(range(n + 1))
Используя встроенную функцию sum(), мы сократили исходный вариант — удивительно, всего до одной строчки.
Однако, все ещё остается актуальной одна проблема: этот код по-прежнему не делает то, что должен (не осуществляет обработку условия сбоя). Вот довольно элегантное и просто решение этой проблемы:
# integersums.py
def add_it_up(n):
try:
result = sum(range(n + 1))
except TypeError:
result = 0
return result
Мы просто вложили предыдущий блок в try...except и полностью решили задачу.
-
Программировать на Python
-
Писать чистый код
-
Применять функции
-
Работать с файлами и директориями
-
Работать с заказчиком