Академия Кода – Telegram
Академия Кода
2K subscribers
673 photos
2 videos
2 files
50 links
Академия кода. Полезный контент по программированию. По всем вопросам @evgenycarter
Download Telegram
Именование среза с использованием функции slice

Работа с множеством значений, которые заданы индексами, может быстро обернуться беспорядком – как в плане поддержки, так и в плане читабельности кода.

Один из вариантов улучшения ситуации заключается в использовании констант для значений, задаваемых индексами. Но есть и более удачный способ написания качественного кода, как показано на картинке
#python

Подписывайтесь на канал 👉@cod_academy
Количество дней между датами

Иногда может понадобиться узнать количество дней, часов, минут и т.п. между датами. Рассмотрим один из способов нахождения дней между двумя датами выше в примере.
#java

Подписывайтесь на канал 👉@cod_academy
Функции вместимости в строках

1. capacity() - функция возвращает ёмкость памяти, выделенную для строки, которая может быть равной или больше, чем размер самой строки. Дополнительное пространство выделяется таким образом, чтобы при добавлении новых символов в строку операции могли выполняться эффективно.
2. resize() - функция изменяет размер строки, его можно увеличивать или уменьшать.
3. length() - функция возвращает длину строки.
4. shrink_to_fit() - функция уменьшает ёмкость памяти строки, делает ее равной минимально возможной. Эта операция полезна для экономии дополнительной памяти, когда мы уверены, что больше не нужно добавлять символы.
#cpp

Подписывайтесь на канал 👉@cod_academy
Switch-конструкция с помощью словаря

Привет, на связи Адриан. Начинающие программисты достаточно часто спрашивают меня про switch-конструкции, а в Python их вобщем-то нет.

Однако существует одно хитрое решение – использовать словарь, где значениями будут функции. В качестве примера напишем словарь, который будет использован для математических операторов.

В этом примере я использовал lambda-функции для упрощения кода, но вместо них можете подставить любые другие. Объясню немного подробнее, lambda – объявление анонимной функции, x и y - принимаемые аргументы, x + y – возвращаемый результат.
#python

Подписывайтесь на канал 👉@cod_academy
👍2
Метод valueOf()

Возвращает соответствующий числовой объект, содержащий значение переданного аргумента, простыми словами — преобразует в нужный тип данных. Аргумент можно преобразовать в int, double, float и другие типы данных, например, можно преобразовать строку в число.
#java

Подписывайтесь на канал 👉@cod_academy
👍1
Функция unique

unique используется для удаления дубликатов любого элемента, присутствующего последовательно в диапазоне [first, last). Он выполняет эту задачу для всех подгрупп, присутствующих в диапазоне, имеющих один и тот же элемент, присутствующий последовательно.
#cpp

Подписывайтесь на канал 👉@cod_academy
Генерация уникальных идентификаторов

В этот пятничный вечер Адриан подготовил для вас небольшой, но крайне полезный приём, который часто применяется на практике.

Стандартный модуль uuid — быстрый и простой способ сгенерировать UUID (universally unique identifier), глобально уникальный идентификатор.

Так, мы можем создать случайное 128-битное число, которое наверняка будет уникальным. Существует более 2¹²² возможных UUID. Это более 5 ундециллионов, то есть 36 нулей.

Вероятность нахождения дубликатов в заданном наборе крайне мала. Даже при наличии триллиона UUID вероятность того, что среди них есть дубликат, гораздо меньше, чем один к миллиарду.

Вполне недурно для двух строк кода.
#python

Подписывайтесь на канал 👉@cod_academy
Метод split()

Возвращает массив строк, вычисленных путем разделения данной строки вокруг данного регулярного выражения.

Параметры:
regex — разграничение регулярного выражения;
limit — порог, результатом которого означает, как много строк, должно быть возвращено.
#java

Подписывайтесь на канал 👉@cod_academy
Итераторы в строках

1. begin() - возвращает итератор в начало строки.
2. end() - возвращает итератор в конец строки.
3. rbegin() - возвращает обратный итератор, указывающий на конец строки.
4. rend() - возвращает обратный итератор, указывающий на начало строки.
#cpp

Подписывайтесь на канал 👉@cod_academy
Упаковка параметров с помощью urlencode

