Python_No_Panic
2.06K subscribers
123 photos
18 videos
49 links
Самый перспективный, полезный и ламповый канал по Python в русскоязычном телеграме!

Обучающие посты в хронологическом порядке, посты по софт скиллам и чат, где вам всегда помогут админы и комьюнити.

Сотрудничество:
@Niik_Whaale
Download Telegram
📚 Метаклассы в Python 🧑‍💻

Метаклассы — это классы для создания других классов! 🛠️

Они позволяют контролировать, как создаются классы, и могут добавлять новые атрибуты или изменять их поведение. Метаклассы могут быть полезны в таких случаях, как паттерн Singleton или создание API высокого уровня.

🔍 Применение:
1. Создание гибких API.
2. Валидация атрибутов классов.
3. Автоматическое добавление методов или атрибутов.

Пример:
 
class Meta(type):
def __new__(cls, name, bases, dct):
dct['created_by'] = "Meta class"
return super().__new__(cls, name, bases, dct)

class MyClass(metaclass=Meta):
pass

obj = MyClass()
print(obj.created_by) # Output: Meta class


🔑 Результат выполнения:
 
Meta class
👍3🤯2
🐍 Однострочные функции: Лямбда

Лямбда-функции (анонимные функции) позволяют создавать компактные выражения прямо в строке, где они нужны.

💡 Когда использовать?
1. Если нужно создать небольшую функцию без лишнего кода.
2. Для использования внутри таких функций как map, filter, sorted.

Пример:
 
# Обычная функция
def square(x):
return x ** 2

# Эквивалент с лямбда
square = lambda x: x ** 2
print(square(5)) # 25


Пример использования с sorted:

pairs = [(1, 'one'), (3, 'three'), (2, 'two')]
pairs.sort(key=lambda pair: pair[1]) # Сортировка по второму элементу
print(pairs) # [(1, 'one'), (3, 'three'), (2, 'two')]
👍3🔥1
🙊Тайна вывода

Что выведет код?
 
def mystery(a, b=[]):
b.append(a)
return b

print(mystery(1))
print(mystery(2))
print(mystery(3))


Вопрос: Каков результат выполнения программы? Почему?
📌 Подсказка: Вспомните про работу с изменяемыми объектами.
👍1🔥1
Челлендж: «Генератор паролей»

Привет, кодеры! Сегодня у нас задание — написать генератор надёжных паролей. Требования просты:

