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

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

Программисты комбинируют os и shutil для достижения наиболее красивого и эффективного кода.

shutil.copyfileobj(fsrc, fdst) - копирует один файл в другой.

shutil.copymode(fsrc, fdst) - копирует права доступа из одного файла в другой.

shutil.copystat(fsrc, fdst) - копирует дату последнего доступа и изменения из одного файла в другой.

Библиотека позволяет так же работать с архивами shutil.get_archive_formats(), чтобы узнать доступные для работы архивы.

#python

Подписывайтесь на канал 👉@cod_academy
This media is not supported in your browser
VIEW IN TELEGRAM
Дерево Фенвика

Довольно простая и быстрая, но совсем не очевидная в плане идеи и понимания структура данных. Позволяет находить сумму на префиксе и изменять отдельные элементы за O(log n). В следующем посте — реализация на C++.

#cpp

Подписывайтесь на канал 👉@cod_academy
Где и для чего используется модификатор abstract?

Класс, помеченный модификатором abstract, называется абстрактным классом. Такие классы могут выступать только предками для других классов. Создавать экземпляры самого абстрактного класса не разрешается. При этом наследниками абстрактного класса могут быть как другие абстрактные классы, так и классы, допускающие создание объектов.

Метод, помеченный ключевым словом abstract - абстрактный метод, т.е. метод, который не имеет реализации. Если в классе присутствует хотя бы один абстрактный метод, то весь класс должен быть объявлен абстрактным.

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

#java

Подписывайтесь на канал 👉@cod_academy
👍1
Модуль zipfile

Как говорилось ранее с zip может работать модуль shutil, но zipfile более многофункционален. С другой стороны он не так универсален и работает только с зипами. За все надо платить, не существует идеального способа для всего.

Для начала надо из zipfile импортировать ZipFile. И открыть файл ZipFile(file).

printdir() - вывод списка содержимого текстом для печати.

namelist() - вывод списка фалов списком.

open() - открыть файл внутри архива, далее работа проходит аналогично работе фалов.

Для практики на картинке показана программа выводящая красивый вложенный список файлов находящихся в архиве.

Больше возможностей можно узнать через help() или документацию.

#python

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

В C++ 11 присваивания также могут выполняться в двоичной форме.

#cpp

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

1) Многопоточность позволяет приложению / программе всегда реагировать на ввод, даже если она уже выполняется с некоторыми фоновыми задачами;
2) Многопоточность позволяет быстрее выполнять задачи, поскольку потоки выполняются независимо;
3) Многопоточность обеспечивает лучшее использование кэш-памяти, поскольку потоки разделяют общие ресурсы памяти;
4) Многопоточность уменьшает количество требуемого сервера, поскольку один сервер может одновременно выполнять несколько потоков.

#java

Подписывайтесь на канал 👉@cod_academy
Как перевести символ в ascii на python?

Вы можете использовать метод .ord() для перевода символа в ascii.

char = "T"

print(ord(char))

#python

Подписывайтесь на канал 👉@cod_academy
Структура представлена в виде массива f, в котором f[i] – сумма всех элементов от F[i] до i. Функция F(x) связана с битовым представлением аргумента. Вкратце можно описать так: F(x) заменяет группу единичных битов, находящихся в конце числа (младших) на нули. Если x заканчивается на нулевой бит, то F(x) = x. В битовых операциях F(x) задаётся так: F(x) = x & (x + 1).

Нам понадобятся три функции: прибавление x к элементу с индексом i, получение суммы дерева от 0до xи получение суммы на [a..b].

#cpp

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

JSON – невероятно удобный и полезный синтаксис для хранения и обмена данными. Java полностью поддерживает его.

В данном примере кода рассмотрим пример сериализации данных.

#java

Подписывайтесь на канал 👉@cod_academy
Итерирование с использованием функции enumerate

Функция range позволяет получить только индексы элементов списка. Функция enumerate генерирует кортежи, состоящие из двух элементов – индекса элемента и самого элемента. Эти кортежи можно распаковать еще в заголовке for
Получается короткий и понятный код!
В примере разберем как извлечь из списка элементы и их индекс, рис.1.

Еще одной полезной и крутой фишкой этой функции будет легкое создания счетчика. Более того, мы можем установить первоначальное значение счетчика, рис. 2.

