Найти тему
Разработка через тестирование: Поддельная реализация
Поддельная реализация — один из трёх способов добиться выполнения теста. "Подделать реализацию значит создать заглушку, которая будет возвращать константу, а затем постепенно заменять константу переменными, пока не не получится настоящий код." (К. Бек, "Разработка через тестирование")
1 год назад
Разработка через тестирование: Триангуляция
Еще один важный эпизод из книги К. Бека "Разработка через тестирование". Есть по крайней мере три способа заставить тест выполняться: подделка реализации, триангуляция и очевидная реализация. Триангуляция — это способ вычисления источника радиосигнала путем измерения его азимута двумя отдельными станциями слежения...
1 год назад
Шаблон проектирования Value Object ("Объект-значение")
Шаблон Value Object "Объект-значение" предполагает использование объектов в качестве значений. Он помогает избежать наложения имён. Необходимое ограничение: значения атрибутов устанавливаются в конструкторе и больше никогда не изменяются, а все операции должны возвращать результаты в виде новых объектов...
127 читали · 1 год назад
Шаблон проектирования Imposter ("Самозванец")
Приятное дополнение к основному материалу книги "Разработка через тестирование" — примеры шаблонов проектирования. Шаблон Imposter ("Самозванец"): в решениях, основанных на объектах, в случае, если объект ведет себя не так, как хотелось бы, можно создать еще один объект, обладающий точно таким же внешним протоколом, но отличающийся внутренней реализацией...
1 год назад
Само быстрое моё решение на leetcode. Задача посчитать длину последнего слова в строке. Залез в официальную документацию по строкам, и ответ нашелся тут же: len(s.rsplit()[-1])
2 года назад
Как объединить два связанных списка на Python? Это первая задача на литкоде, которую я так и не смог решить. Проблема в том, что в питоне как бы нет такой структуры. Она реализована в библиотеке collections как deque (очередь), и если ей не пользоваться, то придется сначала оформить соответвующий объект прямо в своем коде. Поначалу я ковырялся в двух данных списках, которые в условии выглядели как обычный list, а на поверку оказались объектами класса LinkedList, заранее реализованного в форме для ответа. Это означало, что работать сними как со списками, при помощи методов списков и прочих операторов, невозможно. Вообще у класса LinkedList в задаче не было ничего кроме двух атрибутов - value и next. Как и положено теории связанных списков, первый хранил значение, а второй должен был служить ссылкой на очередное значение. Тут-то я и застрял. Как должна выглядеть ссылка на очередное значение, было до отчаяния непонятно. Просветление пришло. В качестве аргумента next объект класса LinkedList принимал также объект класса LinkedList! Казалось, решение близко. Однако, как я ни бился, у меня выходили только монструозные нерабочие нечитаемые варианты. В итоге, я решил сдаться и заглянуть в решения. Смысл самого изящного и быстрого был в следующем. Автор создавал две вспомогательных ссылки cur и dummy на один объект класса LinkedList. Затем он сравнивал атрибуты val двух данных списков, и в случае если первый меньше второго, ставил ссылку cur на объект list1, а также переставлял ссылку list1 на атрибут next того же объекта list1, т.е. list1 = list1.next. В противном случае проделывалось то же самое, только с объектом list2. Несмотря на то, что я так и не отправил на проверку никакого своего решения и фактически его так и не нашел, в муках поиска ответа я узнал много нового и полезного о связанных списках, логике работы пайтон с ними, о возможности реализации собственных структур данных.
2 года назад
Потратил кучу времени на книгу "Django 3 By Example" Antonio Melé так ничего по существу и не поняв. Ситуация окончательно зашла в тупик, когда речь пошла об элементах ajax и прочих java-удобствах. Эй, я ещё ничего толком не понял в самом Django, а мне уже толкуют о красивой пагинации и чудо-виджетах для работы с картинками! То ли дело "Django, Python и Pycharm" Анатолия Постолита. Сама идея объединить в одной книге три эти темы, продвигая материал "единым фронтом" сразу меня зацепила. И ожидания вполне оправдываются! То что в книжке Меле выглядело магией, у Постолита читается как инструкция для микроволновки. Он, к примеру, не жалеет бумаги на объяснение базового взаимодействия фреймворка с браузером через простейшие запросы, тогда как Меле сразу же подтягивает базы данных, что сильно отягощает понимание основ.
2 года назад
Отличный способ ознакомиться с огромными встроенными возможностями Python — решать задачи на leetcode.com. Мне быстро разонравилось изобретать в каждой задаче велосипед, особенно глядя на лучшие варианты решения от других участников. Но главное, это сподвигло меня рыться в официальной документации по Python, в поисках, к примеру, нужного метода строки или списка, параллельно просматривая все прочие. Так что отличная идея зайти на литкод, нажать Problems, отсортировать задачи, как я, например, по сложности, выбирая Easy, и решать. Можно выбрать задачи на алгоритмы, работу с данными или параллельные вычисления, а также топовые вопросы с собесов или от разрабов самого литкода.
2 года назад
Рекурсия
Рекурсия в узком смысле для Python — это возможность вызвать функцию из самой себя. Это удобно, когда части большой задачи решаются по той же формуле, что и вся задача целиком. Главное, используя рекурсию, обеспечить т.н. "базовый случай",...
2 года назад
Квадратичные сортировки в Python
Это сортировки, количество операций в которых не превышает квадрат количества сортируемых элементов. То есть, если мне понадобилось отсортировать список из n элементов с помощью этих сортировок, то на это понадобится (n*(n-1))/2 операций, но не более n². 1. Первый из трёх типов квадратичных сортировок — сортировка вставкой или insert sort. Её особенность в том, что первый элемент массива принимается за уже отсортированный в самом себе массив. Следующий элемент сравнивается с крайним (в случае с первым элементом, единственным) отсортированного массива, и в случае, если крайний больше следующего, они меняются местами...
2 года назад
Кстати, под Линуксом прекрасно работается на vim. Нарыл на Гитхабе годный конфиг с подсветкой синтаксиса, автоматической расстановкой отступов и дублированием парных символов и т.п. и теперь доволен. Правда, вим стал слегка задумчивей, что, как некоторые говорят, не отвечает его идеологии молниеносного быстродействия и лёгкости. Однако, всё прочее на моём стареньком ноуте ещё медленней.
2 года назад