Справочник по Python
Добро пожаловать в краткий справочник по языку программирования Python. Этот сайт предназначен как для начинающих, так и для опытных разработчиков, которым нужно быстро освежить в памяти синтаксис или концепции.
Основы языка
Python - это высокоуровневый, интерпретируемый язык с динамической типипизацией. Он известен своим чистым и читаемым синтаксисом.
Переменные и типы данных
Переменные объявляются простым присваиванием. Тип определяется автоматически.
# Комментарии начинаются с '#'
name = "Alice" # str (строка)
age = 30 # int (целое число)
height = 1.75 # float (число с плавающей точкой)
is_student = True # bool (логический тип)
Вывод в консоль
Для вывода используется функция print(). F-строки (с Python 3.6+) - удобный способ форматирования.
print(f"Имя: {name}, Возраст: {age}")
# Вывод: Имя: Alice, Возраст: 30
Условные операторы (if/elif/else)
Отступы (обычно 4 пробела) в Python критически важны, они определяют блоки кода.
if age < 18:
print("Вы несовершеннолетний")
elif age >= 18 and age < 65:
print("Вы взрослый")
else:
print("Вы пенсионер")
Цикл While
Цикл while выполняется, пока условие истинно. Главное - не забыть изменить условие внутри цикла, чтобы не получить бесконечный цикл.
count = 0
while count < 5:
print(count)
count += 1 # Эквивалентно count = count + 1
# Выведет: 0, 1, 2, 3, 4
Ввод пользователя
Функция input() получает данные от пользователя из консоли. Важно помнить, что она **всегда возвращает строку (str)**.
name = input("Введите ваше имя: ")
print(f"Привет, {name}!")
# Если нужно число, его надо преобразовать (скастить)
age_str = input("Введите ваш возраст: ")
age_int = int(age_str) # Может вызвать ошибку, если введено не число
Структуры данных
Списки (Lists)
Упорядоченные, изменяемые (mutable) коллекции. Аналог массивов в других языках. Индексация начинается с 0. Используются [].
fruits = ["apple", "banana", "cherry"]
fruits.append("orange") # Добавление в конец
print(fruits[0]) # 'apple'
print(fruits[-1]) # 'orange' (индексация с конца)
print(fruits[1:3]) # Срез: ['banana', 'cherry']
Словари (Dictionaries)
Неупорядоченные (до Python 3.7) коллекции пар "ключ-значение". Изменяемые. Используются {}.
person = {
"name": "Bob",
"age": 25,
"city": "New York"
}
print(person["name"]) # 'Bob'
person["age"] = 26 # Изменение значения
person["job"] = "Developer" # Добавление новой пары
Цикл For
Чаще всего используется для итерации (перебора) элементов в коллекциях.
# Итерация по списку
for fruit in fruits:
print(fruit)
# Итерация по словарю
for key, value in person.items():
print(f"{key}: {value}")
# Цикл с использованием range
for i in range(5):
print(i) # Выведет 0, 1, 2, 3, 4
Кортежи (Tuples)
Упорядоченные, неизменяемые (immutable) коллекции. Похожи на списки, но их нельзя изменить после создания. Используются (). Работают быстрее списков.
point = (10, 20)
print(point[0]) # 10
# point[0] = 15 # Вызовет ошибку TypeError
# Распаковка кортежа
x, y = point
print(f"X: {x}, Y: {y}")
Множества (Sets)
Неупорядоченные коллекции уникальных элементов. Изменяемые. Удобны для удаления дубликатов и математических операций.
my_list = [1, 2, 2, 3, 4, 3, 5]
unique_nums = set(my_list)
print(unique_nums) # {1, 2, 3, 4, 5} (порядок может отличаться)
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1.intersection(set2)) # Пересечение: {3}
print(set1.union(set2)) # Объединение: {1, 2, 3, 4, 5}
Функции и модули
Объявление функции
Функции объявляются с помощью ключевого слова def. Они помогают структурировать код и избегать повторений (принцип DRY - Don't Repeat Yourself).
def greet(name):
"""
Эта функция приветствует пользователя по имени.
(Это docstring - строка документации)
"""
return f"Привет, {name}!"
message = greet("Иван")
print(message)
Импорт модулей
Python имеет обширную стандартную библиотеку. Модули подключаются через import.
import math # Импорт всего модуля
print(math.sqrt(16)) # 4.0
from datetime import date # Импорт конкретного класса
today = date.today()
print(today)
Продвинутые аргументы функции
Python предлагает гибкие способы передачи аргументов в функцию.
# 1. Аргументы по умолчанию
def greet_adv(name, greeting="Привет"):
return f"{greeting}, {name}!"
print(greet_adv("Анна")) # 'Привет, Анна!'
print(greet_adv("Иван", greeting="Здравствуй")) # 'Здравствуй, Иван!'
# 2. Произвольное количество позиционных аргументов (*args)
# args - это кортеж (tuple)
def sum_all(*args):
total = 0
for num in args:
total += num
return total
print(sum_all(1, 2, 3, 4)) # 10
# 3. Произвольное количество именованных аргументов (**kwargs)
# kwargs - это словарь (dict)
def display_user_info(**kwargs):
for key, value in kwargs.items():
print(f"{key.title()}: {value}")
display_user_info(name="Alice", age=30, city="New York")
Классы (ООП)
Python - полностью объектно-ориентированный язык. Классы - это "чертежи" для создания объектов. Объекты объединяют в себе данные (атрибуты) и поведение (методы).
Метод __init__ - это конструктор, он вызывается при создании нового объекта. self - аналог this, ссылка на сам экземпляр.
class Dog:
# Атрибут класса (общий для всех)
species = "Canis familiaris"
# Конструктор (инициализатор)
def __init__(self, name, breed):
# Атрибуты экземпляра
self.name = name
self.breed = breed
# Метод экземпляра
def bark(self):
return f"{self.name} (порода {self.breed}) говорит 'Гав'!"
# Создание экземпляра (объекта)
my_dog = Dog("Рекс", "Овчарка")
print(my_dog.name) # Рекс
print(my_dog.bark()) # Рекс (порода Овчарка) говорит 'Гав'!
print(my_dog.species) # Canis familiaris
Обработка ошибок (Try/Except)
Для "отлавливания" и обработки исключений (ошибок времени выполнения) используется конструкция try...except. Это позволяет программе не "падать" при возникновении проблемы.
try:
# Блок кода, который может вызвать ошибку
num = int(input("Введите число: "))
result = 10 / num
except ValueError:
# Выполняется, если int() не смог преобразовать строку
print("Ошибка: Введено не число.")
except ZeroDivisionError:
# Выполняется, если num равен 0
print("Ошибка: Нельзя делить на ноль.")
except Exception as e:
# "Всеядный" обработчик, ловит любые другие ошибки
print(f"Произошла неизвестная ошибка: {e}")
else:
# Выполняется, ТОЛЬКО если ошибок в блоке try не было
print(f"Результат: {result}")
finally:
# Выполняется ВСЕГДА (были ошибки или нет)
print("Блок try завершен.")
Работа с файлами (File I/O)
Менеджер контекста with open(...) - это современный и предпочтительный способ работы с файлами. Он гарантирует, что файл будет корректно закрыт, даже если внутри блока произойдет ошибка.
Запись в файл
# 'w' - (write) режим записи. Файл создается или ПЕРЕЗАПИСЫВАЕТСЯ.
# encoding="utf-8" - важен для корректной работы с кириллицей.
with open("hello.txt", "w", encoding="utf-8") as f:
f.write("Привет, мир!\n")
f.write("Это вторая строка.")
# 'a' - (append) режим добавления в конец.
with open("hello.txt", "a", encoding="utf-8") as f:
f.write("\nЭто добавленная строка.")
Чтение из файла
# 'r' - (read) режим чтения (используется по умолчанию).
try:
with open("hello.txt", "r", encoding="utf-8") as f:
# Читать весь файл как одну большую строку
# content = f.read()
# Читать файл построчно в список
# lines = f.readlines()
# Самый частый способ: читать построчно в цикле
for line in f:
print(line.strip()) # .strip() убирает лишние символы (пробелы, \n)
except FileNotFoundError:
print("Ошибка: файл 'hello.txt' не найден.")
Стандартная библиотека
Python поставляется с "батарейками в комплекте" - огромной стандартной библиотекой модулей, которые не нужно устанавливать отдельно. Вы просто импортируете их и используете.
json: Для работы с данными в формате JSON (сериализация и десериализация).os: Для взаимодействия с операционной системой (пути к файлам, переменные окружения, создание папок).datetime: Мощный модуль для работы с датами и временем.math: Основные математические функции (синус, косинус, корень и т.д.).random: Генерация случайных чисел, выбор случайных элементов.requests: (Технически, это не стандартная библиотека, а сторонний пакет. Но он настолько популярен и важен (pip install requests), что его часто упоминают). Используется для выполнения HTTP-запросов.
import json
import os
from datetime import datetime
# Пример с JSON
data = {"name": "Test", "value": 123}
json_string = json.dumps(data) # Сериализация в строку
print(json_string)
# Пример с OS
current_dir = os.getcwd()
print(f"Текущая папка: {current_dir}")
# Пример с datetime
now = datetime.now()
print(f"Сейчас: {now.strftime('%Y-%m-%d %H:%M:%S')}")
Продвинутые темы
Этот раздел кратко затрагивает темы для более опытных программистов.
Декораторы
Декораторы — это функции, которые "оборачивают" другие функции, расширяя их поведение без изменения их кода. Синтаксис @ - "синтаксический сахар".
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Что-то происходит ДО вызова функции.")
result = func(*args, **kwargs) # Передаем аргументы
print(f"Функция вернула: {result}")
print("Что-то происходит ПОСЛЕ вызова функции.")
return result
return wrapper
@my_decorator
def add(a, b):
print("Выполняется функция add...")
return a + b
add(5, 3)
Генераторы
Генераторы - это простой способ создания итераторов. Они используют yield для "возврата" значения, приостанавливая выполнение и сохраняя свое состояние для следующего вызова. Это очень эффективно для работы с большими наборами данных, так как они не хранятся в памяти целиком.
def count_up_to(n):
i = 1
while i <= n:
yield i
i += 1
# Генератор "ленивый" - он не создает все числа сразу
for num in count_up_to(5):
print(num) # Выведет 1, 2, 3, 4, 5
Asyncio
async/await используется для написания асинхронного кода (кооперативной многозадачности), что критически важно для высоконагруженных I/O (сетевых) приложений. Это позволяет программе выполнять другие задачи, пока она ждет ответа от сети или диска.
import asyncio
async def fetch_data(delay, url):
print(f"Начинаю загрузку {url}...")
await asyncio.sleep(delay) # Имитация долгой сетевой операции
print(f"Загрузка {url} завершена.")
return f"Данные из {url}"
async def main():
# Запускаем задачи "одновременно"
task1 = asyncio.create_task(fetch_data(2, "google.com"))
task2 = asyncio.create_task(fetch_data(1, "yandex.ru"))
# Ждем завершения обеих задач
await task1
await task2
print("Все задачи выполнены.")
# В .py файле это запускается так:
# if __name__ == "__main__":
# asyncio.run(main())