Справочник по 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 поставляется с "батарейками в комплекте" - огромной стандартной библиотекой модулей, которые не нужно устанавливать отдельно. Вы просто импортируете их и используете.


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())