Создание и использование пользовательских исключений 🚨🛠️
Суть темы:
Пользовательские исключения позволяют создавать собственные типы ошибок, которые лучше отражают специфику вашего приложения. 🎯 Это делает код более читаемым и упрощает обработку ошибок. 🛠️
Применение:
Создание специфических ошибок для вашего приложения. 🎯
Улучшение читаемости и поддерживаемости кода. 📖
Упрощение отладки и обработки ошибок. 🐛
Пример кода:
Почему это круто?
Пользовательские исключения делают код более понятным и выразительным. 🎨
Суть темы:
Пользовательские исключения позволяют создавать собственные типы ошибок, которые лучше отражают специфику вашего приложения. 🎯 Это делает код более читаемым и упрощает обработку ошибок. 🛠️
Применение:
Создание специфических ошибок для вашего приложения. 🎯
Улучшение читаемости и поддерживаемости кода. 📖
Упрощение отладки и обработки ошибок. 🐛
Пример кода:
class NegativeNumberError(Exception):
"""Исключение, которое выбрасывается, если число отрицательное."""
def __init__(self, value):
self.value = value
super().__init__(f"Отрицательное число недопустимо: {value}")
def check_positive(number):
if number < 0:
raise NegativeNumberError(number)
return number
try:
check_positive(-10)
except NegativeNumberError as e:
print(e) # Вывод: Отрицательное число недопустимо: -10
Почему это круто?
Пользовательские исключения делают код более понятным и выразительным. 🎨
👍2
Работа с регулярными выражениями (модуль re) 🔍✨
Суть темы:
Регулярные выражения — это мощный инструмент для поиска и обработки текста. 🧩 С их помощью можно находить, извлекать и заменять подстроки в тексте по сложным шаблонам. 🛠️ В Python для работы с регулярными выражениями используется модуль re. 🐍
Применение:
Поиск и извлечение данных из текста. 📄
Валидация вводимых данных (например, email или телефонных номеров). 📧📞
Пример кода:
Почему это круто?
Регулярные выражения позволяют решать сложные задачи обработки текста одной строкой кода. 🎯
Они универсальны и поддерживаются во многих языках программирования. 🌍
Суть темы:
Регулярные выражения — это мощный инструмент для поиска и обработки текста. 🧩 С их помощью можно находить, извлекать и заменять подстроки в тексте по сложным шаблонам. 🛠️ В Python для работы с регулярными выражениями используется модуль re. 🐍
Применение:
Поиск и извлечение данных из текста. 📄
Валидация вводимых данных (например, email или телефонных номеров). 📧📞
Пример кода:
import re
# Поиск email-адресов в тексте
text = "Свяжитесь с нами по email: support@example.com или info@example.org."
emails = re.findall(r'[\w\.-]+@[\w\.-]+', text)
print(emails) # Вывод: ['support@example.com', 'info@example.org']
# Замена текста по шаблону
new_text = re.sub(r'\d{2}-\d{2}-\d{4}', 'ДД-ММ-ГГГГ', 'Дата: 12-05-2023')
print(new_text) # Вывод: Дата: ДД-ММ-ГГГГ
Почему это круто?
Регулярные выражения позволяют решать сложные задачи обработки текста одной строкой кода. 🎯
Они универсальны и поддерживаются во многих языках программирования. 🌍
🔥1
Работа с лямбда-функциями и функциями высшего порядка 🎯✨
Суть темы:
Лямбда-функции — это анонимные функции, которые можно использовать для создания простых операций в одну строку. 🧩 Функции высшего порядка — это функции, которые принимают другие функции в качестве аргументов или возвращают их. 🛠️
Применение:
Создание простых функций "на лету". 🚀
Использование в функциях высшего порядка, таких как map, filter и reduce. 🔄
Упрощение кода и повышение его читаемости. 📖
Пример кода:
Почему это круто?
Лямбда-функции позволяют писать компактный и выразительный код. 🎨
Суть темы:
Лямбда-функции — это анонимные функции, которые можно использовать для создания простых операций в одну строку. 🧩 Функции высшего порядка — это функции, которые принимают другие функции в качестве аргументов или возвращают их. 🛠️
Применение:
Создание простых функций "на лету". 🚀
Использование в функциях высшего порядка, таких как map, filter и reduce. 🔄
Упрощение кода и повышение его читаемости. 📖
Пример кода:
# Лямбда-функция для сложения двух чисел
add = lambda x, y: x + y
print(add(5, 3)) # Вывод: 8
# Использование лямбда-функции с map
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # Вывод: [1, 4, 9, 16]
# Использование лямбда-функции с filter
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # Вывод: [2, 4]
Почему это круто?
Лямбда-функции позволяют писать компактный и выразительный код. 🎨
🔥1
Работа с модулем collections 🧩📚
Суть темы:
Модуль collections предоставляет специализированные типы данных, которые расширяют возможности стандартных коллекций Python. 🛠️
Применение:
Подсчет элементов с помощью Counter. 🔢
Создание именованных кортежей с помощью namedtuple. 📝
Управление порядком элементов с помощью deque. 🔄
Пример кода:
Почему это круто?
Модуль collections предоставляет мощные инструменты для работы с коллекциями. 💪
Суть темы:
Модуль collections предоставляет специализированные типы данных, которые расширяют возможности стандартных коллекций Python. 🛠️
Применение:
Подсчет элементов с помощью Counter. 🔢
Создание именованных кортежей с помощью namedtuple. 📝
Управление порядком элементов с помощью deque. 🔄
Пример кода:
from collections import Counter, namedtuple, deque
# Использование Counter для подсчета элементов
data = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count = Counter(data)
print(count) # Вывод: Counter({'apple': 3, 'banana': 2, 'orange': 1})
# Использование namedtuple для создания именованных кортежей
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p.x, p.y) # Вывод: 10 20
# Использование deque для управления порядком элементов
d = deque([1, 2, 3])
d.appendleft(0)
d.append(4)
print(d) # Вывод: deque([0, 1, 2, 3, 4])
Почему это круто?
Модуль collections предоставляет мощные инструменты для работы с коллекциями. 💪
🔥2
Работа с модулем itertools 🔄✨
Суть темы:
Модуль itertools предоставляет набор инструментов для работы с итераторами. 🛠️ Эти инструменты позволяют создавать сложные итераторы для обработки данных, комбинирования элементов и генерации последовательностей. 🎯
Применение:
Генерация комбинаций и перестановок. 🔢
Создание бесконечных итераторов. ♾️
Обработка данных с помощью цепочек итераторов. 🔗
Пример кода:
Почему это круто?
Модуль itertools предоставляет мощные инструменты для работы с итераторами. 💪
Эти инструменты делают код более читаемым и эффективным. 🚀
Суть темы:
Модуль itertools предоставляет набор инструментов для работы с итераторами. 🛠️ Эти инструменты позволяют создавать сложные итераторы для обработки данных, комбинирования элементов и генерации последовательностей. 🎯
Применение:
Генерация комбинаций и перестановок. 🔢
Создание бесконечных итераторов. ♾️
Обработка данных с помощью цепочек итераторов. 🔗
Пример кода:
import itertools
# Генерация всех возможных комбинаций
combinations = list(itertools.combinations('ABC', 2))
print(combinations) # Вывод: [('A', 'B'), ('A', 'C'), ('B', 'C')]
# Генерация бесконечного итератора
count = itertools.count(start=10, step=2)
for _ in range(5):
print(next(count)) # Вывод: 10, 12, 14, 16, 18
# Цепочка итераторов
chain = itertools.chain('ABC', 'DEF')
print(list(chain)) # Вывод: ['A', 'B', 'C', 'D', 'E', 'F']
Почему это круто?
Модуль itertools предоставляет мощные инструменты для работы с итераторами. 💪
Эти инструменты делают код более читаемым и эффективным. 🚀
🔥2
Работа с модулем functools 🛠️✨
Суть темы:
Модуль functools предоставляет набор инструментов для работы с функциями. 🎯 Эти инструменты позволяют создавать более гибкие и мощные функции, такие как частичные функции, мемоизация и декораторы. 🛠️
Применение:
Создание частичных функций с помощью partial. 🔧
Мемоизация результатов функций с помощью lru_cache. 🧠
Использование декораторов для изменения поведения функций. 🎩
Пример кода:
Почему это круто?
Модуль functools предоставляет мощные инструменты для работы с функциями. 💪
Эти инструменты делают код более читаемым и эффективным. 🚀
Суть темы:
Модуль functools предоставляет набор инструментов для работы с функциями. 🎯 Эти инструменты позволяют создавать более гибкие и мощные функции, такие как частичные функции, мемоизация и декораторы. 🛠️
Применение:
Создание частичных функций с помощью partial. 🔧
Мемоизация результатов функций с помощью lru_cache. 🧠
Использование декораторов для изменения поведения функций. 🎩
Пример кода:
from functools import partial, lru_cache
# Создание частичной функции
def multiply(x, y):
return x * y
double = partial(multiply, 2)
print(double(5)) # Вывод: 10
# Мемоизация результатов функции
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # Вывод: 55
Почему это круто?
Модуль functools предоставляет мощные инструменты для работы с функциями. 💪
Эти инструменты делают код более читаемым и эффективным. 🚀
🔥2
🕵️♂️ Однострочный swap переменных без временной переменной
Обычно, если нужно поменять значения двух переменных местами, программисты используют временную переменную. В Python можно сделать это красиво и коротко!
💡 Пример:
Результат:
🔥 Без лишнего кода и лишних переменных!
Обычно, если нужно поменять значения двух переменных местами, программисты используют временную переменную. В Python можно сделать это красиво и коротко!
💡 Пример:
a, b = 5, 10
a, b = b, a # Магия кортежей!
print(a, b)
Результат:
10 5
🔥 Без лишнего кода и лишних переменных!
🔥3
🎭 "Секретные" подчеркивания в Python
В Python подчеркивания (_) используются не просто так! Вот несколько интересных случаев:
✅ Одиночное _ в интерактивном режиме Python
Последний результат сохраняется в переменной _:
✅ _ как имя переменной для неиспользуемых значений
Если переменная не нужна, её часто обозначают _:
✅ Двойное подчеркивание (__) в именах переменных
Если переменная начинается с __, она получает "защиту" от случайного доступа (name mangling):
Результат (сокращенно):
В Python подчеркивания (_) используются не просто так! Вот несколько интересных случаев:
✅ Одиночное _ в интерактивном режиме Python
Последний результат сохраняется в переменной _:
>>> 10 + 5
15
>>> _ * 2 # Используем результат предыдущей операции
30
✅ _ как имя переменной для неиспользуемых значений
Если переменная не нужна, её часто обозначают _:
for _ in range(3):
print("Hello!") # Повторит 3 раза, но переменная нам не нужна
✅ Двойное подчеркивание (__) в именах переменных
Если переменная начинается с __, она получает "защиту" от случайного доступа (name mangling):
class Example:
def __init__(self):
self.__secret = "Не трогай меня!"
obj = Example()
print(dir(obj)) # Смотрим атрибуты, Python спрятал переменную!
Результат (сокращенно):
['_Example__secret', '__class__', ...]
🔥3
🐍 Генераторы и их "волшебная" экономия памяти
Генераторы в Python — это не просто стиль написания кода, это ещё и способ экономить память! Вместо того чтобы создавать и хранить весь список в памяти, генератор создает элементы "на лету", по одному за раз.
💡 Пример использования генератора:
Результат:
🔑 С помощью yield функция становится генератором, и каждый вызов next() будет возвращать следующий элемент. Такой подход уменьшает расход памяти, особенно если элементов много!
Генераторы в Python — это не просто стиль написания кода, это ещё и способ экономить память! Вместо того чтобы создавать и хранить весь список в памяти, генератор создает элементы "на лету", по одному за раз.
💡 Пример использования генератора:
def my_generator():
for i in range(5):
yield i
gen = my_generator()
print(next(gen)) # 0
print(next(gen)) # 1
Результат:
0
1
🔑 С помощью yield функция становится генератором, и каждый вызов next() будет возвращать следующий элемент. Такой подход уменьшает расход памяти, особенно если элементов много!
🔥2
🔄 zip() — идеальный способ для параллельного обхода нескольких списков
Функция zip() помогает вам одновременно работать с несколькими коллекциями. Она "пакует" их элементы по парам, что удобно, когда нужно итеративно проходить по двум или больше спискам.
💡 Пример использования:
Результат:
🎯 Преимущество: Не нужно использовать индексы для доступа к элементам! zip() "параллельно" соединяет элементы, делая код более читаемым и компактным.
Функция zip() помогает вам одновременно работать с несколькими коллекциями. Она "пакует" их элементы по парам, что удобно, когда нужно итеративно проходить по двум или больше спискам.
💡 Пример использования:
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]
for name, score in zip(names, scores):
print(f"{name} scored {score}")
Результат:
Alice scored 85
Bob scored 90
Charlie scored 78
🎯 Преимущество: Не нужно использовать индексы для доступа к элементам! zip() "параллельно" соединяет элементы, делая код более читаемым и компактным.
🔥1
🚀 Крутая фишка enumerate() — избавляемся от лишних счетчиков!
Часто нужно перебирать список и знать индекс каждого элемента. Вместо того чтобы вручную заводить i = 0 и увеличивать его в цикле, используйте enumerate()!
💡 Пример использования:
Результат:
🔥 Почему это удобно?
Код становится чище и короче
Можно сразу задать нужный стартовый индекс (start=1)
Часто нужно перебирать список и знать индекс каждого элемента. Вместо того чтобы вручную заводить i = 0 и увеличивать его в цикле, используйте enumerate()!
💡 Пример использования:
fruits = ["🍎 Apple", "🍌 Banana", "🍒 Cherry"]
for index, fruit in enumerate(fruits, start=1):
print(f"{index}. {fruit}")
Результат:
1. 🍎 Apple
2. 🍌 Banana
3. 🍒 Cherry
🔥 Почему это удобно?
Код становится чище и короче
Можно сразу задать нужный стартовый индекс (start=1)
🔥2
🎲 Случайный выбор из списка с random.choice()
Если нужно выбрать случайный элемент из списка, не нужно писать сложные циклы. Просто используйте random.choice()!
💡 Пример использования:
Результат (например):
🎯 Дополнительно:
random.choices() позволяет выбрать несколько элементов сразу
random.sample() выбирает без повторений
Используйте random и пусть Python делает выбор за вас! 🎰
Если нужно выбрать случайный элемент из списка, не нужно писать сложные циклы. Просто используйте random.choice()!
💡 Пример использования:
import random
movies = ["🎬 Inception", "🎥 Interstellar", "📽 The Matrix", "🎞 The Dark Knight"]
random_movie = random.choice(movies)
print(f"Сегодня стоит посмотреть: {random_movie}")
Результат (например):
Сегодня стоит посмотреть: 🎞 The Dark Knight
🎯 Дополнительно:
random.choices() позволяет выбрать несколько элементов сразу
random.sample() выбирает без повторений
Используйте random и пусть Python делает выбор за вас! 🎰
🔥3
⏳ Как засечь время выполнения кода? timeit в помощь!
Хотите узнать, сколько времени занимает выполнение кода? Python предлагает удобный модуль timeit, который точно измеряет производительность.
💡 Пример использования:
Результат (пример):
🔥 Зачем использовать timeit?
Точнее, чем time.time(), так как выполняет код многократно
Удобен для оптимизации алгоритмов
Хотите узнать, сколько времени занимает выполнение кода? Python предлагает удобный модуль timeit, который точно измеряет производительность.
💡 Пример использования:
import timeit
code = """
result = [x**2 for x in range(1000)]
"""
execution_time = timeit.timeit(code, number=1000)
print(f"Время выполнения: {execution_time:.5f} секунд")
Результат (пример):
Время выполнения: 0.08523 секунд
🔥 Зачем использовать timeit?
Точнее, чем time.time(), так как выполняет код многократно
Удобен для оптимизации алгоритмов
❤2🔥1
🔥 Расширенный print() — настраивай вывод под себя!
Функция print() в Python может намного больше, чем просто выводить текст. Можно менять разделитель и конец строки!
💡 Пример 1: Задаем кастомный разделитель (sep)
Результат:
💡 Пример 2: Изменяем конец строки (end)
Результат:
🎯 Когда это полезно?
sep удобно использовать для форматирования вывода
end помогает избежать лишних переводов строк
Теперь print() — это не просто вывод, а гибкий инструмент! 🚀
Функция print() в Python может намного больше, чем просто выводить текст. Можно менять разделитель и конец строки!
💡 Пример 1: Задаем кастомный разделитель (sep)
print("Python", "is", "awesome", sep="🔥")
Результат:
Python🔥is🔥awesome
💡 Пример 2: Изменяем конец строки (end)
print("Первая строка", end=" 😎 ")
print("Вторая строка")
Результат:
Первая строка 😎 Вторая строка
🎯 Когда это полезно?
sep удобно использовать для форматирования вывода
end помогает избежать лишних переводов строк
Теперь print() — это не просто вывод, а гибкий инструмент! 🚀
🔥1
🛠 Как проверить, занята ли нужная переменная? locals() в помощь!
Иногда нужно узнать, существует ли переменная в текущей области видимости. Для этого можно использовать locals()!
💡 Пример использования:
Результат:
🔥 Полезно, когда:
Нужно избежать ошибок при работе с переменными
Отлаживаете код и хотите проверить, какие переменные уже созданы
Иногда нужно узнать, существует ли переменная в текущей области видимости. Для этого можно использовать locals()!
💡 Пример использования:
name = "Alice"
if "name" in locals():
print("Переменная 'name' существует!")
else:
print("Переменная 'name' не найдена.")
Результат:
Переменная 'name' существует!
🔥 Полезно, когда:
Нужно избежать ошибок при работе с переменными
Отлаживаете код и хотите проверить, какие переменные уже созданы
🔥2❤1
📂 Как быстро узнать размер объекта в памяти? sys.getsizeof()!
Хотите узнать, сколько памяти занимает переменная? В Python это можно сделать с помощью sys.getsizeof()!
💡 Пример использования:
Результат (пример):
📌 Интересный факт:
Пустой список занимает 56 байт, даже если в нем нет элементов!
sys.getsizeof() учитывает служебную информацию, поэтому иногда реальный размер данных больше.
Используйте это для оптимизации кода и экономии памяти! 🚀
Хотите узнать, сколько памяти занимает переменная? В Python это можно сделать с помощью sys.getsizeof()!
💡 Пример использования:
import sys
a = 10
b = "Hello, world!"
c = [1, 2, 3, 4, 5]
print(sys.getsizeof(a)) # Размер переменной a
print(sys.getsizeof(b)) # Размер строки b
print(sys.getsizeof(c)) # Размер списка c
Результат (пример):
28 # Размер int
62 # Размер строки
96 # Размер списка
📌 Интересный факт:
Пустой список занимает 56 байт, даже если в нем нет элементов!
sys.getsizeof() учитывает служебную информацию, поэтому иногда реальный размер данных больше.
Используйте это для оптимизации кода и экономии памяти! 🚀
🌐 Как "пропускать" элементы в цикле с помощью continue?
Когда вам нужно пропустить текущую итерацию цикла и перейти к следующей, не завершая весь цикл, можно использовать ключевое слово continue. Это полезно, например, когда хотите исключить определённые элементы без прерывания работы цикла.
💡 Пример использования:
Результат:
🔥 Когда это удобно?
Если нужно исключить некоторые условия без завершения цикла
Позволяет сократить код, не используя вложенные if конструкции
Когда вам нужно пропустить текущую итерацию цикла и перейти к следующей, не завершая весь цикл, можно использовать ключевое слово continue. Это полезно, например, когда хотите исключить определённые элементы без прерывания работы цикла.
💡 Пример использования:
for i in range(10):
if i % 2 == 0:
continue # Пропускаем чётные числа
print(i)
Результат:
1
3
5
7
9
🔥 Когда это удобно?
Если нужно исключить некоторые условия без завершения цикла
Позволяет сократить код, не используя вложенные if конструкции
🔥2
🎨 Цветной вывод с использованием модуля colorama
Хотите сделать вывод вашего кода более ярким и заметным? В Python это можно сделать с помощью модуля colorama, который добавляет цвет к выводу в консоли!
💡 Пример использования:
Результат:
Текст "Это текст красного цвета!" будет красным
Текст "А это — зелёный!" будет зелёным
🎯 Когда это полезно?
Удобно для выделения ошибок или важных сообщений в логах
Применяется для создания более красочных выводов в консольных приложениях
Хотите сделать вывод вашего кода более ярким и заметным? В Python это можно сделать с помощью модуля colorama, который добавляет цвет к выводу в консоли!
💡 Пример использования:
from colorama import init, Fore
init() # Инициализация
print(Fore.RED + "Это текст красного цвета!")
print(Fore.GREEN + "А это — зелёный!")
Результат:
Текст "Это текст красного цвета!" будет красным
Текст "А это — зелёный!" будет зелёным
🎯 Когда это полезно?
Удобно для выделения ошибок или важных сообщений в логах
Применяется для создания более красочных выводов в консольных приложениях
👍2
🔢 Секреты использования sorted() — сортировка с кастомной логикой!
Функция sorted() позволяет сортировать список не только по умолчанию, но и с помощью собственной логики сортировки через параметр key.
💡 Пример использования с ключом key:
Результат:
🔥 Как это работает?
sorted() сортирует элементы с использованием функции, переданной в key. В примере мы сортируем по длине каждого слова.
Вы можете использовать любую логику для сортировки, например, сортировать по обратному порядку, по первой букве или числовым значениям.
Функция sorted() позволяет сортировать список не только по умолчанию, но и с помощью собственной логики сортировки через параметр key.
💡 Пример использования с ключом key:
# Список слов
words = ["banana", "apple", "cherry", "blueberry"]
# Сортируем по длине слова
sorted_words = sorted(words, key=len)
print(sorted_words)
Результат:
['apple', 'banana', 'cherry', 'blueberry']
🔥 Как это работает?
sorted() сортирует элементы с использованием функции, переданной в key. В примере мы сортируем по длине каждого слова.
Вы можете использовать любую логику для сортировки, например, сортировать по обратному порядку, по первой букве или числовым значениям.
🔥2❤1
🐍 lambda — краткие анонимные функции в одну строку
Иногда нужна функция, но ради одной операции не хочется писать def. В таких случаях помогает lambda — анонимные функции в одну строку!
💡 Пример использования:
Результат:
🔥 Где полезно?
Когда нужно передать функцию в map(), filter(), sorted()
Для компактного кода без создания лишних функций
💡 Пример с sorted() и lambda:
Результат:
Иногда нужна функция, но ради одной операции не хочется писать def. В таких случаях помогает lambda — анонимные функции в одну строку!
💡 Пример использования:
square = lambda x: x ** 2
print(square(5)) # 25
Результат:
25
🔥 Где полезно?
Когда нужно передать функцию в map(), filter(), sorted()
Для компактного кода без создания лишних функций
💡 Пример с sorted() и lambda:
words = ["banana", "apple", "cherry", "blueberry"]
sorted_words = sorted(words, key=lambda x: x[-1]) # Сортировка по последней букве
print(sorted_words)
Результат:
['banana', 'apple', 'blueberry', 'cherry']
🔥2
🔎 Фильтрация данных с filter()
Если нужно отфильтровать элементы списка по какому-то условию, используйте filter(). Эта функция возвращает только те элементы, которые соответствуют заданному критерию.
💡 Пример использования:
Результат:
🔥 Когда использовать?
Когда нужно убрать ненужные элементы из списка
Работает быстрее, чем for + if
Если нужно отфильтровать элементы списка по какому-то условию, используйте filter(). Эта функция возвращает только те элементы, которые соответствуют заданному критерию.
💡 Пример использования:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)
Результат:
[2, 4, 6, 8, 10]
🔥 Когда использовать?
Когда нужно убрать ненужные элементы из списка
Работает быстрее, чем for + if
🔥1