🔑 Суть задачи:
Напишите функцию, которая принимает длину пароля и создаёт случайный пароль, содержащий:
1. Заглавные и строчные буквы,
2. Цифры,
3. Специальные символы (!@#$%^&*() и т.д.).

Усложнение для профи:
Добавьте возможность задавать опциональные параметры:
1. Исключать похожие символы (O, 0, l, 1 и т.д.),
2. Создавать запоминающиеся пароли (например, из случайных слов).

💡 Подсказки:
1. Для работы с символами используйте модули string и random.
2. Если захочется большего, изучите возмож
pythoности secrets — это безопасная альтернатива для генерации случайных данных.
3. Попробуйте создать минимальный интерфейс: пусть пользователь сам решает, какие опции ему нужны!


— Напиши свой генератор, поделись кодом и давай обсудим! 💬
👍3
Асинхронное программирование

Асинхронное программирование позволяет выполнять задачи одновременно без создания потоков! Это очень полезно, когда нужно обрабатывать множество запросов одновременно (например, веб-сервисы или API). 🌐

🔍 Применение:
1. Веб-сервисы с высокой нагрузкой (например, FastAPI).
2. Обработка данных и API без блокировки.
3. Массовая обработка соединений (WebSocket).

Пример:
 
import asyncio

async def fetch_data():
print("Fetching...")
await asyncio.sleep(2)
print("Done!")

asyncio.run(fetch_data())


🔑 Результат выполнения
 
Fetching...
Done!
🔥1🤔1
📌 Динамическое изменение функций во время выполнения

Python позволяет менять код на лету! Вы можете подменять реализацию функций прямо во время выполнения программы.

💡 Это полезно, например, для тестирования или мока функций.

Пример:
 
def greet():
print("Hello!")

# Обычное поведение
greet() # Hello!

# Подменяем функцию
greet = lambda: print("Hi!")
greet() # Hi
🔥1
Скорость функции

Какой код быстрее?
 
# Вариант 1
result = [x**2 for x in range(10**6)]

# Вариант 2
result = list(map(lambda x: x**2, range(10**6)))


Вопрос: Какая из функций выполняется быстрее и почему?
📌 Подсказка: Вспомните, как работают list comprehensions и map.
1
Челлендж: «Обратные слова»

Привет! Вот задача на логику и строки:

🔄 Суть задачи:
Напишите функцию, которая принимает строку и возвращает все слова в обратном порядке.

Пример:
Input: "Hello Python World"
Output: "World Python Hello"


Усложнение для профи:
Сделайте так, чтобы слова выводились в обратном порядке букв внутри каждого слова.

Пример:
Input: "Hello Python World"
Output: "Olleh Nohtyp Dlrow"


💡 Подсказки:
1. Для разделения строки на слова используйте метод .split().
2. Попробуйте освоить срезы, например, [::-1] — это мощный инструмент в Python.
3. Чтобы сохранить пробелы в исходной строке, исследуйте методы работы с join и разделителями.


Кто первый справится? Пишите свои решения и обсуждаем! 🎉
Декораторы классов и функций 🛠️

Декораторы — это магия Python, позволяющая изменять или дополнять поведение функций или классов. Это отличный инструмент для кэширования, логирования и контроля доступа. 🔒

🔍 Применение:
1. Логирование.
2. Управление доступом.
3. Кэширование (например, functools.lru_cache).
 
def logger(func):
def wrapper(*args, **kwargs):
print(f"Running {func.__name__}")
return func(*args, **kwargs)
return wrapper

@logger
def say_hello():
print("Hello!")

say_hello()


🔑 Результат выполнения:
 
Hello!
🚀 Генераторы вместо списков

Генераторы позволяют обрабатывать данные по одному элементу, экономя память. Это особенно важно при работе с большими объемами данных.

💡 Чем генераторы лучше?
1. Они не занимают память сразу для всех элементов.
2. Работают лениво, то есть создают элементы "на лету".

Пример:
 
# Генераторное выражение
gen = (x ** 2 for x in range(10**6))

print(next(gen)) # 0
print(next(gen)) # 1

# Генераторы можно использовать в цикле
for num in gen:
if num > 100:
break
print(num)


Попробуйте запустить это с обычным списком list. Ваши ресурсы быстро закончатся! 😄
👍3
Что здесь не так?

Найдите баг в коде.
 
def increment(value, step=1):
return value + step

data = [1, 2, 3]
for i in range(len(data)):
data[i] = increment(data[i])

print(data)


Вопрос: Может ли здесь что-то пойти не так? Как сделать код более безопасным?
📌 Подсказка: Подумайте о том, что будет, если кто-то изменит increment.
Декораторы классов и функций 🛠️

Декораторы — это магия Python, позволяющая изменять или дополнять поведение функций или классов. Это отличный инструмент для кэширования, логирования и контроля доступа. 🔒

🔍 Применение:
1. Логирование.
2. Управление доступом.
3. Кэширование (например, functools.lru_cache).
 
def logger(func):
def wrapper(*args, **kwargs):
print(f"Running {func.__name__}")
return func(*args, **kwargs)
return wrapper

@logger
def say_hello():
print("Hello!")

say_hello()


🔑 Результат выполнения:
 
Hello!
🌌 Расширенная распаковка с * и **

Python умеет красиво разбирать структуры данных на части.

Пример:


# Распаковка списка
numbers = [1, 2, 3, 4, 5]
head, *body, tail = numbers
print(head) # 1
print(body) # [2, 3, 4]
print(tail) # 5


💡 Как использовать ** для словарей?
Вы можете объединять словари с помощью **:

dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3}
merged = {**dict1, **dict2}
print(merged) # {'a': 1, 'b': 2, 'c': 3}
👍1
Игра с числами

