Форматирование строк
Привет, в этом посте разберем возможные в Python методы форматирования строк. Все примеры использования можете посмотреть на прикрепленной ниже картинке.
Самый древний и уже редко используемый способ – с помощью оператора %. Написание %s и %d зависит от того, что мы туда передаем и что хотим увидеть в итоге, но это уже тема отдельного поста.
В Python 2.6 появился метод .format() с немного отличающимся синтаксисом от существующего оператора %. К слову, этот метод активно используется и по сей день, в отличии от его предшественника.
Начиная с версии Python 3.6, доступны f-строки – свежий и наиболее производительный способ форматирования строк.
#python
Подписывайтесь на канал 👉@cod_academy
Привет, в этом посте разберем возможные в Python методы форматирования строк. Все примеры использования можете посмотреть на прикрепленной ниже картинке.
Самый древний и уже редко используемый способ – с помощью оператора %. Написание %s и %d зависит от того, что мы туда передаем и что хотим увидеть в итоге, но это уже тема отдельного поста.
В Python 2.6 появился метод .format() с немного отличающимся синтаксисом от существующего оператора %. К слову, этот метод активно используется и по сей день, в отличии от его предшественника.
Начиная с версии Python 3.6, доступны f-строки – свежий и наиболее производительный способ форматирования строк.
#python
Подписывайтесь на канал 👉@cod_academy
Проверка четности или нечетности числа без использования оператора %
Хотя этот трюк не намного лучше, чем использование оператора %, но иногда он все-таки более эффективен (с большими числами).
#java
Подписывайтесь на канал 👉@cod_academy
Хотя этот трюк не намного лучше, чем использование оператора %, но иногда он все-таки более эффективен (с большими числами).
#java
Подписывайтесь на канал 👉@cod_academy
Оператор присваивания ( = ), строго говоря, является бинарным оператором. Его объявление идентично объявлению любого другого бинарного оператора со следующими исключениями:
☑️ Он должен быть нестатической функцией-членом.
☑️ Он не наследуется производными классами.
☑️ Компилятор может создать функцию operator = по умолчанию для типов классов, если она не существует.
В примере показано, как объявить оператор присваивания.
#cpp
Подписывайтесь на канал 👉@cod_academy
☑️ Он должен быть нестатической функцией-членом.
☑️ Он не наследуется производными классами.
☑️ Компилятор может создать функцию operator = по умолчанию для типов классов, если она не существует.
В примере показано, как объявить оператор присваивания.
#cpp
Подписывайтесь на канал 👉@cod_academy
Перегрузка в Java
Перегрузка позволяет различным методам иметь одно и то же имя, но разные сигнатуры, где сигнатура может отличаться по количеству входных параметров или по типу входных параметров, либо по обоим этим признакам.
#java
Подписывайтесь на канал 👉@cod_academy
Перегрузка позволяет различным методам иметь одно и то же имя, но разные сигнатуры, где сигнатура может отличаться по количеству входных параметров или по типу входных параметров, либо по обоим этим признакам.
#java
Подписывайтесь на канал 👉@cod_academy
В чем различия между delete и delete[]?
delete предназначен для уничтожения объектов, память под которые выделена при помощи new(). delete[] для объектов выделенных при помощи оператора new[]().
При неправильном использовании оператора delete (например, delete вместо delete[]) результат будет: undefined behavior.
#cpp
Подписывайтесь на канал 👉@cod_academy
delete предназначен для уничтожения объектов, память под которые выделена при помощи new(). delete[] для объектов выделенных при помощи оператора new[]().
При неправильном использовании оператора delete (например, delete вместо delete[]) результат будет: undefined behavior.
#cpp
Подписывайтесь на канал 👉@cod_academy
Сортировка словаря по значениям
Сортировка данных словаря по значениям ключей, а не по самим ключам, нередко ставит в тупик.
Задача решается довольно просто при помощи аргумента key функции sorted для указания функции, которая будет вызываться на каждом элементе до сравнения.
#python
Подписывайтесь на канал 👉@cod_academy
Сортировка данных словаря по значениям ключей, а не по самим ключам, нередко ставит в тупик.
Задача решается довольно просто при помощи аргумента key функции sorted для указания функции, которая будет вызываться на каждом элементе до сравнения.
#python
Подписывайтесь на канал 👉@cod_academy
Пустая коллекция вместо Null
Если ваша программа может возвращать коллекцию, которая не содержит ни одного значения, убедитесь, что возвращена именно пустая коллекция, а не Null. Это сэкономит вам время на различные проверки.
#java
Подписывайтесь на канал 👉@cod_academy
Если ваша программа может возвращать коллекцию, которая не содержит ни одного значения, убедитесь, что возвращена именно пустая коллекция, а не Null. Это сэкономит вам время на различные проверки.
#java
Подписывайтесь на канал 👉@cod_academy
Бинарный поиск в массивах
Допустим, мы хотим вставить новый элемент в отсортированную таблицу. Arrays.binarySearch() возвращает индекс ключа поиска, если он содержится в таблице. В противном случае она возвращает точку вставки, которую мы можем использовать для подсчета индекса для нового ключа: -(insertion point)-1. Более того, метод binarySearch является самым простым и эффективным методом поиска элемента в отсортированном массиве в Java.
Рассмотрим следующий пример. У нас есть таблица ввода с четырьмя элементами, упорядоченными по возрастанию. Мы хотели бы вставить номер 3 в эту таблицу. Вот как мы можем подсчитать индекс точки вставки.
#java
Подписывайтесь на канал 👉@cod_academy
Допустим, мы хотим вставить новый элемент в отсортированную таблицу. Arrays.binarySearch() возвращает индекс ключа поиска, если он содержится в таблице. В противном случае она возвращает точку вставки, которую мы можем использовать для подсчета индекса для нового ключа: -(insertion point)-1. Более того, метод binarySearch является самым простым и эффективным методом поиска элемента в отсортированном массиве в Java.
Рассмотрим следующий пример. У нас есть таблица ввода с четырьмя элементами, упорядоченными по возрастанию. Мы хотели бы вставить номер 3 в эту таблицу. Вот как мы можем подсчитать индекс точки вставки.
#java
Подписывайтесь на канал 👉@cod_academy
🤔1
Декларатор ссылки lvalue: &
Содержит адрес объекта, но синтаксически ведет себя подобно объекту.
Ссылку lvalue можно считать другим именем для объекта. Объявление ссылки lvalue состоит из необязательного списка спецификаторов, за которым следует декларатор ссылки. Ссылка должна быть инициализирована и не может быть изменена.
Любой объект, адрес которого можно преобразовать в некоторый тип указателя, можно также преобразовать в аналогичный ссылочный тип. Например, любой объект, адрес которого можно преобразовать в тип char *, можно также преобразовать в тип char &.
В примере демонстрируется декларатор ссылки путем объявления объекта Person и ссылки на этот объект. Поскольку rFriend является ссылкой на myFriend, при обновлении любой из этих переменных изменяется один и тот же объект.
#cpp
Подписывайтесь на канал 👉@cod_academy
Содержит адрес объекта, но синтаксически ведет себя подобно объекту.
Ссылку lvalue можно считать другим именем для объекта. Объявление ссылки lvalue состоит из необязательного списка спецификаторов, за которым следует декларатор ссылки. Ссылка должна быть инициализирована и не может быть изменена.
Любой объект, адрес которого можно преобразовать в некоторый тип указателя, можно также преобразовать в аналогичный ссылочный тип. Например, любой объект, адрес которого можно преобразовать в тип char *, можно также преобразовать в тип char &.
В примере демонстрируется декларатор ссылки путем объявления объекта Person и ссылки на этот объект. Поскольку rFriend является ссылкой на myFriend, при обновлении любой из этих переменных изменяется один и тот же объект.
#cpp
Подписывайтесь на канал 👉@cod_academy
Нахождение наиболее частых элементов списка
Если необходимо найти несколько наиболее часто повторяющихся значений, лучше воспользоваться счетчиком Counter из библиотеки collections.
Метод Counter.most_common(x) возвращает x кортежей, в которых первое значение – элемент, а второе – количество его повторений.
#python
Подписывайтесь на канал 👉@cod_academy
Если необходимо найти несколько наиболее часто повторяющихся значений, лучше воспользоваться счетчиком Counter из библиотеки collections.
Метод Counter.most_common(x) возвращает x кортежей, в которых первое значение – элемент, а второе – количество его повторений.
#python
Подписывайтесь на канал 👉@cod_academy
❤2
Получаем срез из бесконечного генератора
Допустим, мы хотим получить какой-то конечный список элементов из бесконечного генератора. Что нам для этого понадобится?
Для начала создадим сам генератор fib, уже немного знакомый вам по посту, где мы использовали lru_cache, правда там была рекурсивная функция. Этот генератор позволяет (за неимением другого слова) "генерировать" числа из последовательности Фибоначчи.
Чтобы получить желаемый срез, импортируем модуль itertools, в котором уже есть удобная функция islice, позволяющая осуществить срез генератора fib.
#python
Подписывайтесь на канал 👉@cod_academy
Допустим, мы хотим получить какой-то конечный список элементов из бесконечного генератора. Что нам для этого понадобится?
Для начала создадим сам генератор fib, уже немного знакомый вам по посту, где мы использовали lru_cache, правда там была рекурсивная функция. Этот генератор позволяет (за неимением другого слова) "генерировать" числа из последовательности Фибоначчи.
Чтобы получить желаемый срез, импортируем модуль itertools, в котором уже есть удобная функция islice, позволяющая осуществить срез генератора fib.
#python
Подписывайтесь на канал 👉@cod_academy
Резервирование памяти
Некоторые Java-приложения очень требовательны к ресурсам и могут работать медленно. Для повышения производительности можно выделять Java-машине больше оперативной памяти.
• Xms – минимальный пул выделения памяти;
• Xmx – максимальный пул выделения памяти;
• XX:PermSize – начальный размер, который будет выделен при запуске JVM;
• XX:MaxPermSize – максимальный размер, который может быть выделен при запуске JVM.
#java
Подписывайтесь на канал 👉@cod_academy
Некоторые Java-приложения очень требовательны к ресурсам и могут работать медленно. Для повышения производительности можно выделять Java-машине больше оперативной памяти.
• Xms – минимальный пул выделения памяти;
• Xmx – максимальный пул выделения памяти;
• XX:PermSize – начальный размер, который будет выделен при запуске JVM;
• XX:MaxPermSize – максимальный размер, который может быть выделен при запуске JVM.
#java
Подписывайтесь на канал 👉@cod_academy
Кортеж — tuple
Как и pair, tuple — коллекция значений различных типов данных конкретного размера.
В некоторых случаях вместо tuple удобнее использовать std::array. Это обычный массив с некоторыми функциями стандартной библиотеки C++, который был добавлен в C++11.
#cpp
Подписывайтесь на канал 👉@cod_academy
Как и pair, tuple — коллекция значений различных типов данных конкретного размера.
В некоторых случаях вместо tuple удобнее использовать std::array. Это обычный массив с некоторыми функциями стандартной библиотеки C++, который был добавлен в C++11.
#cpp
Подписывайтесь на канал 👉@cod_academy
Эффективный трюк, чтобы узнать, является ли число степенью двойки
Обычный метод деления имеет сложность O(logN), но эту задачу можно решить со сложностью O(v), где v — количество цифр числа в двоичной форме.
#java
Подписывайтесь на канал 👉@cod_academy
Обычный метод деления имеет сложность O(logN), но эту задачу можно решить со сложностью O(v), где v — количество цифр числа в двоичной форме.
#java
Подписывайтесь на канал 👉@cod_academy
Функция zip
Функция zip создаёт итератор, который комбинирует элементы нескольких списков. Это позволяет осуществлять параллельный обход списков в циклах for или, например, выполнять параллельную сортировку.
#python
Подписывайтесь на канал 👉@cod_academy
Функция zip создаёт итератор, который комбинирует элементы нескольких списков. Это позволяет осуществлять параллельный обход списков в циклах for или, например, выполнять параллельную сортировку.
#python
Подписывайтесь на канал 👉@cod_academy
👍1
Работа с ошибками
Отлов багов – это, возможно, самая трудоемкая составляющая процесса разработки на Java. Трассировка стека позволяет отследить, в каком именно месте проекта было выброшено исключение.
#java
Подписывайтесь на канал 👉@cod_academy
Отлов багов – это, возможно, самая трудоемкая составляющая процесса разработки на Java. Трассировка стека позволяет отследить, в каком именно месте проекта было выброшено исключение.
#java
Подписывайтесь на канал 👉@cod_academy
👍1
Перегрузка операторов
Ключевое слово operator позволяет изменить работу конкретного оператора с экземплярами класса. Это дает оператору дополнительное значение — "перегружает" его. Компилятор различает разные значения оператора, проверяя типы его операндов.
В примере оператор + перегружается для сложения двух комплексных чисел.
#cpp
Подписывайтесь на канал 👉@cod_academy
Ключевое слово operator позволяет изменить работу конкретного оператора с экземплярами класса. Это дает оператору дополнительное значение — "перегружает" его. Компилятор различает разные значения оператора, проверяя типы его операндов.
В примере оператор + перегружается для сложения двух комплексных чисел.
#cpp
Подписывайтесь на канал 👉@cod_academy
Конструктор по умолчанию в Java
Как и C++, Java автоматически создает конструктор по умолчанию, если нет конструктора по умолчанию или параметризованного конструктора, написанного программистом. А также как и в C++ конструктор по умолчанию автоматически вызывает родительский конструктор по умолчанию.
Но, в отличие от C++, конструктор по умолчанию в Java инициализирует члены класса значениями по умолчанию (числовые значения инициализируются как 0, логические значения инициализируются как false, а ссылки инициализируются как null).
#java
Подписывайтесь на канал 👉@cod_academy
Как и C++, Java автоматически создает конструктор по умолчанию, если нет конструктора по умолчанию или параметризованного конструктора, написанного программистом. А также как и в C++ конструктор по умолчанию автоматически вызывает родительский конструктор по умолчанию.
Но, в отличие от C++, конструктор по умолчанию в Java инициализирует члены класса значениями по умолчанию (числовые значения инициализируются как 0, логические значения инициализируются как false, а ссылки инициализируются как null).
#java
Подписывайтесь на канал 👉@cod_academy
Функция reduce
Модуль functools позволяет хорошо раскрыть функциональные возможности Python. Например, в functools есть интересная функция reduce, которая позволяет «сжимать» данные, применяя последовательно функцию и запоминая результат.
Таким образом, в примере выше reduce умножает 1 на 2, затем результат этого умножения на 3 и так далее.
#python
Подписывайтесь на канал 👉@cod_academy
Модуль functools позволяет хорошо раскрыть функциональные возможности Python. Например, в functools есть интересная функция reduce, которая позволяет «сжимать» данные, применяя последовательно функцию и запоминая результат.
Таким образом, в примере выше reduce умножает 1 на 2, затем результат этого умножения на 3 и так далее.
#python
Подписывайтесь на канал 👉@cod_academy
Алгоритм accumulate
Возвращает сумму всех значений, лежащих в диапазоне между [first, last) с переменной init.
#cpp
Подписывайтесь на канал 👉@cod_academy
Возвращает сумму всех значений, лежащих в диапазоне между [first, last) с переменной init.
#cpp
Подписывайтесь на канал 👉@cod_academy
Что за зверь "Matcher"?
Класс Java Matcher (java.util.regex.Matcher) создан для поиска некоторого множества вхождений регулярного выражения в одном тексте и поиска по одному шаблону в разных текстах. Класс Java Matcher имеет много полезных методов.
Например:
• boolean matches(): вернет значение true при совпадении строки с шаблоном.
• boolean find(): вернет значение true при обнаружении подстроки, совпадающей с шаблоном, и перейдет к ней.
• int start(): вернет значение индекса соответствия.
• int end(): вернет значение индекса последующего соответствия.
• String replaceAll(String str): вернет значение измененной строки подстрокой str.
Другие методы Matcher можно найти в официальной документации.
Рассмотрите простой пример работы с Pattern и Matcher.
#java
Подписывайтесь на канал 👉@cod_academy
Класс Java Matcher (java.util.regex.Matcher) создан для поиска некоторого множества вхождений регулярного выражения в одном тексте и поиска по одному шаблону в разных текстах. Класс Java Matcher имеет много полезных методов.
Например:
• boolean matches(): вернет значение true при совпадении строки с шаблоном.
• boolean find(): вернет значение true при обнаружении подстроки, совпадающей с шаблоном, и перейдет к ней.
• int start(): вернет значение индекса соответствия.
• int end(): вернет значение индекса последующего соответствия.
• String replaceAll(String str): вернет значение измененной строки подстрокой str.
Другие методы Matcher можно найти в официальной документации.
Рассмотрите простой пример работы с Pattern и Matcher.
#java
Подписывайтесь на канал 👉@cod_academy