#python

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

Отсортируйте заданный массив с помощью быстрой сортировки.

Формат входных данных:
Первая строка входных данных содержит одно натуральное число nn (1 ≤ n ≤ 10^5) – количество элементов в массиве. В следующей строке находятся элементы массива – n целых чисел, не превосходящих по абсолютной величине 10^9.

Формат выходных данных:
Выведите элементы массива в порядке неубывания.

#cpp

Подписывайтесь на канал 👉@cod_academy
Что такое volatile переменная?

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

При помощи ключевого слова volatile можно гарантировать, что переменная будет потокобезопасна и будет храниться в общей памяти, и потоки не будут ее брать себе в свой кеш.

Как это выглядит?
private volatile AtomicInteger count;
Просто добавляем к переменной volatile.

Но это не говорит о полной потокобезопасности… Ведь операции могут быть не атомарны над переменной. Но можно использовать Atomic классы, которые делают операцию атомарно, то есть за одно выполнение процессором.

Таких классов можно много найти в пакете java.util.concurrent.atomic.

#java

Подписывайтесь на канал 👉@cod_academy
Сборка exe файлов - pyinstaller

Если вы просто скопируете проект, то он не будет работать на других системах где нет установленного Python, а если есть, то возможно там отсутствуют нужные библиотеки. Но можно создать исполняемый файл exe, который запустится и без Python. Необходимо установить pyinstaller:

install pyinstaller

Затем перейти в командную строку, и перейти в нужную директорию с помощью команды cd. Далее напишем такой код:

--onefile --noconsole main.py

--onefile - означает, что будет только один исполняемый файл.

--noconsole - консоль не будет запускаться при открытии

main.py - файл, при запуске которого начинает работать ваша программа

В папке dist будет лежать нужный файл, остальные созданные папки можно удалить

Внимание! С помощью данного метода не получится скрыть ваш код, так же вы не получите прироста в скорости работы программы.

#python

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

В init части цикла for можно объявлять не одни лишь переменные. Здесь также можно разместить классы и функции.

Благодаря этому можно использовать множество переменных с разными типами.

#cpp

Подписывайтесь на канал 👉@cod_academy
Что такое модификаторы доступа?

Модификаторы доступа — это инструмент, при помощи которого можно настроить доступ к классам, методам и переменным.

Бывают следующие модификаторы, упорядоченные в порядке повышения доступа:
1) private — используется для методов, полей и конструкторов. Уровень доступа — только класс, внутри которого он объявлен.
2) package-private(default) — может использоваться для классов. Доступ только в конкретном пакете (package), в котором объявлен класс, метод, переменная, конструктор.
3) protected — такой же доступ, как и package-private + для тех классов, которые наследуются от класса с модификатором protected.
4) public — используется и для классов. Полноценный доступ во всем приложении.

#java

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

Вы можете использовать метод .tolist() для перевода массива в список.

#python

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

Дано действительное число a и натуральное n. Вычислите корень n-й степени из числа a, используя вещественный бинарный поиск.

Формат входных данных:
С клавиатуры через пробел вводится два числа:
1. a – действительное, неотрицательное, не превосходит 1000, задано с точностью до 6 знаков после десятичной точки;
2. n – натуральное, не превосходящее 10.

Формат выходных данных:
Требуется вывести число с точностью не менее 6 знаков после запятой.

#cpp

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

В Java метод compareTo() получает значение 0, если аргумент является строкой лексически равной данной строке; значение меньше 0, если аргумент является строкой лексически большей, чем сравниваемая строка; и значение больше 0, если аргумент является строкой лексически меньшей этой строки.

#java

Подписывайтесь на канал 👉@cod_academy
Разница между == и is

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

Итак, оператор == проверяет равенство значений двух объектов. А оператор is в свою очередь проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памяти.

Однако Python в целях производительности кеширует короткие строки и малые целые числа, поэтому возможны некоторые казусы, как в примере.

#python

Подписывайтесь на канал 👉@cod_academy
Объединения тоже могут быть шаблонами

Еще одна вещь, о которой знают немногие, это то, что объединения тоже могут быть шаблонами.

У них также могут быть конструкторы и функции-члены. Ничего общего с наследованием (включая виртуальные функции).

#cpp

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