Что будет напечатано?
 
a, b = 1, 2
a, b = b, a + b
a, b = b, a + b
print(a, b)


Вопрос: Какой будет результат? Сможете догадаться без запуска?
📌 Подсказка: Попробуйте вручную вычислить значения переменных.
Челлендж: «Число-палиндром»

Включаем математику и алгоритмы!

🔢 Суть задачи:
Напишите функцию, которая находит ближайшее к заданному числу положительное число-палиндром.

Пример:
 
Input: 123

Output: 121


Усложнение для профи:
1. Сделайте так, чтобы функция работала с большими числами.
2. Для любителей математики: добавьте возможность искать сразу N ближайших палиндромов.

💡 Подсказки:
1. Палиндром — это число, которое одинаково читается слева направо и справа налево. Например, 121 или 1221.
2. Попробуйте преобразовать число в строку, чтобы проверить его на палиндромность.
3. Для ускорения поиска используйте цикл и проверку каждого числа.
4. Сможете найти элегантное решение? Дерзайте и делитесь! 👨‍💻👩‍💻
👍1
Менеджеры контекста 📂

Менеджеры контекста — это отличная возможность управлять ресурсами (например, файлами или подключениями), автоматически освобождая их после завершения работы. 👨‍💻

🔍 Применение:
1. Работа с файлами.
2. Подключение к базам данных.
3. Потоки и блокировки.

 
class FileManager:
def __init__(self, filename, mode):
self.file = open(filename, mode)

def __enter__(self):
return self.file

def __exit__(self, exc_type, exc_value, traceback):
self.file.close()

with FileManager("test.txt", "w") as f:
f.write("Hello, world!")


🔑 Результат выполнения:
Файл "test.txt" создается и в нем появляется строка Hello, world!.
Модули functools и itertools ⚙️

Эти модули дают вам мощные инструменты для работы с функциями и итераторами. Это настоящее волшебство Python!

🔍 functools:
1. Каррирование (например, functools.partial).
2. Кэширование (например, functools.lru_cache).itertools:
3. Ленивые итераторы (например, itertools.chain, itertools.islice).
4. Комбинаторика (например, itertools.permutations).

from functools import lru_cache
from itertools import permutations

@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)

print(list(permutations([1, 2, 3])))


🔑 Результат выполнения:
 
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]


🎥 Подробнее:
https://www.youtube.com/watch?v=Qu3dThVy6KQ
🌀 Модуль dataclasses
Создавать классы вручную с полями, конструктором и repr скучно. Модуль dataclasses делает это за вас.

Пример:
 
from dataclasses import dataclass

@dataclass
class Point:
x: int
y: int

p = Point(1, 2)
print(p) # Point(x=1, y=2)


💡 Преимущества:
1. Генерация конструктора и методов (__init__, repr, __eq__).
2. Удобно для хранения данных.
👍1
Чему равен mystery(5)?

 
def mystery(n):
if n == 0:
return 0
return n + mystery(n - 1)


Вопрос: Каков результат выполнения mystery(5)? Что произойдет, если передать большое число?
📌 Подсказка: Вспомните ограничения рекурсии в Python.
📂 Запуск HTTP-сервера в одной строке

Нужно быстро запустить сервер для статических файлов? Python это умеет:
 
python -m http.server 8080


📌 Что делает?
Открывает доступ к текущей папке по адресу http://localhost:8080/.
Удобно для тестирования простых HTML/JS/CSS файлов.
Анализ данных с помощью pandas 📉

Библиотека pandas — это мощный инструмент для анализа данных в Python. Он позволяет работать с таблицами (DataFrame), выполнять статистический анализ и манипуляции с данными.

🔍 Применение:
1. Обработка и анализ данных.
2. Загрузка и экспорт данных в различные форматы (CSV, Excel, SQL).

import pandas as pd

# Создаем DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35]}
df = pd.DataFrame(data)

# Получаем статистику
print(df.describe())

# Сохранение в CSV
df.to_csv('data.csv', index=False)


🔑 Результат выполнения:

Age
count 3.0
mean 30.0
std 5.0
min 25.0
25