Выражения-генераторы. Тестирование. (не) Погружение
Выражения-генераторы Выражения-генераторы, как генератор функций, но без функции. > > > unique_characters = {'E', 'D', 'M', 'O', 'N', 'S', 'R', 'Y'} ① Выражение-генератор, это как анонимная функция которая выдает значения. Само выражение выглядит как список, но он обернут не в квадратные, а в фигурные скобки. ② Выражение-генератор возвращает итератор. ③ Вызов next(gen) возвращает следующее значение итератора. ④ Если вам нравится, вы можете повторить через все возможные значения и возвратить кортеж, список или множество, направив выражение-генератор в tuple(), list(), или set(). В этих случаях вам не нужно дополнительных скобок - просто передайте " голые" выражение ord(c) for c in unique_characters в tuple() функцию, и Python понимает, что это выражение-генератор.
Вот еще один способ сделать то же самое, используя генератор функции: def ord_map(a_string): gen = ord_map(unique_characters) Выражения-генераторы более компактны, но функционально равны. Тестирование
(не) Погружение (Данная страница находится на стадии перевода) Современная молодежь. Избалованы быстрыми компьютерами и модными «динамическими» языками. Писать, потом предоставлять свой код, потом отлаживать (в лучшем случае). В наши дни была дисциплина. Я сказал, дисциплина! Нам приходилось писать программы вручную, на бумаге, и вводить их в компьютер на перфокартах. И нам это нравилось!
В этом разделе вы напишете и отладите набор вспомогательных функций для конвертирования в римскую систему и обратно. Вы видели, как конструируются и валидируются числа в римской системе в разделе «Учебный пример: Римские цифры». Вернемся немного назад и представим, как бы выглядила реализация в виде функции, производящей преобразование в обоих направлениях. Правила формирования римских чисел приводят нас к нескольким интересным наблюдениям: 1. Существует только один правильный способ записать число римскими цифрами. 2. Обратное также верно: если строка символов является последовательностью римских символов, она представляет только одно число, то есть может быть интерпретирована единственным способом. 3. Диапазон чисел, которые могут быть записаны римскими цифрами, — от 1 до 3999. У римлян было несколько способов записывать более крупные числа, в частности, с помощью черты над числом, которая означала 6ы, что значение нужно умножить на 1000. Для целей этой главы нам достаточно ограничиться диапазоном 1 — 3999. 4. Нет способа представить 0 в римской системе. 5. Нет способа представить отрицательные числа в римской системе. 6. Нет способа представить дробные или нецелые числа в римской системе. Попробуем отразить, что должен делать модуль roman. py. Он будет содержать две основные функции, to_roman() и from_roman(). Функция to_roman() должна принимать целое число в диапазоне от 1 до 3999 и возвращать строку, содержащую римское представление этого числа… Остановимся здесь. Давайте теперь сделаем кое-что неожиданное: опишем небольшой тестовый случай, который проверяет, работает ли функция to_roman() так, как мы этого ожидаем. Вы правильно поняли: мы собираемся написать код, который тестирует код, который еще не написан. Это так называемая разработка через тестирование (test-driven-development, TDD). Набор из двух функций конвертации — to_roman(), from_roman() — может быть написан и протестирован как юнит, в отдельности от любой крупной программы, которая импортирует их. В Python’е есть фреймворк для юнит-тестирования, модуль с соответствующим называнием unittest.
Юнит тестирование — важная часть всей стратегии разработки, основанной на тестировании. Если вы пишете юнит-тесты, необходимо писать их на ранних этапах и обновлять их по мере изменений кода и требований. Многие люди пропагандируеют написание тестов до написания тестируемого кода, и именно этот подход я собираюсь продемонстрировать в этом разделе. Однако юнит-тесты выгодны вне зависимости от того, когда вы их пишете.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|