Python Syntax
Типы данных
Числовые типы
x = 10
Числа с плавающей запятой (float):
y = 10.5
z = 1 + 2j
Последовательности
s = "Hello, World!"
my_list = [1, 2, 3, 4, 5]
my_tuple = (1, 2, 3, 4, 5)
my_range = range(1, 10)
Коллекции
my_set = {1, 2, 3, 4, 5}
Неизменяемые множества (frozenset):
my_frozenset = frozenset([1, 2, 3, 4, 5])
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
Дополнительные типы данных
flag = True
NoneType (представляет отсутствие значения):
none_value = None
my_bytes = b"Hello, World!"
ba = bytearray([104, 101, 108, 108, 111]) print(ba.decode('utf-8')) # hello
Проверка типов
Определение типа
a = 1 typeis = type(a) print(typeis) # <class 'int'>
Валидация типа в функции
def greet(name: str) -> str: return f"Привет, {name}!" print(greet("Мир"))
Условия
Условные операторы
age = 18 if age >= 18: print("Взрослый") else: print("Несовершеннолетний")
Сопоставление с образцом (Pattern Matching)
def http_status(status): match status: case 200: return "OK" case 404: return "Not Found" case 500: return "Server Error" case _: return "Unknown status" print(http_status(200)) print(http_status(404))
Тернарный оператор
# Синтаксис: результат1 if условие else результат2 x = 10 y = 20 # Если x больше y, присвоить переменной result значение "x больше", иначе "y больше" result = "x больше" if x > y else "y больше" print(result) # Вывод: y больше
# Определение максимального из трех чисел a, b, c = 5, 10, 15 max_value = a if a > b and a > c else (b if b > c else c) print(max_value) # Вывод: 15
Циклы
for
for i in range(5): print(f"Цикл for: {i}")
while
count = 0 while count < 5: print(f"Цикл while: {count}") count += 1
break
for i in range(10): if i == 5: break # Выход из цикла, когда i равно 5 print(i) # Вывод: # 0 # 1 # 2 # 3 # 4
continue
for i in range(10): if i % 2 == 0: continue # Пропуск оставшегося кода в текущей итерации, если i чётное print(i) # Вывод: # 1 # 3 # 5 # 7 # 9
Работа со списками
Индексы
# Создаем список items = [1, 2, 3, 4, 5] # Обращение к элементу по индексу first_item = items[0] print(first_item) # Вывод: 1 # Обращение к элементу по отрицательному индексу last_item = items[-1] print(last_item) # Вывод: 5
Срезы
# Создаем список items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # Срез от 2 до 5 элемента (индексы 2, 3, 4) slice1 = items[2:5] print(slice1) # Вывод: [3, 4, 5] # Срез с начала до 4 элемента (индексы 0, 1, 2, 3) slice2 = items[:4] print(slice2) # Вывод: [1, 2, 3, 4] # Срез с 6 элемента до конца (индексы 6, 7, 8, 9) slice3 = items[6:] print(slice3) # Вывод: [7, 8, 9, 10] # Срез с шагом 2 (берем каждый второй элемент) slice4 = items[::2] print(slice4) # Вывод: [1, 3, 5, 7, 9]
Отрицательные индексы
# Создаем список items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # Доступ к последнему элементу last_item = items[-1] print(last_item) # Вывод: 10 # Доступ к предпоследнему элементу second_last_item = items[-2] print(second_last_item) # Вывод: 9 # Срез от 2 элемента с конца до конца списка slice1 = items[-2:] print(slice1) # Вывод: [9, 10] # Срез от 4 элемента с конца до 2 элемента с конца slice2 = items[-4:-2] print(slice2) # Вывод: [7, 8] # Срез с шагом -1 (реверс списка) slice3 = items[::-1] print(slice3) # Вывод: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Функции
Обычная функция
def greet(name): return f"Привет, {name}!" print(greet("Мир"))
Функции высшего порядка и лямбда-выражения
# Лямбда-выражения add = lambda x, y: x + y print(add(3, 5)) # Функции высшего порядка def apply_func(func, value): return func(value) print(apply_func(lambda x: x ** 2, 10))
Функции для работы со списками
# Создаем список от 0 до 9 items = [x for x in range(10)] # Фильтрация четных чисел even_items = list(filter(lambda x: x % 2 == 0, items)) print(even_items) # Вывод: [0, 2, 4, 6, 8]
# Создаем список от 0 до 9 items = [x for x in range(10)] # Преобразование чисел в строки str_items = list(map(lambda x: str(x), items)) print(str_items) # Вывод: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
# Создаем пустой список items = [] # Добавление элементов в конец списка items.append(1) items.append(2) print(items) # Вывод: [1, 2] # Вставка элемента по индексу items.insert(1, 1.5) print(items) # Вывод: [1, 1.5, 2]
# Создаем список items = [1, 2, 3, 4, 5] # Удаление элемента по значению items.remove(3) print(items) # Вывод: [1, 2, 4, 5] # Удаление элемента по индексу del items[1] print(items) # Вывод: [1, 4, 5] # Извлечение последнего элемента last_item = items.pop() print(last_item) # Вывод: 5 print(items) # Вывод: [1, 4]
Работа с файлами
# Запись в файл with open("example.txt", "w") as file: file.write("Hello, World!") # Чтение из файла with open("example.txt", "r") as file: content = file.read() print("Содержимое файла:", content)
Регулярные выражения
import re pattern = r'\b[a-zA-Z]{4}\b' text = "This is a test text with some four letter words like test and text." matches = re.findall(pattern, text) print(matches)
Исключения
Создание исключения
# Пользовательское исключение class NegativeNumberError(Exception): """Исключение для обработки отрицательных чисел.""" def __init__(self, message="Число не должно быть отрицательным"): self.message = message super().__init__(self.message) def check_positive(number): if number < 0: # Throw (выброс исключения) raise NegativeNumberError(f"Ошибка: {number} является отрицательным числом!") return number
Обработка исключения
try: file = open('somefile.txt', 'r') content = file.read() except FileNotFoundError: print("Ошибка: файл не найден!") finally: file.close() print("Файл закрыт.")
Классы и объекты
Создание класса и объекта класса
class Person: def __init__(self, name, age): self.name = name self.age = age def introduce(self): return f"Меня зовут {self.name}, и мне {self.age} лет." person = Person("Alice", 25) print(person.introduce())
Наследование
# Базовый класс class Animal: def __init__(self, name): self.name = name def speak(self): raise NotImplementedError("Subclass must implement abstract method") # Дочерний класс class Dog(Animal): def speak(self): return f"{self.name} говорит: Гав-гав!" # Дочерний класс class Cat(Animal): def speak(self): return f"{self.name} говорит: Мяу!" # Использование классов dog = Dog("Шарик") cat = Cat("Мурка") print(dog.speak()) # Шарик говорит: Гав-гав! print(cat.speak()) # Мурка говорит: Мяу!
Специальные методы классов
super()
Метод для вызова методов родительского класса в дочернем классе.
class Parent: def __init__(self): print("Parent init") class Child(Parent): def __init__(self): super().__init__() print("Child init")
__init__()
Метод конструктор, который вызывается при создании объекта класса.
class MyClass: def __init__(self, value): self.value = value
__str__()
Метод, который вызывается для функции str()
и print()
.
class MyClass: def __str__(self): return f"MyClass with value {self.value}
__repr__()
Метод, который вызывается для функции repr()
.
class MyClass: def __repr__(self): return f"MyClass({self.value})"
__call__()
Метод, который позволяет экземплярам класса быть вызываемыми как функции.
class MyCallableClass: def __init__(self, value): self.value = value def __call__(self, increment): self.value += increment return self.value # Создаем экземпляр класса obj = MyCallableClass(10) # Вызываем экземпляр как функцию print(obj(5)) # Выведет: 15 print(obj(3)) # Выведет: 18
__del__()
Метод деструктор, который вызывается при удалении экземпляра
class FileHandler: def __init__(self, filename): self.filename = filename self.file = open(filename, 'w') def write(self, data): self.file.write(data) def __del__(self): # Закрываем файл при удалении объекта if self.file: self.file.close() print(f'Файл {self.filename} закрыт.') # Создаем экземпляр класса и записываем данные в файл handler = FileHandler('example.txt') handler.write('Hello, world!') # Принудительно удаляем объект, чтобы вызвать __del__ del handler # Проверяем, что файл закрыт # Выведет: Файл example.txt закрыт.
__len__()
Метод, который возвращает длину объекта для функции len()
.
class MyCollection: def __len__(self): return len(self.items)
__getitem__(), __setitem__(), __delitem__()
__getitem__
– метод, который позволяет экземплярам класса использовать оператор индексирования
__setitem__
– метод, который позволяет экземплярам класса устанавливать значения по индексу.
__delitem__
– метод который позволяет экземплярам класса удалять элементы по индексу.
class CustomList: def __init__(self, data=None): if data is None: self.data = [] else: self.data = data def __getitem__(self, index): return self.data[index] def __setitem__(self, index, value): self.data[index] = value def __delitem__(self, index): del self.data[index] def __repr__(self): return repr(self.data) # Создаем экземпляр класса CustomList my_list = CustomList([10, 20, 30, 40, 50]) # Доступ к элементам по индексу print(my_list[0]) # Выведет: 10 print(my_list[3]) # Выведет: 40 # Присваивание значений по индексу my_list[1] = 25 print(my_list) # Выведет: [10, 25, 30, 40, 50] # Удаление элементов по индексу del my_list[2] print(my_list) # Выведет: [10, 25, 40, 50] # Удаление элементов по срезу del my_list[1:3] print(my_list) # Выведет: [10, 50]
__iter__ + __next__
__iter__
– метод, который возвращает итератор объекта.
__next__
– метод, который возвращает следующий элемент итератора.
class MyRangeIterator: def __init__(self, start, end): self.current = start self.end = end def __iter__(self): return self def __next__(self): if self.current < self.end: current = self.current self.current += 1 return current else: raise StopIteration class MyRange: def __init__(self, start, end): self.start = start self.end = end def __iter__(self): return MyRangeIterator(self.start, self.end) # Пример использования my_range = MyRange(1, 5) for num in my_range: print(num)
__enter__() и __exit__()
Методы для менеджеров контекста с with-оператором
class ManagedFile: def __init__(self, filename, mode): self.filename = filename self.mode = mode def __enter__(self): self.file = open(self.filename, self.mode) return self.file def __exit__(self, exc_type, exc_value, traceback): self.file.close() # Пример использования with ManagedFile('example.txt', 'w') as f: f.write('Hello, world!') # После выполнения блока 'with' файл будет автоматически закрыт
Модули
Использование модуля
# Импорт модуля import math # Использование функции из модуля print("Квадратный корень из 16:", math.sqrt(16))
Создание пакетов
# Структура пакета # my_package/ # ├── __init__.py # ├── module1.py # └── module2.py # __init__.py from .module1 import func1 from .module2 import func2 # module1.py def func1(): return "Hello from module1" # module2.py def func2(): return "Hello from module2" # main.py from my_package import func1, func2 print(func1()) print(func2())
Списковые включения (List comprehensions)
# Генерация списка квадратов чисел от 0 до 9 squares = [x ** 2 for x in range(10)] print("Квадраты чисел от 0 до 9:", squares)
Декораторы
def my_decorator(func): def wrapper(): print("Что-то делаем до функции") func() print("Что-то делаем после функции") return wrapper @my_decorator def say_hello(): print("Hello!") say_hello()
Генераторы
def my_generator(): for i in range(3): yield i gen = my_generator() for value in gen: print(value)
Менеджер контекста
class MyContextManager: def __enter__(self): print("Входим в контекст") return self def __exit__(self, exc_type, exc_value, traceback): print("Выходим из контекста") with MyContextManager(): print("Внутри контекста")
Замыкания
def outer_function(msg): def inner_function(): print(msg) return inner_function closure = outer_function("Hello from closure!") closure()
Асинхронное программирование
import asyncio async def my_coroutine(): print("Начало") await asyncio.sleep(1) print("Конец") async def main(): await asyncio.gather(my_coroutine(), my_coroutine()) asyncio.run(main())
Многопоточность и многопроцессорность
import threading import multiprocessing def worker(): print("Работа в потоке") # Многопоточность thread = threading.Thread(target=worker) thread.start() thread.join() # Многопроцессорность process = multiprocessing.Process(target=worker) process.start() process.join()