Как замерить время выполнения кода в Python?
Когда нужно понять, насколько быстро работает фрагмент кода, новички часто используют сторонние инструменты или пробуют измерять время "на глаз". Но в Python есть простой и встроенный способ — модуль time.
С помощью time.time() можно зафиксировать время до и после выполнения кода, а затем вычесть одно из другого. Это особенно полезно при оптимизации производительности.
Итог:
+ Используем time.time() для измерения скорости.
+ Удобно для профилирования и отладки.
+ Легко встроить в любой проект.
#theory // Just Python
Когда нужно понять, насколько быстро работает фрагмент кода, новички часто используют сторонние инструменты или пробуют измерять время "на глаз". Но в Python есть простой и встроенный способ — модуль time.
С помощью time.time() можно зафиксировать время до и после выполнения кода, а затем вычесть одно из другого. Это особенно полезно при оптимизации производительности.
Итог:
+ Используем time.time() для измерения скорости.
+ Удобно для профилирования и отладки.
+ Легко встроить в любой проект.
#theory // Just Python
Пример использования all
Это полезно для проверки условий сразу на всех элементах без написания циклов.
Пример использования all.
#theory // Just Python
all
проверяет все элементы итерируемого объекта и возвращает True
, только если все элементы — истинные (truthy
). Если хотя бы один элемент ложный (False
, 0
, None
, пустая строка или список) — результат будет False
.Это полезно для проверки условий сразу на всех элементах без написания циклов.
Пример использования all.
#theory // Just Python
Как проверить, содержится ли подстрока в строке?
Новички нередко используют громоздкие конструкции или циклы, чтобы проверить, встречается ли слово или символ в строке. Но Python позволяет делать это очень просто — с помощью ключевого слова in.
Оператор in возвращает True, если подстрока найдена в строке, и False — если нет. Это лаконично, читаемо и Python-идиоматично.
Итог:
in — простой способ проверить наличие подстроки.
Удобно использовать в условиях (if) и циклах.
Повышает читаемость кода и сокращает количество строк.
#theory // Just Python
Новички нередко используют громоздкие конструкции или циклы, чтобы проверить, встречается ли слово или символ в строке. Но Python позволяет делать это очень просто — с помощью ключевого слова in.
Оператор in возвращает True, если подстрока найдена в строке, и False — если нет. Это лаконично, читаемо и Python-идиоматично.
Итог:
in — простой способ проверить наличие подстроки.
Удобно использовать в условиях (if) и циклах.
Повышает читаемость кода и сокращает количество строк.
#theory // Just Python
Cartopy
Cartopy — это Python-библиотека, предназначенная для создания карт и обработки геопространственных данных. Она построена на базе Matplotlib и обладает широким набором функций для создания профессиональных карт.
#theory // Just Python
Cartopy — это Python-библиотека, предназначенная для создания карт и обработки геопространственных данных. Она построена на базе Matplotlib и обладает широким набором функций для создания профессиональных карт.
#theory // Just Python
NumPy: concatenate
Функция numpy.concatenate() используется для объединения массивов вдоль существующих осей. Это позволяет объединять несколько массивов NumPy в один массив. Мы передаем последовательность массивов, которые хотим объединить, в функцию concatenate() вместе с осью. Если ось не передана явно, она принимается за 0.
#theory // Just Python
Функция numpy.concatenate() используется для объединения массивов вдоль существующих осей. Это позволяет объединять несколько массивов NumPy в один массив. Мы передаем последовательность массивов, которые хотим объединить, в функцию concatenate() вместе с осью. Если ось не передана явно, она принимается за 0.
#theory // Just Python
Как округлить число до нужного знака после запятой?
Новички часто пытаются округлять числа вручную или с помощью форматирования строк. Однако в Python есть встроенная функция
Функция round(число, знаки) округляет число до указанного количества знаков после запятой. Если не указывать второй аргумент — округлит до целого. Удобно для вывода результатов вычислений, цен или процентов.
Итог:
round(x, n) — округление числа x до n знаков после запятой.
Без второго аргумента округляет до целого.
Полезно при работе с деньгами, метриками и графиками.
#theory // Just Python
Новички часто пытаются округлять числа вручную или с помощью форматирования строк. Однако в Python есть встроенная функция
round(),
которая делает это просто и понятно.Функция round(число, знаки) округляет число до указанного количества знаков после запятой. Если не указывать второй аргумент — округлит до целого. Удобно для вывода результатов вычислений, цен или процентов.
Итог:
round(x, n) — округление числа x до n знаков после запятой.
Без второго аргумента округляет до целого.
Полезно при работе с деньгами, метриками и графиками.
#theory // Just Python
str.zfill
#theory // Just Python
str.zfill
дополняет строку нулями слева до заданной длины. Это полезно для форматирования чисел с фиксированной шириной, например, в номерах счетов или индексах.#theory // Just Python
NumPy
NumPy — это библиотека языка Python, добавляющая поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых (и очень быстрых) математических функций для операций с этими массивами.
Основным объектом NumPy является однородный многомерный массив (в numpy называется numpy.ndarray). Это многомерный массив элементов (обычно чисел), одного типа.
#theory // Just Python
NumPy — это библиотека языка Python, добавляющая поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых (и очень быстрых) математических функций для операций с этими массивами.
Основным объектом NumPy является однородный многомерный массив (в numpy называется numpy.ndarray). Это многомерный массив элементов (обычно чисел), одного типа.
#theory // Just Python
NumPy, часть 2: базовые операции над массивами
Математические операции над массивами выполняются поэлементно. Создается новый массив, который заполняется результатами действия оператора.
Для этого, естественно, массивы должны быть одинаковых размеров.
#theory // Just Python
Математические операции над массивами выполняются поэлементно. Создается новый массив, который заполняется результатами действия оператора.
Для этого, естественно, массивы должны быть одинаковых размеров.
#theory // Just Python
NumPy, часть 3: random
Есть несколько способов работы с случайными элементами в NumPy.
Путь первый это создавать списки, используя встроенный модуль random, а затем преобразовывать их в numpy.array.
Второй путь это создание массивов. Самый простой способ задать массив со случайными элементами - использовать функцию sample (или random, или random_sample, или ranf - это всё одна и та же функция).
#theory // Just Python
Есть несколько способов работы с случайными элементами в NumPy.
Путь первый это создавать списки, используя встроенный модуль random, а затем преобразовывать их в numpy.array.
Второй путь это создание массивов. Самый простой способ задать массив со случайными элементами - использовать функцию sample (или random, или random_sample, или ranf - это всё одна и та же функция).
#theory // Just Python
NumPy, часть 4: linalg
Теперь же мы приступим к более серьёзным вещам, которые есть в NumPy. Первый на очереди у нас модуль numpy.linalg, позволяющий делать многие операции из линейной алгебры.
Массивы большей размерности в большинстве функций linalg интерпретируются как набор из нескольких массивов нужной размерности. Таким образом, можно одним вызовом функции проделывать операции над несколькими объектами.
#theory // Just Python
Теперь же мы приступим к более серьёзным вещам, которые есть в NumPy. Первый на очереди у нас модуль numpy.linalg, позволяющий делать многие операции из линейной алгебры.
Массивы большей размерности в большинстве функций linalg интерпретируются как набор из нескольких массивов нужной размерности. Таким образом, можно одним вызовом функции проделывать операции над несколькими объектами.
#theory // Just Python
Forwarded from The Экономист
⚡️ Разыгрываем сразу 3 новеньких iPhone 16!
Отличный вариант получить свежайшие гаджеты просто за то, что читаете нас! Для участия нужно:
1. Быть подписанным на The Экономист, Москоубизнес и Доллар по тридцать.
2. Нажать «Участвую!» под этим постом.
Итоги подведём 25 апреля в 18:00 случайным образом при помощи бота. Девайсы за свой счёт застрахуем и отправим победителям в любую точку мира. Всем удачи!
Отличный вариант получить свежайшие гаджеты просто за то, что читаете нас! Для участия нужно:
1. Быть подписанным на The Экономист, Москоубизнес и Доллар по тридцать.
2. Нажать «Участвую!» под этим постом.
Итоги подведём 25 апреля в 18:00 случайным образом при помощи бота. Девайсы за свой счёт застрахуем и отправим победителям в любую точку мира. Всем удачи!
Ловушка с аргументами
В Python
Всегда передавайте
#theory // Just Python
*args
и **kwargs
без передачи дальшеВ Python
*args
и **kwargs
часто используются для гибкости, но ошибка — принимать их и не передавать дальше в базовые классы или функции. Это «глотает» параметры и может ломать поведение программы.Всегда передавайте
*args
и **kwargs
, если не уверены, что они вам не нужны.#theory // Just Python
Bottle — это мини-фреймворк для Python, позволяющий писать веб-приложения с высокой скоростью, и он представлен в виде одного файла bottle.py, так что для его работы достаточно только этого файла.
Мы все обожаем примеры, поэтому вот код для начала работы с Bottle:
Здесь мы создали веб сервер по адресу localhost с портом 8080.
Вы можете изменить текст "Hello {{name}}" на любой другой текст.
Чтобы проверить его работу, просто перейдите по ссылке http://localhost:8080/hello/world. После этого вы увидите на экране "Hello World".
Повторюсь, Bottle распространяется в виде одного файла-модуля и не имеет никаких зависимостей, кроме стандартной библиотеки Python.
Официальная документация только на английском
Русская документация
#theory // Just Python
Мы все обожаем примеры, поэтому вот код для начала работы с Bottle:
from bottle import route, run, template
@route('/hello/<name>')
def index(name):
return template('<b>Hello {{name}}</b>!', name=name)
run(host='localhost', port=8080)
Здесь мы создали веб сервер по адресу localhost с портом 8080.
Вы можете изменить текст "Hello {{name}}" на любой другой текст.
Чтобы проверить его работу, просто перейдите по ссылке http://localhost:8080/hello/world. После этого вы увидите на экране "Hello World".
Повторюсь, Bottle распространяется в виде одного файла-модуля и не имеет никаких зависимостей, кроме стандартной библиотеки Python.
Официальная документация только на английском
Русская документация
#theory // Just Python
ElasticNet
Минус Lasso в том, что если признаки сильно скоррелированы между собой, она может случайно “выбрать” только один из них и проигнорировать остальные, даже если они тоже информативны. В таких случаях часто используют ElasticNet — это гибрид L1 и L2.
Параметр l1_ratio регулирует баланс между L1 и L2. 0.0 — чистый Ridge. 1.0 — чистый Lasso. 0.5 — пополам.
#theory // Just Python
Минус Lasso в том, что если признаки сильно скоррелированы между собой, она может случайно “выбрать” только один из них и проигнорировать остальные, даже если они тоже информативны. В таких случаях часто используют ElasticNet — это гибрид L1 и L2.
Параметр l1_ratio регулирует баланс между L1 и L2. 0.0 — чистый Ridge. 1.0 — чистый Lasso. 0.5 — пополам.
#theory // Just Python
itertools.starmap
#theory // Just Python
itertools.starmap
применяет функцию к элементам итерируемого объекта, распаковывая аргументы из кортежей. Это полезно для операций с несколькими аргументами без лямбд и циклов.#theory // Just Python
importlib.util.find_spec
#theory // Just Python
importlib.util.find_spec
позволяет узнать, можно ли импортировать модуль, не загружая его. Это полезно для проверки наличия зависимостей, динамической загрузки и построения систем плагинов.#theory // Just Python
Как присвоить несколько переменных в одну строку?
Иногда нужно сразу задать значения нескольким переменным. Новички делают это в несколько строк, что выглядит громоздко. Но Python поддерживает удобную конструкцию множественного присваивания — коротко, читаемо и эффективно!
С помощью этой фичи можно сразу задать значения, поменять переменные местами или распаковать кортеж — всё в одной строке.
Итог:
Множественное присваивание упрощает код.
Позволяет присваивать значения сразу нескольким переменным.
Удобно для обмена значениями и распаковки структур.
#theory // Just Python
Иногда нужно сразу задать значения нескольким переменным. Новички делают это в несколько строк, что выглядит громоздко. Но Python поддерживает удобную конструкцию множественного присваивания — коротко, читаемо и эффективно!
С помощью этой фичи можно сразу задать значения, поменять переменные местами или распаковать кортеж — всё в одной строке.
Итог:
Множественное присваивание упрощает код.
Позволяет присваивать значения сразу нескольким переменным.
Удобно для обмена значениями и распаковки структур.
#theory // Just Python
Дерево решений: Часть 1
Дерево решений — это модель, которая принимает решения, двигаясь по ветвям дерева от корня к листьям. На каждом узле происходит проверка: например, «если возраст > 30 — идём направо, иначе налево». Так шаг за шагом дерево делит данные на подгруппы, пока не придёт к финальному решению: в регрессии — числовое значение, в классификации — метка класса.
Модель выглядит почти как блок-схема, и ты можешь буквально прочитать, почему она приняла то или иное решение. В Python всё это делается через sklearn.tree.DecisionTreeClassifier или DecisionTreeRegressor.
Параметр max_depth — это ограничение на глубину дерева. Без него дерево может продолжать делиться, пока не переобучится подчистую. Всегда важно следить за глубиной, количеством листьев (max_leaf_nodes) и минимальным числом объектов в узле (min_samples_split) — это всё способы контроля переобучения.
#theory // Just Python
Дерево решений — это модель, которая принимает решения, двигаясь по ветвям дерева от корня к листьям. На каждом узле происходит проверка: например, «если возраст > 30 — идём направо, иначе налево». Так шаг за шагом дерево делит данные на подгруппы, пока не придёт к финальному решению: в регрессии — числовое значение, в классификации — метка класса.
Модель выглядит почти как блок-схема, и ты можешь буквально прочитать, почему она приняла то или иное решение. В Python всё это делается через sklearn.tree.DecisionTreeClassifier или DecisionTreeRegressor.
Параметр max_depth — это ограничение на глубину дерева. Без него дерево может продолжать делиться, пока не переобучится подчистую. Всегда важно следить за глубиной, количеством листьев (max_leaf_nodes) и минимальным числом объектов в узле (min_samples_split) — это всё способы контроля переобучения.
#theory // Just Python
Зачем нужны кортежи, если есть списки?
На это есть несколько причин. Во первых, это защита от дурака. То есть кортеж защищен от изменений, как намеренных (что плохо), так и случайных (что хорошо).
Во вторых, кортежи меньше размером чем списки. Это существенный плюс при работе с большими программами.
В третьих, это возможность использовать кортежи в качестве ключей словаря.
#theory // Just Python
На это есть несколько причин. Во первых, это защита от дурака. То есть кортеж защищен от изменений, как намеренных (что плохо), так и случайных (что хорошо).
Во вторых, кортежи меньше размером чем списки. Это существенный плюс при работе с большими программами.
В третьих, это возможность использовать кортежи в качестве ключей словаря.
#theory // Just Python