Новая неделя – новые знания. В это утро понедельника я подготовил для вас крайне практичный пост.

Довольно часто приходится работать с разнообразными API и совершать get-запросы с передачей множества параметров. Чаще всего составление запроса в коде выглядит примерно так:

url = 'https://example.com?item={}&size={}&color={}&amount={}'.format('t-shirt', 'M', 'white', 5)

Смотрится не слишком презентабельно, однако есть слегка более длинный, но значительно улучающий читаемость кода вариант – функция urlencode из из модуля urllib.
#python

Подписывайтесь на канал 👉@cod_academy
Метод insert()

Вставляет символы в данную строку буфера (StringBuffer). Подстрока добавляется перед указанным индексом.
#java

Подписывайтесь на канал 👉@cod_academy
Алгоритм shuffle

Переупорядочивает элементы в заданном диапазоне [first, last) таким образом, чтобы каждая возможная перестановка этих элементов имела равную вероятность появления.
#cpp

Подписывайтесь на канал 👉@cod_academy
⁠Кэширование функций

Кэширование может сэкономить время, когда связанная с вводом или выводом функция периодически вызывается с одинаковыми аргументами. Раньше приходилось создавать свою реализацию, но в Python 3.2+ появился декоратор lru_cache, который позволяет нам быстро кэшировать и вскрывать возвращаемые значения функции.

Давайте реализуем калькулятор чисел Фибоначчи с использованием кэша. Советую попробовать запустить любую рекурсивную функцию с кэшированием и без него, прирост в скорости замечается сразу.
#python

Подписывайтесь на канал 👉@cod_academy
Метод subSequence()

Возвращает новую последовательность символов, которая является подпоследовательностью этой последовательности, другими словами — возвращает последовательность символов из строки, начиная и заканчивая указанными индексами.
#java

Подписывайтесь на канал 👉@cod_academy
👍1
Токенизация строки

Токенизация строки означает разделение строки относительно некоторого разделителя (разделителей). Есть много способов этого добиться.

Рассмотрим пример с функцией strtok(). Она разбивает строку по указанным разделителям и должна быть вызвана в цикле, на каждой итерации возвращая следующую часть. В конце возвращает NULL
#cpp

Подписывайтесь на канал 👉@cod_academy
Ускоряем код с помощью векторизации

Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. использование функций, которые поддерживают операции над векторами.

Вообще лучший способ ускорить любой цикл – это отказаться от него. В примере выше для работы с функцией my_func мы могли бы вызвать ее в цикле для каждого элемента списка, но гораздо проще использовать vectorize.

По сути, vectorize преобразует функцию таким образом, что она начинает принимать весь вектор целиком, а не отдельный его элемент. Надо помнить, что такой подход не всегда приводит к значительному ускорению.
#python

Подписывайтесь на канал 👉@cod_academy
Содержимое директории

Java позволяет получить имена всех подкаталогов и файлов в папке в виде массива, который затем можно последовательно просмотреть.
#java

Подписывайтесь на канал 👉@cod_academy
Алгоритм fill

Присваивает всем элементам в диапазоне [first,last) заданное значение.
#cpp

Подписывайтесь на канал 👉@cod_academy
Explicit Conversion Flag

Флаг явного преобразования используется для преобразования значения поля format перед его непосредственным форматированием.

Это поле можно использовать для переопределения поведения format для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования:

!r – преобразует значение в строку, используя функцию repr()
!s – преобразует значение в строку, используя функцию str()

В примере, в случае с флагом !r строка 'Hello' будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s – без кавычек (в более удобном для чтения виде).
#python

Подписывайтесь на канал 👉@cod_academy
Метод replace()

Заменяет символами подстроки данной строки буфера (StringBuffer) заданные символы в строке. Другими словами метод позволяет в Java заменить символы в строке между указанными начальным и конечным индексами.

Параметры:
start — начальный индекс, включительно;
end — конечный индекс, не включая;
str — строка, которая заменит предыдущее содержимое.
#java

Подписывайтесь на канал 👉@cod_academy
set::erase()

Функция erase() используется для удаления элементов из контейнера по указанной позиции или диапазону.
#cpp

Подписывайтесь на канал 👉@cod_academy