Предисловие
Добро пожаловать в мир Python — язык, который изменил правила игры в программировании! Если вы держите эту книгу в руках, значит, вы готовы к погружению к учебе, что откроет перед вами двери в захватывающие области: от создания динамичных веб-сайтов и анализа огромных массивов данных до разработки передовых систем искусственного интеллекта и автоматизации любых мыслимых задач.
Python — не просто язык программирования; это философия, сообщество и мощнейший инструмент, доступный каждому. Его называют «универсальным языком», подобным латыни или английскому.
И на то есть веские причины:
Простота и читаемость: Синтаксис Python настолько интуитивно понятен, что он часто сравнивается с обычным английским языком. Это снижает порог входа для новичков и делает код более понятным и поддерживаемым для опытных разработчиков.
Универсальность: Python не привязан к какой-то одной области. Он одинаково эффективен при написании скриптов для автоматизации, разработке сложных веб-сервисов, выполнении научных расчетов, анализе данных, создании игр и многом другом.
Огромное сообщество и экосистема: За десятилетия своего существования Python обзавелся огромным сообществом разработчиков по всему миру. Это означает, что для большинства задач уже существуют готовые библиотеки и фреймворки, которые значительно ускоряют разработку. Если вам нужна какая-то функция, велика вероятность, что кто-то уже ее реализовал и сделал доступной для всех.
Кроссплатформенность: Ваш Python-код будет работать одинаково на Windows, macOS и Linux без изменений.
Эта книга написана с целью дать вам не просто поверхностные знания, а глубокое, фундаментальное понимание того, как работает Python и как использовать его возможности на полную катушку. Мы не будем гнаться за скоростью изучения, напротив – мы будем тщательно разбирать каждый концепт, каждый синтаксический элемент, каждую библиотеку, чтобы вы чувствовали себя уверенно на каждом этапе. Мы пройдем путь от установки первой версии Python на ваш компьютер до написания сложного, эффективного и элегантного кода.
Глава 1: Знакомство с Python
1.1 Что такое Python? Его история и философия
Добро пожаловать в мир Python! Прежде чем мы начнем писать код, давайте разберемся, что же такое Python, откуда он взялся и почему он стал таким революционным инструментом для программистов по всему миру.
1.1.1 Краткая история
Python был задуман и разработан Гвидо ван Россумом в конце 1980-х годов в Центре математики и информатики (CWI) в Нидерландах. Гвидо искал язык, который был бы мощным, но при этом простым для чтения и написания, и который мог бы служить “клеем” для соединения различных систем. Вдохновленный языками ABC (для обучения программированию), Modula-3 и другими, он начал работу над Python в декабре 1989 года.
Первая публичная версия, Python 0.9.0, была выпущена в феврале 1991 года. Название “Python” было выбрано не в честь змеи, а в честь британского комедийного телевизионного шоу “Летающий цирк Монти Пайтона” (Monty Python’s Flying Circus), так как Гвидо был поклонником этого шоу.
С момента своего появления Python постоянно развивался. Ключевые вехи включают:
Python 1.0 (1994): Добавлены новые возможности, такие как функции lambda, map, filter и reduce.
Python 2.0 (2000): Введены списковые включения (list comprehensions), система сборки мусора с поддержкой отслеживания циклов и другие улучшения.
Python 3.0 (2008): Эта версия стала значительным шагом вперед, исправляя ряд фундаментальных недостатков дизайна языка, которые мешали его развитию. Python 3 полностью обратно несовместим с Python 2. Важно понимать, что большинство новых проектов и все новые учебники сейчас ориентированы именно на Python 3, который активно поддерживается и развивается.
Сегодня Python поддерживается Python Software Foundation (PSF) – некоммерческой организацией, которая заботится о развитии языка, его документации и сообществе.
1.1.2 Философия Python: “Дзэн Python”
Язык Python – это не просто набор синтаксических правил, это целая культура и набор принципов, которые направляют разработчиков к созданию качественного, поддерживаемого кода. Эти принципы известны как “Дзэн Python” (The Zen of Python). Вы можете увидеть их, запустив в интерпретаторе Python следующую команду:
python
import this
Вывод будет примерно таким:
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases don't subvert the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Давайте разберем некоторые из этих принципов, которые будут красной нитью проходить через всю нашу книгу:
“Красивое лучше, чем уродливое” (Beautiful is better than ugly). Это значит, что код должен быть не только рабочим, но и эстетически приятным, чистым и элегантным.
“Явное лучше, чем неявное” (Explicit is better than implicit). Действия в коде должны быть понятны с первого взгляда, без скрытых механизмов или неочевидных преобразований.
“Простое лучше, чем сложное” (Simple is better than complex). Если есть простой способ решить задачу, его следует предпочесть более сложному.
“Читаемость имеет значение” (Readability counts). Код будет читать не только вы, но и ваши коллеги (или вы сами через полгода). Поэтому понятность кода – это ключевой фактор. Python способствует этому благодаря своему синтаксису.
«Должен быть один — и желательно только один — очевидный способ сделать это» (There should be one–and preferably only one–obvious way to do it). Это принцип, который стремится избежать путаницы и множества конкурирующих подходов к одной и той же задаче.
Эти принципы не просто красивые слова, они формируют подход к написанию кода, который делает Python столь любимым языком для миллионов разработчиков.
1.2 Почему Python так популярен? Области применения
Зачем вообще изучать Python? Ответ прост: потому что на нем можно делать почти всё. Его популярность не случайна, она основана на реальных преимуществах, которые делают его привлекательным для самых разных задач и людей:
Простота изучения и использования:
Низкий порог входа: Синтаксис Python читается почти как обычный английский язык. Нет необходимости запоминать множество служебных символов, как в C++ или Java (точки с запятой, фигурные скобки в таком объеме).
Высокоуровневость: Python абстрагирует множество низкоуровневых деталей, таких как управление памятью, что позволяет разработчику сосредоточиться на логике программы, а не на технических мелочах.
Динамическая типизация: Вам не нужно явно указывать тип переменной (например, int или string). Python определяет тип автоматически во время выполнения, что делает написание кода быстрее.
Универсальность и широта применения:
Веб-разработка:
Backend-разработка: Фреймворки вроде Django (полнофункциональный, “все включено”) и Flask (легкий, минималистичный) позволяют создавать мощные, масштабируемые веб-приложения и API.
Frontend-разработка (с использованием Python): Инструменты вроде Brython или PyScript позволяют писать frontend-логику на Python.
Анализ данных, наука о данных и машинное обучение: Это, пожалуй, одна из самых популярных областей применения Python сегодня.
NumPy: Для эффективных числовых вычислений и работы с многомерными массивами.
Pandas: Для манипуляций и анализа данных, работы с табличными данными.
Matplotlib, Seaborn, Plotly: Для визуализации данных, построения графиков и диаграмм.
Scikit-learn: Для классических алгоритмов машинного обучения (классификация, регрессия, кластеризация).
TensorFlow, PyTorch, Keras: Для глубокого обучения, нейронных сетей.
Автоматизация и написание скриптов: Python – король автоматизации.
Системное администрирование: Автоматизация рутинных задач на серверах (управление файлами, запуск процессов, мониторинг).
Тестирование ПО: Написание автоматизированных тестов.
Управление файлами и данными: Скрипты для переименования, перемещения, обработки файлов.
Работа с сетью: Отправка email, веб-скрейпинг (сбор данных с веб-сайтов).
Разработка настольных приложений (GUI):
Tkinter: Встроенная библиотека для создания простых графических интерфейсов.
PyQt, Kivy: Более мощные и кроссплатформенные инструменты для создания сложных GUI.
Игры:
Pygame: Популярная библиотека для создания 2D-игр.
Образование:
Python – отличный первый язык для знакомства с программированием из-за своей простоты и читаемости.
Научные вычисления:
Python используется в астрономии, физике, биологии и других науках для моделирования, симуляций и обработки экспериментальных данных.
Обработка естественного языка (NLP):
NLTK, SpaCy: Библиотеки для анализа и обработки текста, создания чат-ботов.
Богатая экосистема библиотек и фреймворков:
Стандартная библиотека: Python поставляется с огромным набором встроенных модулей для работы с файлами, операционной системой, сетью, датой и временем, математическими функциями и многим другим. Вам не нужно ничего устанавливать дополнительно для выполнения многих базовых задач.
Сторонние библиотеки: Система управления пакетами pip позволяет легко устанавливать тысячи библиотек, созданных сообществом, для решения практически любых задач.
Активное сообщество: Огромное количество разработчиков по всему миру означает, что вы всегда сможете найти ответы на свои вопросы на форумах (Stack Overflow), в документации, на GitHub.
1.3 Установка Python: Первые шаги к вашему инструменту
Чтобы начать программировать на Python, первым делом нужно установить его на ваш компьютер. Процесс установки довольно прост, но важно сделать это правильно, чтобы избежать будущих проблем. Мы рассмотрим установку для основных операционных систем: Windows, macOS и Linux.
1.3.1 Выбор версии Python
Как уже упоминалось, сегодня актуальной и активно поддерживаемой версией является Python 3. Мы настоятельно рекомендуем использовать именно ее. При написании этой книги последней стабильной версией является Python 3.10.x (или выше, если вышел новый релиз). Старайтесь устанавливать самую свежую версию из ветки 3.x, которую вы найдете на официальном сайте.
1.3.2 Установка Python на Windows
Загрузка установщика:
Откройте ваш веб-браузер и перейдите на официальный сайт Python: https://www.python.org/downloads/
На главной странице загрузок вы увидите большую кнопку “Download Python [номер последней версии]”. Нажмите на нее.
Если вы используете Windows, загрузится исполняемый файл (.exe) для вашей архитектуры (скорее всего, 64-битной). Если вам нужна другая версия, прокрутите ниже до раздела “Looking for a specific version?”.
Запуск установщика:
Найдите скачанный файл (обычно в папке “Загрузки”) и дважды щелкните по нему, чтобы запустить.
ВАЖНО: На первом экране установщика ОБЯЗАТЕЛЬНО поставьте галочку напротив опции “Add Python [номер версии] to PATH”. Это критически важно, так как позволит вам запускать Python из командной строки из любой директории. Если вы пропустите этот шаг, вам придется настраивать PATH вручную, что может быть сложнее для новичка.
Выберите “Install Now” (Установить сейчас). Это установит Python со всеми стандартными компонентами и настройками, которые подходят для большинства пользователей.
Альтернативный вариант: Если вы хотите настроить установку вручную (например, выбрать директорию установки), нажмите “Customize installation”. Но для первого раза “Install Now” – лучший выбор.
Процесс установки:
Установщик покажет прогресс. Это займет несколько минут.
После завершения установки вы можете увидеть сообщение “Setup was successful” (Установка прошла успешно). Может также появиться опция “Disable path length limit” (Отключить ограничение длины пути) – если она доступна, нажмите на нее, это полезно для предотвращения проблем с очень длинными путями к файлам в будущем.
Проверка установки:
Откройте командную строку. Вы можете сделать это, нажав Win + R, введя cmd и нажав Enter.
В появившемся окне командной строки введите:
bash
python --version
или
bash
python -V
Если установка прошла успешно и PATH настроен правильно, вы увидите номер установленной версии Python (например, Python 3.10.4).
Теперь попробуйте запустить интерактивный режим Python, введя:
bash
python
Вы должны увидеть приветственное сообщение Python и приглашение в виде >>>. Это означает, что Python готов к работе! Чтобы выйти из интерактивного режима, нажмите Ctrl + Z и затем Enter, или наберите exit() и нажмите Enter.
1.3.3 Установка Python на macOS
macOS часто поставляется с предустановленной версией Python 2.x. Для разработки на современном Python 3 мы настоятельно рекомендуем установить его параллельно.
Загрузка установщика:
Перейдите на официальный сайт Python: https://www.python.org/downloads/
Нажмите кнопку “Download Python [номер последней версии]”. Для macOS будет загружен файл .pkg.
Запуск установщика:
Найдите скачанный файл .pkg и дважды щелкните по нему.
Следуйте инструкциям мастера установки. В большинстве случаев достаточно просто нажимать “Продолжить” (Continue) и “Принять” (Agree) лицензионное соглашение.
На этапе выбора места установки выберите “Установить” (Install). Установщик автоматически настроит PATH для вашей системы.
Проверка установки:
Откройте приложение “Терминал” (Terminal). Его можно найти через Spotlight (Cmd + Пробел) или в папке “Программы” -> “Утилиты”.
Введите команду:
bash
python3 --version
(Обратите внимание на python3, так как системная команда python может указывать на Python 2).
Вы должны увидеть номер установленной версии Python 3.
Чтобы запустить интерактивный режим, введите:
bash
python3
Вы увидите приглашение >>>. Для выхода используйте exit() или Ctrl + D.
1.3.4 Установка Python на Linux
Большинство дистрибутивов Linux уже поставляются с установленным Python. Однако, как и в случае с macOS, это может быть старая версия Python 2. Для современной разработки лучше установить Python 3.
Способ 1: Использование менеджера пакетов дистрибутива (рекомендуется)
Этот способ самый простой и надежный, так как он интегрируется с вашей системой. Команды могут немного отличаться в зависимости от вашего дистрибутива (Ubuntu, Debian, Fedora, CentOS и т.д.).
Для дистрибутивов на основе Debian/Ubuntu: Откройте терминал и выполните:
bash
sudo apt update
sudo apt install python3 python3-pip
python3-pip нужен для установки сторонних библиотек.
Для дистрибутивов на основе Fedora:
bash
sudo dnf update
sudo dnf install python3 python3-pip
Для дистрибутивов на основе Arch Linux:
bash
sudo pacman -Syu
sudo pacman -S python python-pip
Способ 2: Сборка из исходного кода (для продвинутых)
Этот способ дает полный контроль, но он сложнее. Обычно он не требуется, если вы не занимаетесь очень специфическими задачами.
Проверка установки (для Linux):
После установки откройте терминал и введите:
bash
python3 --version
Вы должны увидеть номер вашей установленной версии Python 3. Для запуска интерактивного режима:
bash
python3
1.3.5 Установка pip (если он не установился автоматически)
pip – это менеджер пакетов Python, который позволяет легко устанавливать и управлять сторонними библиотеками. В современных версиях Python 3 (начиная с 3.4) pip обычно устанавливается автоматически.
Если вы уверены, что pip не установлен, или хотите убедиться, что у вас самая свежая версия, вы можете установить его вручную (для Linux/macOS):
bash
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py
Или для Windows:
bash
python get-pip.py
После установки проверьте версию pip:
bash
pip3 --version # или pip --version
1.3.6 Краткое введение в виртуальные окружения (venv)
Виртуальные окружения – это чрезвычайно важная концепция для любого Python-разработчика, даже для новичка. Они позволяют создавать изолированные среды для каждого проекта. Это значит, что библиотеки, установленные для одного проекта, не будут конфликтовать с библиотеками другого проекта, даже если им требуются разные версии одной и той же библиотеки.
Зачем это нужно? Представьте, что у вас есть два проекта. Проект А требует библиотеку Requests версии 2.20, а проект Б – версию 2.25. Если вы установите их глобально, возникнет конфликт. Виртуальное окружение решит эту проблему, предоставляя каждому проекту его собственную “песочницу” для библиотек.
Как создать (Python 3.3+): Перейдите в директорию вашего проекта в терминале/командной строке и выполните:
bash
python3 -m venv <название_окружения>
Например: python3 -m venv venv (общепринятое название – venv).
Как активировать:
Windows:
bash
<название_окружения>\Scripts\activate
Например: venv\Scripts\activate
macOS/Linux:
bash
source <название_окружения>/bin/activate
Например: source venv/bin/activate
После активации вы увидите имя вашего виртуального окружения в скобках перед приглашением командной строки (например, (venv) C:\Users\User\MyProject>). Теперь все команды pip install будут устанавливать пакеты только в это окружение.
Как деактивировать: Просто наберите deactivate в терминале.
Мы вернемся к виртуальным окружениям и pip более подробно в главе, посвященной инструментам и лучшим практикам. Но уже сейчас стоит знать об их существовании.
1.4 Ваша Первая Программа: «Hello, World!»
Пришло время написать вашу первую настоящую программу на Python! Традиционно первой программой для изучения нового языка является вывод на экран фразы “Hello, World!”. Это просто, но позволяет проверить, работает ли ваш Python.
Создайте файл:
Откройте ваш любимый текстовый редактор (например, VS Code, Sublime Text, Atom, Notepad++ или даже простой Блокнот в Windows/TextEdit в macOS).
Создайте новый пустой файл.
Сохраните этот файл с расширением .py. Например, назовите его hello.py. Убедитесь, что вы сохраняете его в кодировке UTF-8 (большинство редакторов делают это по умолчанию).
Напишите код:
В открытом файле hello.py введите следующую одну единственную строку кода:
python
print("Hello, World!")
print() – это встроенная функция Python, которая используется для вывода информации на экран (в консоль).
"Hello, World!" – это строка (string). Строки в Python заключаются в одинарные (') или двойные (") кавычки. Для print() обычно используют двойные кавычки.
Сохраните файл.
Запустите программу:
Откройте терминал или командную строку.
Используйте команду cd (change directory), чтобы перейти в директорию, где вы сохранили файл hello.py. Например:
bash
cd Desktop # Если файл на рабочем столе
cd path/to/your/project # Если файл в другой папке
Теперь, когда вы находитесь в той же директории, что и файл hello.py, введите команду для запуска Python-скрипта:
bash
python hello.py
(Если вы на macOS/Linux и установлены обе версии, возможно, потребуется python3 hello.py).
Что вы увидите? На экране терминала появится:
Hello, World!
Поздравляем! Вы только что написали и запустили свою первую программу на Python! Это может показаться мелочью, но это фундамент, на котором строится всё остальное.
1.5 Интерактивный режим Python (REPL)
Мы уже немного касались интерактивного режима Python, когда проверяли установку. Давайте разберемся, что это такое и как его эффективно использовать.
REPL расшифровывается как Read-Eval-Print Loop (Чтение-Вычисление-Печать-Цикл). Это среда, где вы можете вводить команды Python построчно, и интерпретатор немедленно выполняет их и выводит результат.
Как запустить: В терминале/командной строке введите python (или python3 на macOS/Linux) и нажмите Enter.
Приглашение: Вы увидите приглашение >>>. Это означает, что Python готов принять вашу команду.
Что можно делать в REPL:
Выполнять вычисления:
python
>>> 2 + 2
4
>>> 10 * 5 - 3
47
>>> 10 / 3
3.3333333333333335
>>> 10 // 3 # Целочисленное деление
3
>>> 10 % 3 # Остаток от деления
1
Создавать и использовать переменные:
python
>>> message = "Привет из REPL!"
>>> print(message)
Привет из REPL!
>>> x = 100
>>> y = x * 2
>>> y
200
Тестировать фрагменты кода: Вы можете быстро проверить, как работает какая-то функция или как ведет себя определенный оператор, прежде чем использовать это в большом скрипте.
Изучать встроенные функции и модули:
python
>>> help(print) # Получить справку по функции print
... (появится подробное описание)
>>> import math
>>> help(math.sqrt) # Получить справку по функции sqrt из модуля math
Выходить из REPL:
exit()
quit()
Ctrl + Z (Windows) затем Enter
Ctrl + D (macOS/Linux)
REPL — ваш лучший друг для экспериментов и отладки. Когда вы не уверены, как что-то работает, или хотите быстро протестировать идею, REPL — это первое место, куда стоит обратиться.
1.6 Интегрированные среды разработки (IDE) и текстовые редакторы
Хотя можно писать Python-код в любом текстовом редакторе, для более продуктивной работы и удобства разработчики используют специализированные инструменты: интегрированные среды разработки (IDE) или продвинутые текстовые редакторы с поддержкой языков программирования.
Что такое IDE/Редактор кода?
Это программы, которые предоставляют набор инструментов для написания, отладки и тестирования кода. Обычно они включают:
Подсветку синтаксиса: Разные элементы кода (ключевые слова, переменные, строки, комментарии) выделяются разными цветами, что значительно улучшает читаемость.
Автодополнение кода (IntelliSense): Помогает быстрее писать код, предлагая варианты имен функций, переменных, методов по мере набора.
Отладчик (Debugger): Позволяет пошагово выполнять код, устанавливать точки останова, просматривать значения переменных, что бесценно для поиска ошибок.
Интеграцию с системой контроля версий (Git): Упрощает работу с Git.
Терминал/консоль: Встроенная консоль позволяет запускать код и команды прямо из среды.
Управление проектами: Помогает организовать файлы проекта.
Популярные варианты:
Visual Studio Code (VS Code):
Тип: Продвинутый текстовый редактор с возможностями IDE.
Преимущества: Бесплатный, очень легкий, невероятно расширяемый с помощью плагинов. Отлично подходит для Python благодаря обширной поддержке сообщества (плагин Python от Microsoft).
Для кого: Отличный выбор для новичков и опытных разработчиков.
PyCharm:
Тип: Полноценная IDE, специально разработанная для Python.
Преимущества: Очень мощная, с продвинутыми инструментами для анализа кода, рефакторинга, отладки, интеграции с базами данных и веб-фреймворками. Есть бесплатная Community Edition и платная Professional Edition.
Для кого: Идеально подходит для серьезной разработки, особенно для больших проектов и веб-разработки.
Sublime Text:
Тип: Мощный, быстрый и настраиваемый текстовый редактор.
Преимущества: Легкий, быстрый, с хорошей поддержкой плагинов.
Для кого: Те, кто ценит скорость и простоту, но хочет иметь расширенные возможности.
Atom:
Тип: Бесплатный, расширяемый текстовый редактор.
Преимущества: Похож на VS Code в плане гибкости и настроек.
Для кого: Хорошая альтернатива VS Code.
Наш рекомендация для начала:
Начните с Visual Studio Code. Это бесплатный, мощный и относительно простой в освоении инструмент. Установите расширение “Python” от Microsoft, и вы получите отличную среду для старта.
Установка VS Code:
Перейдите на сайт https://code.visualstudio.com/ и скачайте установщик для вашей операционной системы.
Запустите установщик и следуйте инструкциям.
После установки откройте VS Code.
Перейдите в раздел “Extensions” (значок квадратиков на боковой панели или Ctrl+Shift+X).
Найдите “Python” (от Microsoft) и нажмите “Install”.
Перезапустите VS Code, если потребуется.
Теперь, когда вы откроете файл .py в VS Code, он автоматически подсветит синтаксис, а при установленном расширении Python вы сможете легко запускать код, отлаживать его и использовать автодополнение.
1.7 Комментарии в коде: Зачем они нужны и как их писать
Код, который не понятен, бесполезен, даже если он работает. Комментарии — это ваши помощники в создании понятного и поддерживаемого кода.
Что такое комментарий?
Комментарий – это текст в вашей программе, который игнорируется интерпретатором Python. Он предназначен для людей, чтобы пояснить, что делает тот или иной участок кода, почему он написан именно так, или оставить какую-то важную заметку.
Как писать комментарии?
В Python есть два основных способа:
Однострочные комментарии: Начинаются с символа решетки (#). Все, что идет после # до конца строки, считается комментарием.
python
# Это однострочный комментарий. Он описывает следующую строку.
print("Привет!") # Этот комментарий расположен в конце строки.
x = 10 # Инициализация переменной x значением 10
Многострочные комментарии (или докстринги): Технически, в Python нет специального синтаксиса для многострочных комментариев, как, например, /* ... */ в C++. Однако, для создания документации (docstrings) используются многострочные строки, заключенные в тройные кавычки (''' ... ''' или """ ... """). Они также игнорируются интерпретатором, если не назначены переменной или не являются первой строкой в модуле, классе или функции.
Docstrings: Это лучший способ документировать функции, классы и модули. Они могут быть прочитаны другими программами (например, для автоматической генерации документации).
python
def greet(name):
"""
Эта функция принимает имя пользователя в качестве аргумента
и выводит приветствие.
"""
print(f"Привет, {name}!")
"""
Это пример многострочного комментария,
который будет игнорироваться Python,
поскольку он не является docstring'ом
для функции, класса или модуля.
"""
Зачем использовать комментарии?
Пояснение сложной логики: Если какой-то алгоритм неочевиден, комментарии помогут понять его.
Документирование кода: Описание того, что делает функция, какие аргументы принимает, что возвращает.
Напоминания себе: “TODO: Исправить эту часть позже”, “HACK: Временное решение”.
Временное отключение кода: Вы можете закомментировать строку или блок кода, чтобы временно отключить его выполнение, вместо того чтобы удалять.
Лучшие практики комментирования:
Пишите комментарии к своему коду, а не к самому коду. Комментарий должен объяснять почему, а не что. Код сам по себе показывает, что он делает.
Плохо: i = i + 1 # Увеличиваем i на 1 (это очевидно из кода i = i + 1)
Хорошо: i = i + 1 # Инкрементируем счетчик попыток, пока не достигнем лимита
Поддерживайте комментарии в актуальном состоянии. Если вы меняете код, но забываете обновить комментарий, он становится дезинформирующим и вредным.
Используйте docstrings для функций, классов и модулей. Это стандартная практика, которая делает ваш код более профессиональным.
Итог первой главы:
Мы проделали большой путь! Мы узнали:
Что такое Python, его историю и философию.
Почему Python так популярен и где он применяется.
Как установить Python на разные операционные системы.
Как запустить вашу первую программу “Hello, World!”.
Что такое интерактивный режим (REPL) и как его использовать.
Кратко о важности IDE и текстовых редакторов.
Зачем нужны комментарии.
Теперь у вас есть вся необходимая база, чтобы двинуться дальше. В следующей главе мы углубимся в основные строительные блоки любого языка программирования — переменные, типы данных и операторы.
Глава 2: Основы Программирования: Переменные, Типы Данных и Операторы
В предыдущей главе мы познакомились с Python, установили его и написали первую программу. Теперь пришло время разобраться с основными “кирпичиками”, из которых строится любое программное обеспечение: переменными, типами данных, которые они могут хранить, и операторами, которые позволяют с этими данными работать.
2.1 Переменные: «Коробки» для ваших данных
Представьте, что ваш компьютер – это огромная кладовая, где хранятся различные вещи (данные). Переменная – это как ярлык или адрес, который вы прикрепляете к определенной “коробке” с данными, чтобы легко находить и использовать их.
2.1.1 Что такое переменная?
Переменная – это именованная область памяти, которая хранит определенное значение. Это значение может меняться (отсюда и название “переменная”) в процессе выполнения программы.
2.1.2 Правила именования переменных
Чтобы ваш код был читаемым и соответствовал стандартам, важно правильно именовать переменные. В Python действуют следующие правила:
Допустимые символы: Имена переменных могут содержать буквы (a-z, A-Z), цифры (0-9) и символ подчеркивания (_).
Первый символ: Имя переменной не может начинаться с цифры. Оно должно начинаться с буквы или подчеркивания.
Чувствительность к регистру: Python различает регистр букв. myVariable, myvariable и MYVARIABLE – это три разные переменные.
Зарезервированные слова (ключевые слова): Нельзя использовать в качестве имен переменных зарезервированные слова Python (например, if, for, while, print, def, class и т.д.). Если вы попробуете использовать такое слово, Python выдаст ошибку. Список всех ключевых слов можно получить, выполнив import keyword; print(keyword.kwlist).
Смысловые имена: Старайтесь давать переменным имена, которые отражают их назначение. Это делает код более понятным. Вместо x = 100 лучше написать student_count = 100, а вместо n – number_of_attempts.
Рекомендации по стилю (PEP 8): Официальное руководство по стилю Python (PEP 8) рекомендует использовать snake_case для имен переменных и функций. Это означает, что слова разделяются символом подчеркивания, и все буквы пишутся в нижнем регистре (например, first_name, total_score, user_input).
Примеры правильных имен переменных:
user_name
age
_private_variable (переменные, начинающиеся с подчеркивания, обычно используются для внутренних целей)
count_1
MAX_SPEED (хотя PEP 8 рекомендует snake_case, переменные, написанные полностью заглавными буквами, часто используются для обозначения констант, значения которых не должны меняться)
Примеры неправильных имен переменных:
1_variable (начинается с цифры)
my-variable (содержит дефис)
class (ключевое слово)
print (ключевое слово)
user name (содержит пробел)
2.1.3 Присваивание значений переменным
Для присвоения значения переменной используется оператор присваивания – знак равенства (=).
python
# Присвоение строкового значения
user_name = "Alice"
# Присвоение числового значения
age = 30
# Присвоение булева значения (True/False)
is_active = True
# Присвоение результата выражения
next_age = age + 1
2.1.4 Присваивание и переприсваивание значений
Значение переменной может быть изменено в любой момент программы.
python
counter = 5
print(counter) # Выведет: 5
counter = counter + 1 # Увеличиваем значение на 1
print(counter) # Выведет: 6
counter = 10 # Полностью переприсваиваем значение
print(counter) # Выведет: 10
2.1.5 Множественное присваивание
Python позволяет присвоить одно значение нескольким переменным одновременно или присвоить разные значения нескольким переменным в одной строке.
Одно значение нескольким переменным:
python
x = y = z = 0
print(x, y, z) # Выведет: 0 0 0
Разные значения нескольким переменным (распаковка последовательности): Это один из самых элегантных способов присваивания в Python.
python
name, age, city = "Bob", 25, "New York"
print(name, age, city) # Выведет: Bob 25 New York
Важно, чтобы количество переменных слева от = совпадало с количеством элементов в последовательности справа.
2.2 Типы данных: Что хранит переменная?
Переменные в Python могут хранить данные различных типов. Python – язык с динамической типизацией, это означает, что тип переменной определяется автоматически во время выполнения программы на основе присвоенного ей значения, и вы не обязаны объявлять тип заранее.
Давайте подробнее рассмотрим основные встроенные типы данных:
2.2.1 Числа (Numeric Types)
Python поддерживает различные числовые типы:
Целые числа (Integers, int): Представляют собой целые числа, как положительные, так и отрицательные, без дробной части. В Python 3 целые числа могут быть сколь угодно большими (ограничены только объемом оперативной памяти).
python
age = 30
year = -100
big_number = 12345678901234567890
Числа с плавающей точкой (Floating-Point Numbers, float): Представляют собой действительные числа, имеющие дробную часть. Они хранятся с использованием формата с плавающей точкой двойной точности (как правило, 64-битный стандарт IEEE 754).
python
price = 19.99
temperature = -5.5
pi = 3.1415926535
scientific_notation = 1.23e4 # Это 1.23 * 10^4, т.е. 12300.0
Важно: Из-за особенностей представления чисел с плавающей точкой в двоичном формате, иногда могут возникать небольшие погрешности. Например, 0.1 + 0.2 может быть не в точности 0.3.
Комплексные числа (Complex Numbers, complex): Используются в научных и инженерных расчетах. Состоят из действительной и мнимой частей. Мнимая часть обозначается буквой j или J.
python
complex_number = 3 + 5j
another_complex = 2.5 - 1.2j
print(complex_number.real) # Выведет: 3.0
print(complex_number.imag) # Выведет: 5.0
2.2.2 Булевы значения (Boolean, bool)
Булевы значения представляют собой истину или ложь. В Python есть только два булевых значения:
True (истина)
False (ложь)
Они очень важны для логики программы, например, при работе с условными операторами и циклами. Буквы T и F должны быть заглавными!
python
is_adult = True
has_permission = False
2.2.3 Строки (Strings, str)
Строки используются для представления текстовых данных. Они могут состоять из букв, цифр, символов и пробелов.
Создание строк: Строки заключаются в одинарные (') или двойные (") кавычки. Также можно использовать тройные кавычки (''' или """) для создания многострочных строк или строк, содержащих как одинарные, так и двойные кавычки.
python
name = "Alice" # Двойные кавычки
message = «Hello, World!» # Одинарные кавычки
long_text = """Это многострочная строка.
Она может содержать несколько абзацев.
А также 'одинарные' и "двойные" кавычки."""
Неизменяемость строк: Важно знать, что строки в Python являются неизменяемыми (immutable). Это означает, что после создания строки ее нельзя изменить. Если вам нужно изменить строку (например, заменить символ), вам придется создать новую строку на основе старой.
python
greeting = "Hello"
# greeting[0] = "h" # Это вызовет ошибку TypeError!
new_greeting = "h" + greeting[1:] # Создаем новую строку
print(new_greeting) # Выведет: hello
2.2.4 Специальное значение None (NoneType)
None – это особый тип данных, который представляет отсутствие значения. Он часто используется для инициализации переменной, когда ей еще не присвоено конкретное значение, или когда функция ничего не возвращает явно.
python
user_data = None
result = None # Пока результат неизвестен
if user_data is None:
print("Данные пользователя отсутствуют.")
None – это единственный экземпляр типа NoneType.
2.2.5 Как узнать тип переменной?
Для определения типа данных переменной используется встроенная функция type().
python
age = 30
name = "Alice"
height = 1.75
is_student = True
data = None
print(type(age)) # Выведет: <class 'int'>
print(type(name)) # Выведет: <class 'str'>
print(type(height)) # Выведет: <class 'float'>
print(type(is_student)) # Выведет: <class 'bool'>
print(type(data)) # Выведет: <class 'NoneType'>
2.3 Операторы: Инструменты для манипуляции данными
Операторы – это специальные символы или ключевые слова, которые выполняют операции над операндами (переменными или значениями). Python предлагает широкий набор операторов.
2.3.1 Арифметические операторы
Используются для выполнения математических вычислений.
Оператор Описание Пример Результат
+ Сложение 5 + 3 8
— Вычитание 10 — 4 6
* Умножение 6 * 7 42
/ Деление (всегда возвращает float) 10 / 3 3.333...
// Целочисленное деление (отбрасывает дробную часть) 10 // 3 3
% Остаток от деления (модуль) 10 % 3 1
** Возведение в степень 2 ** 3 8
python
a = 10
b = 3
print(a + b) # 13
print(a - b) # 7
print(a * b) # 30
print(a / b) # 3.3333333333333335
print(a // b) # 3
print(a % b) # 1
print(a ** b) # 1000
# Умножение строки:
print("Hi" * 3) # Выведет: HiHiHi
2.3.2 Операторы сравнения (Реляционные операторы)
Используются для сравнения двух значений. Результатом операции сравнения всегда является булево значение (True или False).
Оператор Описание Пример Результат
== Равно 5 == 5 True
!= Не равно 5 != 3 True
> Больше 10 > 5 True
< Меньше 5 < 10 True
>= Больше или равно 5 >= 5 True
<= Меньше или равно 5 <= 10 True
python
x = 10
y = 12
print(x == 10) # True
print(x != y) # True
print(y > x) # True
print(x < y) # True
print(x >= 10) # True
print(y <= 10) # False
# Сравнение строк (лексикографическое):
print("apple" < "banana") # True
print("Apple" < "apple") # True (заглавные буквы идут раньше строчных в ASCII/Unicode)
2.3.3 Логические операторы
Используются для комбинирования булевых выражений.
Оператор Описание Пример Результат
and Истина, если оба операнда истинны. True and False False
or Истина, если хотя бы один из операндов истинен. True or False True
not Инвертирует булево значение. not True False
python
age = 25
has_license = True
# Проверяем, является ли человек совершеннолетним И имеет ли права
print(age >= 18 and has_license) # True
# Проверяем, либо совершеннолетний, либо имеет права
print(age >= 18 or has_license) # True
# Если человек не является студентом
is_student = False
print(not is_student) # True
2.3.4 Операторы присваивания
Операторы присваивания используются для присвоения значений переменным. Мы уже видели основной оператор =. Существуют также комбинированные операторы, которые выполняют операцию и присваивают результат обратно той же переменной.
Оператор Пример То же самое, что и…
= x = 5 x = 5
+= x += 3 x = x + 3
-= x -= 2 x = x - 2
*= x *= 4 x = x * 4
/= x /= 2 x = x / 2
//= x //= 3 x = x // 3
%= x %= 2 x = x % 2
**= x **= 2 x = x ** 2
python
count = 0
count += 1 # count теперь 1
count += 5 # count теперь 6
print(count) # 6
price = 100
discount_percentage = 10
discount_amount = price * (discount_percentage / 100) # 10.0
price -= discount_amount # price = 100 - 10.0 = 90.0
print(price) # 90.0
2.3.5 Оператор is и is not (Идентичность)
Эти операторы проверяют, ссылаются ли две переменные на один и тот же объект в памяти. Это отличается от ==, который проверяет, равны ли значения объектов.
python
list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = list1
print(list1 == list2) # True (значения равны)
print(list1 is list2) # False (это два разных списка в памяти)
print(list1 == list3) # True (значения равны)
print(list1 is list3) # True (list3 ссылается на тот же объект, что и list1)
# Для небольших целых чисел и строк Python может кэшировать значения,
# поэтому результат 'is' может быть неожиданным:
a = 5
b = 5
print(a is b) # True (часто, но не гарантировано для всех чисел)
str1 = "hello"
str2 = "hello"
print(str1 is str2) # True (для коротких строк Python часто кэширует)
2.3.6 Оператор in и not in (Принадлежность)
Эти операторы проверяют, содержится ли элемент в последовательности (строке, списке, кортеже и т.д.).
python
my_list = [10, 20, 30, 40]
my_string = "Hello, Python!"
print(20 in my_list) # True
print(50 in my_list) # False
print("Python" in my_string) # True
print("Java" in my_string) # False
# Использование not in
print(50 not in my_list) # True
2.4 Преобразование типов данных (Type Casting)
Иногда возникает необходимость преобразовать значение одного типа данных в другой. Например, получить число из строки или наоборот. Для этого в Python есть встроенные функции, которые по сути являются “конструкторами” типов: int(), float(), str(), bool().
2.4.1 Преобразование в целое число (int())
Преобразует строку, содержащую целое число, или число с плавающей точкой в целое число.
При преобразовании float в int дробная часть отбрасывается (происходит усечение, а не округление).
python
num_str = "123"
integer_from_str = int(num_str)
print(integer_from_str) # 123
print(type(integer_from_str)) # <class 'int'>
float_num = 9.99
integer_from_float = int(float_num)
print(integer_from_float) # 9 (дробная часть отброшена)
# Ошибка, если строка не является числом:
# error_str = "Hello"
# int(error_str) # ValueError: invalid literal for int() with base 10: 'Hello'
2.4.2 Преобразование в число с плавающей точкой (float ())
Преобразует строку, содержащую число (целое или дробное), или целое число в число с плавающей точкой.
python
num_str = "123.45"
float_from_str = float(num_str)
print(float_from_str) # 123.45
print(type(float_from_str)) # <class 'float'>
integer_num = 100
float_from_int = float(integer_num)
print(float_from_int) # 100.0
2.4.3 Преобразование в строку (str())
Преобразует любое значение в его строковое представление.
python
age = 30
string_age = str(age)
print(string_age) # "30"
print(type(string_age)) # <class 'str'>
pi = 3.14159
string_pi = str(pi)
print(string_pi) # "3.14159"
2.4.4 Преобразование в булево значение (bool())
Некоторые значения при преобразовании в bool становятся False, остальные – True.
False становится: False, None, число 0 (любого типа: 0, 0.0), пустые последовательности ('', [], (), {}), пустые словари ({}).
Все остальные значения становятся True.
python
print(bool(0)) # False
print (bool (1)) # True
print(bool(-5)) # True
print(bool(0.0)) # False
print(bool(0.1)) # True
print(bool("Hello")) # True
print(bool("")) # False
print(bool([])) # False
print(bool(None)) # False
2.4.5 Явное и неявное преобразование типов
Явное преобразование (Type Casting): Это когда вы сами используете функции int(), float() и т.д. для преобразования. Примеры выше – это явное преобразование.
Неявное преобразование (Type Coercion): Иногда Python автоматически преобразует типы данных во время выполнения операции, чтобы операция была возможна. Чаще всего это происходит, когда вы смешиваете int и float.
python
num_int = 10
num_float = 5.5
# При сложении int и float, int неявно преобразуется во float
result = num_int + num_float
print(result) # 15.5
print(type(result)) # <class 'float'>
Однако, Python не выполняет неявное преобразование, если оно может привести к потере данных или является неоднозначным (например, при попытке сложить число со строкой без явного преобразования).
python
# print(10 + "5") # TypeError: unsupported operand type(s) for +: 'int' and 'str'
# Чтобы это заработало, нужно явное преобразование:
print(10 + int("5")) # 15
Резюме главы:
мы заложили крепкий фундамент:
Поняли, что такое переменные, как их правильно называть и присваивать им значения.
Изучили основные типы данных в Python: числа (int, float), булевы значения (bool), строки (str) и специальное значение None.
Освоили арифметические, логические операторы и операторы сравнения.
Узнали о комбинированных операторах присваивания.
Познакомились с операторами идентичности (is) и принадлежности (in).
Разобрались, как преобразовывать типы данных и когда это необходимо.
Эти знания — ваш первый, но очень важный шаг. В следующей главе мы перейдем к структурам данных, которые позволяют хранить и обрабатывать коллекции элементов: спискам, кортежам, словарям и множествам. Это откроет перед нами гораздо больше возможностей для создания интересных программ!
Глава 3: Списки (list) — Колекции в Python
В предыдущих главах мы научились работать с отдельными значениями: числами, строками, булевыми значениями. Но часто в программах нам приходится иметь дело с коллекциями данных – наборами связанных элементов. Python предлагает несколько встроенных структур данных для этих целей, и первой, с которой мы познакомимся, будет список (list).
Списки – это, пожалуй, самая универсальная и часто используемая структура данных в Python. Они позволяют хранить упорядоченную коллекцию элементов, которые могут быть разных типов.
3.1 Что такое список?
Список – это изменяемая (mutable) и упорядоченная коллекция элементов.
Упорядоченная: Каждый элемент в списке имеет определенный порядок, и этот порядок не меняется сам по себе. Элементы можно получать по их позиции (индексу).
Изменяемая: Вы можете добавлять, удалять или изменять элементы в списке после его создания.
Произвольные типы: Список может содержать элементы любых типов данных: числа, строки, другие списки, словари, объекты и т.д.
3.1.1 Создание списка
Списки создаются с помощью квадратных скобок [], а элементы внутри списка разделяются запятыми.
Пустой список:
python
empty_list = []
print(empty_list) # Выведет: []
print(type(empty_list)) # Выведет: <class 'list'>
Список с элементами:
python
numbers = [1, 2, 3, 4, 5]
fruits = ["apple", "banana", "cherry"]
mixed_list = [1, "hello", 3.14, True, None]
nested_list = [1, [2, 3], 4, [5, [6, 7]]] # Список, содержащий другие списки
Создание списка с помощью list(): Функция list() может быть использована для создания списка из других итерируемых объектов (например, строк, кортежей).
Бесплатный фрагмент закончился.
Купите книгу, чтобы продолжить чтение.