Полезные материалы для питониста по Фреймворкам Django, Flask, FastAPI, Pyramid, Tornado и др. По всем вопросам @evgenycarter № 4869337666
Хотите разобраться, как устроены веб-фреймворки и глубже понять Django? На открытом уроке разберёмся с WSGI, HTTP-запросами, маршрутизацией и создадим свой мини-фреймворк.
👉 Вместо сухой теории — код, практика и разбор ключевых механизмов, на которых строятся Django и Flask. Разберёмся, как работают серверы, роутинг и обработка запросов.
Если вы хотите прокачаться в Python-разработке и научиться создавать продвинутые веб-приложения, этот вебинар — идеальный старт.
Спикер Леонид Орлов — опытный преподаватель и разработчик на Python и Django.
🔗 Записывайтесь и получите скидку на большое обучение «Django-разработчик»
https://vk.cc/cJQpKW
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Бесплатная встреча с экспертом ITSM/ESM
✅Решаем ваши ИТ-задачи быстро и эффективно! Подберем идеальное решение!
✅Узнайте, как автоматизировать сервисные процессы в вашей компании.
✅Записывайтесь на бесплатную встречу с экспертом 1С:ITILIUM . Осталось 2 места.
Записаться
#реклама 16+
itilium.ru
О рекламодателе
Как разбогатеть, если всего 10к в кармане?
Расскажем, как приумножать капитал. Живое общение с экспертами.
Узнать больше
#реклама
О рекламодателе
Легкий старт в инвестициях от 100 ₽ в СберБанк Онлайн
Доверьте вложения профессионалам из АО УК «Первая» 💻 и получите возможность заработать 💰
Инвестируйте в готовый портфель акций и облигаций 📊 потенциально надежных российских компаний ✅
Узнать больше
Финансовые услуги оказывает: АО УК «Первая».
#реклама
sberbank.com
О рекламодателе
🔥 Как ускорить Python-код в 10 раз?
Сегодня покажу вам мощный инструмент для оптимизации кода — Numba. Это библиотека, которая позволяет компилировать Python-функции в машинный код, используя JIT-компилятор.
🚀 Как это работает?
Numba использует LLVM для компиляции кода во время выполнения, превращая Python в код, близкий по скорости к C.
Пример
Допустим, у нас есть функция, вычисляющая сумму квадратов чисел:import numpy as np
import time
def sum_of_squares(n):
result = 0
for i in range(n):
result += i ** 2
return result
n = 10**7
start = time.time()
sum_of_squares(n)
print("Обычный Python:", time.time() - start)
Теперь ускорим её с помощью Numba:from numba import jit
@jit(nopython=True)
def sum_of_squares_numba(n):
result = 0
for i in range(n):
result += i ** 2
return result
start = time.time()
sum_of_squares_numba(n)
print("С Numba:", time.time() - start)
📊 Результат:
✅ Код на чистом Python выполняется ~5-10 раз медленнее, чем с Numba.
✅ Numba особенно полезна для математических вычислений и обработки массивов.
✅ Простая аннотация @jit(nopython=True) уже даёт мощный прирост скорости!
Где применять?
✔ Численные расчёты
✔ Обработку данных
✔ Алгоритмы машинного обучения
Попробуйте Numba и напишите в комментариях, удалось ли вам ускорить свой код!
👉@BookPython
10 полезных библиотек для Python-разработчика
Сегодня я подготовил для вас подборку из 10 полезных библиотек, которые могут сделать вашу разработку проще и эффективнее. Поехали! 🚀
1️⃣ Rich – красивый вывод в консоль. Если хотите раскрасить логи, добавить таблицы или анимации – эта библиотека вам пригодится.
📌 pip install rich
2️⃣ Typer – современный способ писать CLI-приложения. Работает на основе аннотаций типов и делает разработку CLI удобнее.
📌 pip install typer
3️⃣ Pendulum – альтернатива datetime
, но с удобным API и встроенной поддержкой часовых поясов.
📌 pip install pendulum
4️⃣ HTTPX – асинхронный клиент для работы с HTTP-запросами. Поддерживает async/await
, в отличие от requests
.
📌 pip install httpx
5️⃣ Pydantic – мощный инструмент для валидации данных и работы с моделями. Особенно полезен в FastAPI.
📌 pip install pydantic
6️⃣ Poetry – современный менеджер зависимостей. Упрощает работу с виртуальными окружениями и пакетами.
📌 pip install poetry
7️⃣ Loguru – удобная альтернатива стандартному logging
. Позволяет логировать без лишнего кода.
📌 pip install loguru
8️⃣ FastAPI – один из самых быстрых Python-фреймворков для создания API. Использует аннотации типов и async/await
.
📌 pip install fastapi
9️⃣ Tqdm – библиотека для удобных progress-bar'ов в терминале. Незаменима при обработке больших данных.
📌 pip install tqdm
🔟 Black – автоматический форматтер кода, который придерживается строгого стиля. Просто устанавливаешь – и больше не думаешь о стиле кода.
📌 pip install black
Какую из этих библиотек вы уже используете? А может, есть другие любимые инструменты? Делитесь в комментариях! 🔥
👉@BookPython
Одной из самых непоследовательных частей синтаксиса Python являются литералы кортежей.
По сути, чтобы создать кортеж, вы просто пишете значения, разделенные запятыми: 1, 2, 3
. Пока что все понятно. А как насчет кортежа, содержащего только один элемент? Вы просто добавляете завершающую запятую к единственному значению: 1,
. Это выглядит несколько некрасиво и может быть подвержено ошибкам, но логика понятна.
А как насчет пустого кортежа? Это просто запятая? Нет, это ()
. Значит ли это, что круглые скобки создают кортеж так же, как и запятые? Нет, это не так. (4)
— это не кортеж, это просто 4
.
Пример:
a = [
(1, 2, 3),
(1, 2),
(1),
(),
]
[type(x) for x in a]
# Результат: [tuple, tuple, int, tuple]
f(1, 2, 3)
не сработает по очевидной причине — вместо этого нужно написать f((1, 2, 3))
.⚡ Как ускорить код на Python? Используем map
, filter
, reduce
⚡
Привет, друзья! Сегодня расскажу о том, как можно ускорить выполнение кода, заменяя обычные циклы на встроенные функции map()
, filter()
и reduce()
. Эти инструменты позволяют писать более компактный, читаемый и быстрый код.
✅ map()
Функция map()
применяется к каждому элементу последовательности и возвращает новый итератор.
❌ Обычный способ:
numbers = [1, 2, 3, 4, 5]
squared = []
for num in numbers:
squared.append(num ** 2)
map()
:
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
map()
использует C-оптимизированную логику, код выполняется быстрее.filter()
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = []
for num in numbers:
if num % 2 == 0:
evens.append(num)
filter()
:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = list(filter(lambda x: x % 2 == 0, numbers))
reduce()
numbers = [1, 2, 3, 4, 5]
product = 1
for num in numbers:
product *= num
reduce()
:
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
reduce()
чаще заменяют sum()
или math.prod()
, но для сложных операций он остаётся полезным.В Python каждое значение имеет логическое (булево) представление. Оно неявно приводится к bool
, когда используется в if
, bool
, not
и других логических операциях.
Ложными (False
) считаются следующие объекты: None
, False
, 0
любого типа, а также пустые коллекции (""
, []
, {}
и т. д.), включая пользовательские коллекции с методом __len__
, если __len__
возвращает 0
.
Можно также определить пользовательскую проверку логического значения для своих объектов, используя магический метод __bool__
:
class Rectangle:
def __init__(self, width, height):
self._w = width
self._h = height
def __bool__(self):
return bool(self._w and self._h)
print(bool(Rectangle(2, 3))) # True
print(bool(Rectangle(2, 0))) # False
print(bool(Rectangle(0, 2))) # False
__bool__
является метод __nonzero__
.🐍 Как ускорить работу с pandas
?
Сегодня я покажу вам несколько способов ускорить работу с pandas
, если у вас большие объемы данных.
1️⃣ Используйте categorical
тип данных
Если у вас есть столбцы с повторяющимися строковыми значениями (например, категории товаров), лучше преобразовать их в category
:
df["category"] = df["category"].astype("category")
pandas.read_csv()
не всегда работает быстро. Можно попробовать: dtype
столбцов usecols
для загрузки только нужных колонок pyarrow
или fastparquet
при работе с Parquet-файлами
df = pd.read_csv("data.csv", dtype={"id": "int32", "name": "category"}, usecols=["id", "name"])
numba
и vectorize()
numba
:
from numba import jit
@jit(nopython=True)
def expensive_function(x):
return x**2 + 10*x + 5
df["new_col"] = df["value"].apply(expensive_function)
modin
вместо pandas
modin
:
import modin.pandas as pd
df = pd.read_csv("data.csv")
В Python можно спутать две вещи: итерируемые объекты (iterables) и итераторы (iterators).
Итерируемые объекты — это объекты, которые можно перебирать, то есть из них можно извлекать значения по одному, возможно, бесконечно. Обычно итерируемыми объектами являются коллекции, такие как массивы, множества, списки и т. д.
Есть два способа сделать объект итерируемым. Первый — реализовать метод __getitem__
:
class Iterable:
def __getitem__(self, i):
if i > 10:
raise IndexError
return i
print(list(Iterable()))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
__iter__
, который возвращает итератор. Итератор — это объект, имеющий метод __next__
, который при каждом вызове возвращает следующее значение из исходного итерируемого объекта:
class Iterator:
def __init__(self):
self._i = 0
def __next__(self):
i = self._i
if i > 10:
raise StopIteration
self._i += 1
return i
class Iterable:
def __iter__(self):
return Iterator()
print(list(Iterable()))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
__iter__
, который просто возвращает self
. Это позволяет самому итератору быть итерируемым, то есть большинство итераторов также являются итерируемыми объектами.🔥 5 полезных инструментов для Python-разработчика
Сегодня покажу вам 5 инструментов, которые могут серьезно упростить жизнь Python-разработчика. Они не на слуху, но реально полезны! 🚀
1️⃣ Rich – Красивый вывод в консоли
Больше не нужно мучиться с print()
, когда надо отобразить таблицу, JSON или логи с цветами. Rich
делает консольные приложения красивыми!
from rich import print
print({"name": "Alice", "age": 25})
pip install rich
print(f"var={var}")
, попробуйте icecream
(ic
). Он показывает и имя переменной, и её значение, и даже место вызова!
from icecream import ic
x = 42
ic(x) # x: 42
pip install icecream
Pydantic
делает это автоматически.
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
user = User(name="Alice", age="25") # ❌ Ошибка, age должен быть int
pip install pydantic
argparse
? Typer
использует аннотации типов и делает это проще.
import typer
def main(name: str):
print(f"Hello {name}!")
if __name__ == "__main__":
typer.run(main)
pip install typer
logging
, с удобным API и красивым выводом.
from loguru import logger
logger.info("Это информационное сообщение!")
pip install loguru
Есть две встроенные функции, которые позволяют анализировать итерируемые объекты без написания тривиальных и избыточных условий if
. Это all
и any
.
- any
возвращает True
, если хотя бы одно из значений истинно.
- all
возвращает True
, если все значения истинны.
- all
возвращает True
для пустого итерируемого объекта, тогда как any
в этом случае вернёт False
.
Обе функции особенно полезны при использовании вместе с генераторами и списковыми включениями:
package_broken = any(
part.is_broken() for part in package.get_parts()
)
package_ok = all(
part.ok() for part in package.get_parts()
)
any
и all
зачастую взаимозаменяемы благодаря законам де Моргана. Выбирайте ту, которая делает код более понятным.Встречайте Масленицу в Дзене
⚡ Собрали всё важное по теме Масленица.
Последние новости, афиша событий, история традиций и рецепты блинов от шефов. Читайте и смотрите в Дзене!
Узнать больше
#реклама
dzen.ru
О рекламодателе
Подборка Telegram каналов для программистов
/channel/lifeproger Жизнь программиста. Авторский канал.
/channel/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
/channel/rabota1C_rus 1С Работа
Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин
/channel/linux_odmin Linux: Системный администратор
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
/channel/Excel_lifehack
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Как быстро очистить список в Python?
Сегодня я покажу вам несколько способов очистки списка в Python и расскажу, какой вариант лучше в зависимости от ситуации.
1️⃣ Присвоение пустого спискаlst = [1, 2, 3, 4, 5]
lst = []
Этот способ создаёт новый пустой список, но старая ссылка остаётся в памяти, если на неё есть другие ссылки.
2️⃣ Использование .clear()lst = [1, 2, 3, 4, 5]
lst.clear()
Метод .clear() очищает список на месте, не создавая новый объект. Это предпочтительный способ, если список используется в нескольких местах.
3️⃣ Использование dellst = [1, 2, 3, 4, 5]
del lst[:]
Работает аналогично .clear(), но выглядит чуть менее очевидно.
4️⃣ Удаление списка полностьюlst = [1, 2, 3, 4, 5]
del lst
Этот вариант полностью удаляет переменную lst. Если потом попробовать к ней обратиться, будет ошибка NameError.
🔹 Какой способ лучше?
• Если нужно просто очистить список, используйте .clear().
• Если хотите заменить его новым объектом — lst = [].
• del lst[:] – редкий вариант, но возможен.
• del lst подходит, если список больше не нужен в программе.
Какой вариант используете вы? Пишите в комментариях!
👉@BookPython
🚀 5 крутых Python-фишек, о которых знают не все
Python — мощный и удобный язык, но даже опытные разработчики иногда не знают всех его возможностей. Сегодня я покажу пять полезных трюков, которые могут упростить вашу работу.
1. Используем else
в for
и while
Многие не знают, что в Python циклы for
и while
могут иметь блок else
. Он выполняется, если цикл не был прерван через break
.
✅ Пример:
numbers = [1, 3, 5, 7]
for num in numbers:
if num % 2 == 0:
print("Есть чётное число!")
break
else:
print("Чётных чисел нет.")
else
.
a, b, c = 1, 2, 3
print(a, b, c) # 1 2 3
x, y = 5, 10
x, y = y, x
print(x, y) # 10 5
_
в больших числах _
.
big_number = 1_000_000_000
print(big_number) # 1000000000
_
при вычислениях.if key in dict
можно использовать .get()
, чтобы избежать KeyError
.
user_data = {"name": "Alice"}
age = user_data.get("age", 18) # Если ключа "age" нет, вернётся 18
print(age) # 18
*
позволяет передавать элементы списка в функцию как отдельные аргументы.
def greet(name, age):
print(f"Привет, {name}! Тебе {age} лет.")
user_info = ["Иван", 25]
greet(*user_info) # Привет, Иван! Тебе 25 лет.
**
:
user_dict = {"name": "Ольга", "age": 30}
greet(**user_dict)
PEP 8 – это основополагающий стиль программирования в Python, и следовать ему настоятельно рекомендуется. Инструмент pycodestyle позволяет автоматически проверять код на соответствие этому стандарту.
🔧 Как установить и использовать pycodestyle
Установите инструмент через pip
:
pip install pycodestyle
pycodestyle . -qq --statistics
.
— проверка всей текущей директории.-qq
— подавляет ненужные сообщения, оставляя только ошибки.--statistics
— выводит краткую сводку по ошибкам.
def my_function():
print("Hello, world!")
def my_function():
print("Hello, world!")
print("Это очень длинная строка, которая превышает 79 символов и вызывает ошибку E501")
print(
"Это очень длинная строка, которая превышает 79 символов "
"и вызывает ошибку E501"
)
flake8
– более мощный анализатор кода, объединяет pycodestyle
, pyflakes
и mccabe
.black
– автоформаттер кода, следит за PEP 8 и правит стиль автоматически.isort
– сортирует импортированные модули.pycodestyle
и других инструментов помогает поддерживать чистоту и читаемость кода, а также облегчает командную работу.Подборка Telegram каналов для программистов
/channel/bash_srv Bash Советы
/channel/win_sysadmin Системный Администратор Windows
/channel/lifeproger Жизнь программиста. Авторский канал.
/channel/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
/channel/rabota1C_rus Вакансии для программистов 1С
Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин
/channel/linux_odmin Linux: Системный администратор
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
/channel/DevLab1C 1С:Предприятие 8
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
/channel/Excel_lifehack
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Умеешь вести за собой? Тогда держи идею на 70+К в мес
Как думаешь, что это? Конечно, путешествия.
Ты знала, как:
✅ отдыхать постоянно за половину цены или бесплатно, если едешь вместе со своей командой?
✅ жить без дедлайнов и не зависеть от закрытия месяцев?
✅ вести свой сетевой бизнес из любой точки мира среди ярких красок и тепла круглый год?
Наши партнеры получают таким образом доп доход в среднем 70-200К в месяц.
Кто мы?
Один из крупнейших туроператоров РФ VIA TOURISM. Сейчас расширяем сеть присутствия. В честь этого открываем доступ к обучению новым партнёрам и отдаём готовые заказы. И заодно рассказываем про секретные сервисы турагентов для самых крутых и выгодных путешествий.
Узнай об этом больше на бесплатном вебинаре.
Узнать больше
#реклама 16+
via-tourism.school
О рекламодателе
Если у вас есть ресурсоемкая задача для процессора и вы хотите использовать все доступные ядра, то multiprocessing.Pool
— это то, что вам нужно. Он создает несколько процессов и автоматически распределяет между ними задачи. Просто создайте пул с Pool(number_of_processes)
и выполните p.map
с списком входных данных.
import math
from multiprocessing import Pool
inputs = [i ** 2 for i in range(100, 130)]
def f(x):
return len(str(math.factorial(x)))
# Однопоточное выполнение
%timeit [f(x) for x in inputs]
# 1.44 s ± 19.2 ms per loop (...)
# Параллельное выполнение с 4 процессами
p = Pool(4)
%timeit p.map(f, inputs)
# 451 ms ± 34 ms per loop (...)
number_of_processes
, по умолчанию он равен количеству ядер CPU в системе.Апартаменты в Крыму в 30 метрах от моря
✨Утром вы вышли на балкон, выпили чашку кофе с видом на морскую гладь
Вокруг тишина, солёный бриз и солнце круглый год
Все это может стать вашим
Апартаменты в 30 метрах от моря
-14.5 га закрытой территории с концепцией "город в городе"
-2 бассейна
-SPA центр
❤️Ряд ярких достопримечательностей:
-Карадагский заповедник
-Мыс Хамелеон
-Крымский дельфинарий
✅Получите подробную презентацию комплекса и получите планировки под ваш запрос + инвестиционную выгоду с консультацией менеджера!
Получить предложение
Проектная декларация на сайте https://наш.дом.рф/
#реклама
krym-nedvizh.ru
О рекламодателе
🔥Podlodka Python Crew — это онлайн-конференции по самым актуальным темам для питонистов.
Разбираем сложные вещи простыми словами, без воды, с уклоном на практику. Сессии проходят в удобное время — утром и вечером.
С 17 по 21 марта пройдет сезон, посвященный оптимизации работы Python-приложений. Разбираем профилирование, внутренности CPython и техники ускорения кода.
🎯Что в программе?
• Оптимизации, которые вы могли упустить — Александр Кучин (Литрес) расскажет, какие скрытые проблемы могут замедлять код и как их исправить 🚀
• Как работает CPython — от запуска скрипта до управления памятью — Василий Рябов разберет, как Python читает и выполняет код, управляет памятью и garbage collection 📌
• Своя Игра: уровни глубины знаний Python-разработчика — Нина Лукина и Евгений Афонасьев в формате викторины объяснят, как Python работает под капотом. Это будет эпично 🎮
• Профилирование на Python — Василий Исаев (Точка) объяснит, как находить узкие места в коде и повышать его производительность с помощью профилирования 💡
Подходы, которые можно внедрить сразу после конференции!
🔗 Подробности и билеты: https://podlodka.io/pythoncrew
ПИФы от СберИнвестиций под управлением УК «Первая»
Простой и понятный способ инвестировать 👌
Инвестируйте от 100 ₽ в Сбербанк Онлайн⚡ Ежеквартальные выплаты дохода на вашу карту ✅
Узнать больше
Финансовые услуги оказывает: АО УК «Первая».
#реклама
sberbank.com
О рекламодателе
Обычно вам не нужно заботиться об объектах-итераторах; они создаются и используются автоматически конструкциями for
, list
или другими механизмами, которые выполняют итерацию за вас. Однако в некоторых редких случаях вам может понадобиться получить итератор из итерируемого объекта явно. Правильный способ сделать это — использовать встроенную функцию iter
(которая использует методы __iter__
или __getitem__
объекта для получения итератора):
part_sizes = [3, 2, 5]
iterator = iter(range(100))
result = []
for size in part_sizes:
part = []
for _ in range(size):
part.append(next(iterator))
result.append(part)
assert result == [
[0, 1, 2],
[3, 4],
[5, 6, 7, 8, 9],
]
iter
можно использовать совершенно другим способом. Вместо создания итератора из объекта, он также может создавать итератор из функции (или любого вызываемого объекта). Если вызвать iter
с двумя аргументами, первый должен быть вызываемым объектом, а второй — контрольным значением (sentinel). При каждом вызове __next__
созданный итератор будет вызывать переданную функцию без аргументов. Если возвращённое значение равно sentinel
, возбуждается исключение StopIteration
; в противном случае возвращается полученное значение.
In : list(iter(input, 'END'))
a
b
END
Out: ['a', 'b', '']
Python-разработчики уже который год остаются одними из самых востребованных на рынке. По данным Хабр Карьера, сейчас для них открыто около десяти тысяч вакансий со средней зарплатой 196 000 рублей.
Попробуйте себя в этой профессии на бесплатном курсе Нетологии «Основы Python: создаём телеграм-бота». За 5 занятий вы не просто познакомитесь с логикой работы языка и научитесь применять базовые конструкции, но и напишете телеграм-бота и планировщик задач.
После основной части курса вам откроется тренажёр-симулятор с рабочими задачами специалиста — сможете взглянуть на профессию разработчика изнутри, узнать, как выглядит общение в команде, и создадите программу для интернет-магазина зоотоваров. А начинать учиться можно сразу.
Реклама. ООО "Нетология". ИНН 7726464125 Erid 2VSb5wszgjz
Дарим подписку на Яндекс Музыку
Ответьте на 1 вопрос и Яндекс Музыка для вас и 3-х ваших близких 30 дней бесплатно.
Кинопоиск и Яндекс Книги тоже в подписке.
Попробуйте сейчас❤️
Попробовать
#реклама 18+
music.yandex.ru
О рекламодателе
Реклама на Яндексе
📌 Декораторы в Python: как они работают и зачем нужны?
Сегодня я покажу вам, как работают декораторы в Python и зачем они вообще нужны.
Декораторы позволяют изменять поведение функций без изменения их кода. Они широко применяются в логировании, кешировании, управлении доступом и многом другом.
Допустим, у нас есть функция, которая просто выводит «Hello, world!»:
def greet():
print("Hello, world!")
greet()
, мы создадим декоратор:
def log_decorator(func):
def wrapper():
print(f"Вызов функции {func.__name__}")
return func()
return wrapper
@log_decorator
def greet():
print("Hello, world!")
greet()
Вызов функции greet
Hello, world!
wrapper()
, которая выполняет дополнительную логику перед вызовом func()
.wrapper()
возвращается вместо func
, фактически подменяя её.
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"Вызов {func.__name__} с аргументами: {args}, {kwargs}")
return func(*args, **kwargs)
return wrapper
@log_decorator
def add(a, b):
return a + b
print(add(3, 5))
Вызов add с аргументами: (3, 5), {}
8
Если 'port'
нет в config
, устанавливаем его значение по умолчанию:
if 'port' not in config:
config['port'] = 80
port = config['port']
setdefault
:
port = config.setdefault('port', 80)
setdefault
устанавливает новое значение, если оно ещё не задано, и возвращает сохранённое значение вне зависимости от того, было ли оно изменено:
In : config = {}
In : config.setdefault('port', 80)
Out: 80
In : config.setdefault('port', 443)
Out: 80
🐍 Как улучшить читаемость кода в Python?
Читаемый код — это не роскошь, а необходимость. Если ваш код трудно понять, даже если он работает, это плохой код. Сегодня разберем несколько простых, но мощных приемов, которые сделают ваш код более понятным.
1️⃣ Используйте говорящие имена переменных
Плохой пример:
a = 10
b = 20
c = a + b
price = 10
tax = 20
total_cost = price + tax
def calculate_total(price, tax):
return price + tax
total_cost = calculate_total(10, 20)
# Плохо
total=price+tax
# Хорошо
total = price + tax
black
или flake8
, чтобы следить за стилем.
# Плохо
if age > 18:
print("Взрослый")
# Хорошо
LEGAL_AGE = 18
if age > LEGAL_AGE:
print("Взрослый")
numbers = [1, 2, 3, 4, 5]
squared_numbers = []
for num in numbers:
squared_numbers.append(num ** 2)
squared_numbers = [num ** 2 for num in numbers]