Иногда функция вызывается с одними и теми же аргументами - зачем считать заново? 🤔
Используй встроенный кэш 👇
from functools import lru_cache
@lru_cache(maxsize=128)
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)
💡 Теперь результаты сохраняются, и повторные вызовы работают мгновенно 🚀
📌 Проверка:
print(fib(100)) # считается очень быстро
🔥 Где полезно:
⚠️ Важно:
#python #оптимизация
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Иногда нужно быстро понять - где тормозит код 👇
import time
start = time.time()
# твой код
sum(range(10_000_000))
print(time.time() - start)
timeit:
import timeit
print(timeit.timeit("sum(range(10_000_000))", number=1))
📌 Почему это круче:
🔥 Для серьёзного анализа - мастхэв
#python #performance
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Нужно сходить в API? В Python это делается максимально просто 👇
import requests
res = requests.get("https://api.github.com")
print(res.status_code)
💡 Получить JSON:
data = res.json()
print(data)
📌 Отправить POST:
requests.post("https://example.com", json={"name": "Alex"})
🔥 Почему удобно:
⚠️ Не забывай обрабатывать ошибки:
if res.status_code == 200:
print("OK")
🚀 База для работы с любыми API
#python #api
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Декораторы позволяют оборачивать функции и добавлять им поведение 👇
def log(func):
def wrapper(*args, **kwargs):
print(f"Вызов: {func.__name__}")
return func(*args, **kwargs)
return wrapper
Использование:
@log
def say_hi(name):
print(f"Привет, {name}")
say_hi("Alex")
👉 Вывод:
Вызов: say_hi
Привет, Alex
💡 Где это используется:
— логирование
— проверка прав
— кэширование
— замер времени
🔥 Это основа многих фреймворков (например, Flask, Django)
🚀 Освоишь декораторы - начнёшь писать реально мощный код
#python #продвинутый
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Часто работаешь с JSON? Можно сразу превращать его в удобные объекты 👇
import json
from types import SimpleNamespace
data = '{"name": "Alex", "age": 25}'
obj = json.loads(data, object_hook=lambda d: SimpleNamespace(**d))
print(obj.name) # Alex
data["name"] можно писать obj.name
data = '{"user": {"name": "Alex"}}'
obj = json.loads(data, object_hook=lambda d: SimpleNamespace(**d))
print(obj.user.name)
🔥 Удобно для:
— работы с API
— прототипирования
— чистого кода без
[]⚠️ Но будь осторожен:
— нет автодополнения как у dataclass
— меньше контроля над структурой
🚀 Быстро и красиво
#python #json
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Ты наверняка использовал такое 👇
with open("file.txt") as f:
data = f.read()
Но можно создавать и свои
with
from contextlib import contextmanager
@contextmanager
def timer():
import time
start = time.time()
yield
print(time.time() - start)
Использование:
with timer():
sum(range(10_000_000))
🔹 код до
yield выполняется при входе🔹 код после
yield при выходе🔥 Где полезно:
🔹 таймеры
🔹 подключение к БД
🔹 временные файлы
🔹 управление ресурсами
#python #advanced
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2
lambda — это способ создать анонимную функцию прямо в момент использования.Когда нужна простая операция «на лету», писать полноценный
def бывает избыточно.Синтаксис:
lambda аргументы: выражение
Пример:
square = lambda x: x ** 2
print(square(5)) # 25
То же самое через
def:
def square(x):
return x ** 2
📌 Где
lambda особенно полезны?1️⃣ Сортировка
users = [
{"name": "Anna", "age": 25},
{"name": "Bob", "age": 20},
]
users.sort(key=lambda user: user["age"])
print(users)
2️⃣ Работа с
map()
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)
3️⃣ Фильтрация через
filter()
numbers = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens)
⚠️ Важно помнить:
*
lambda подходит только для ОДНОГО выражения* сложную логику лучше выносить в обычные функции
* читаемость кода важнее «красоты»
Плохой пример:
lambda x: x ** 2 if x > 0 else 0 if x == 0 else -1
Иногда обычный
def намного понятнее 👌💡 Правило:
Если
lambda читается за пару секунд - отлично.Если нужно всматриваться - пишем обычную функцию.
#python #backend #programming #coding
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4❤🔥1
В Python есть модуль
itertools с кучей мощных инструментов 👇
from itertools import count
for i in count(1):
print(i)
👉 Вывод:
1
2
3
...
count(1) создаёт бесконечный генератор чисел начиная с 1📌 Можно указать шаг:
from itertools import count
for i in count(0, 5):
print(i)
👉 Результат:
0
5
10
15
...
🔥 Полезно для:
— генерации ID
— бесконечных циклов
— работы с потоками данных
⚠️ Осторожно: цикл реально бесконечный 😄
#python #itertools
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Минимальный бот — буквально в несколько строк 👇
from telegram import Update
from telegram.ext import ApplicationBuilder, MessageHandler, filters, ContextTypes
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(update.message.text)
app = ApplicationBuilder().token("TOKEN").build()
app.add_handler(MessageHandler(filters.TEXT, echo))
app.run_polling()
📌 Установка:
pip install python-telegram-bot
💡 Что делает бот:
— получает сообщение
— отправляет его обратно
🔥 Дальше можно добавить:
— команды
— кнопки
— базы данных
— AI / API
🚀 Отличный старт для своих Telegram-проектов
#python #telegram #bot
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1
В Python можно передать список как отдельные аргументы с помощью
* 👇
def add(a, b, c):
print(a + b + c)
nums = [1, 2, 3]
add(*nums)
👉 Результат:
6
add(*nums)
Python превращает это в:
add(1, 2, 3)
📌 Работает и с кортежами:
coords = (10, 20)
print(*coords)
🔥 Очень полезно при:
— работе с функциями
— динамических данных
— распаковке API-ответов
🚀
*args и распаковка - одна из самых удобных фишек Python#python #фишки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2