Содержание
«Непрактичный» Python: занимательные проекты для тех, кто хочет поумнеть
Воган Ли
Артикул | 2729 |
ISBN | 978-5-9775-6751-0 |
Количество страниц | 464 |
Формат издания | 165 x 215 мм |
Печать | Черно-белая |
Серия | Внесерийные книги |
1100 ₽
935 ₽
# Python# бэкенд
- Описание
- Детали
- Отзывы (0)
Описание
Данная книга — это набор забавных, в том числе образовательных, проектов, предназначенных для развлечения программистов и одновременного повышения их навыков. Это хорошее дополнение к традиционным самоучителям, отличная «следующая книга», расширяющая полученные ранее навыки и знакомящая с новыми полезными инструментами.
Каждый проект включает в себя интригующий поворот с историческими событиями, литературными персонажами или ссылками на поп-культуру — и все это используя модули tkinter, matplotlib, cProfile, Pylint, pygame, pillow и python-docx.
Потренируйтесь в решении задач, чтобы:
- Помочь Джеймсу Бонду взломать высокотехнологичный сейф с использованием алгоритма восхождения к вершине холма
- Сочинить стихи с помощью анализа марковских цепей
- Породить расу гигантских крыс, применив генетические алгоритмы
- Запланировать обеспеченную жизнь на пенсии с использованием метода Монте-Карло
- Смоделировать Млечный Путь и рассчитать наши шансы обнаружить инопланетные цивилизации
- Нарисовать карту Марса и изучить орбитальную механику с использованием вашего собственного космического спутника
- И проделать многое другое! Если вы хотите приобрести немного новых навыков в программировании или же просто слегка творчески поупражняться, то с данной книгой вы получите бесконечное удовольствие и станете настоящим фанатом этого языка.
Ли Воган — программист, энтузиаст поп-культуры и педагог. Профессионал в сфере построения и анализа компьютерных моделей, разработки, тестирования и коммерциализации программного обеспечения, а также подготовки ИТ-специалистов. Эта книга написана им с целью помочь читателям отточить свои навыки программирования на Python и получить от этого удовольствие!
Детали
Артикул | 2729 |
---|---|
ISBN | 978-5-9775-6751-0 |
Количество страниц | 464 |
Серия | Внесерийные книги |
Переплет | Мягкая обложка |
Печать | Черно-белая |
Год | 2022 |
Габариты, мм | 215 × 165 × 25 |
Вес, кг | 0.613 |
- ✓ Новинки на 2 недели раньше магазинов
- ✓ Цены от издательства ниже до 30%
- ✓ Акции и скидки только для подписчиков
- ✓ Важные новости БХВ
ПОЛЕЗНАЯ РАССЫЛКА КНИЖНЫХ НОВОСТЕЙ
Подписываясь на рассылку, вы соглашаетесь с политикой конфиденциальности и обработкой своих персональных данных.
Рекомендуем также
-
Начинаем программировать на Python – Бумажная книга
1898₽
- Дронов Владимир Александрович
Django 3.0. Практика создания веб-сайтов на Python
1500 ₽
1275 ₽ - Элбон Крис
Машинное обучение с использованием Python. Сборник рецептов.
925 ₽
786 ₽ - Дронов Владимир Александрович, Прохоренок Николай Анатольевич
Python 3. Самое необходимое. 2-е изд.
1073 ₽
912 ₽
Непрактичный python — пишем декоратор в одну строку / Хабр
Давеча с коллегой на работе поспорили, что нельзя написать кэширующий декоратор в 4 строки. Я утверждал, что можно. Все началось с 4-х строк, закончилось функциональным программированием кучей lambda выражений в одну строку и декоратором в одну строку.
Дисклеймер
Такой код не попадает в мои проекты или проекты моей команды, и все что описано ниже было написано в рамках академического изыскания. Я понимаю что важное преимущество python в его читабельности. Автором, из изменяющих сознания вещества, при написании данного поста, было использовано только кофе.
Пролог
Идея написать декоратор в 4 строки меня изначально никак не трогала. Было просто интересно написать декоратор. Но в процессе спортивный интерес взял верх. Изначально все начиналось с простого кэширующего декоратора.
data = {} # словарь для сохаренния кэшируемых данных def decor_cache(func): def wrapper(*args): # создаем ключ из назвнии функции которую # кэшируем и аргументов которые передаем key = f"{func.__name__}{args}" # проверяем кэшировли дунную функцию с аргументами if args in data: return data[key] else: # если кэшируем впервые response = func(args) # запускаем функцию с аргументами data[key] = response # кэшируем результат return response return wrapper
Сейчас задача из 18 строк кода, 11 если удалить пробелы и комментарии, сделать 4 строки. Первое что приходит на ум, записать конструкцию if…else в одну строчку.
data = {} # словарь для сохаренния кэшируемых данных def decor_cache(func): def wrapper(*args): # создаем ключ из назвнии функции которую # кэшируем и аргументов которые передаем key = f"{func.__name__}{args}" if not args in data # если кэшируем впервые response = func(args) # запускаем функцию с аргументами data[key] = response # кэшируем результат return data.get(key) if key in data else response return wrapper
Теперь у нас 15 строк кода против 18, и появился ещё один if, что создает дополнительную вычислительную нагрузку, но сегодня мы собрались не для улучшению performance. Давайте добавим в этот мир энтропии и немного copy-paste и упростим переменную key.
data = {} # словарь для сохаренния кэшируемых данных def decor_cache(func): def wrapper(*args): if not args in data # если кэшируем впервые response = func(args) # запускаем функцию с аргументами data[f"{func.__name__}{args}"] = response # кэшируем результат return data.get(f"{func.__name__}{args}") if args in data else response return wrapper
Теперь мы имеем 12 строк, без пробелов и комментариев 8 строк. Нам пока этого не достаточно, цель 4 строчки, и надо упростить ещё. Мы помним что декоратор — это функция которая должна возвращать callable объект (функцию). Функцией может быть и lambda! Значит мы можем упростить и функцию wrapper и заменить её на lambda — анонимную функцию. И возвращать из функции «декоратора», анонимную функцию.
data = {} # словарь для сохаренния кэшируемых данных def decor_cache(func): cache = lambda *args: data.get(f"{func.__name__}{args}") if args in data else data[f"{func.__name__}{args}"] = func(args) return lambda *args: cache(*args) if cache(*args) else data.get(f"{func.__name__}{args}")
Цель достигнута! Декоратор в 4 строки, чистого кода — получился. Как можно увидеть одной lambda функцией не обошлось, пришлось создать две lambda функции. Первая lambda делает две вещи: если объект уже был закешировав возвращаем ранее закешировнанное значение и кэширует объект если он не был ранее кэширован но в таком случае мы нечего не возвращаем.
Первая lambda функция теперь у нас не анонимная её пришлось записать в переменную чтобы к ней можно было обращаться по имени переменной. Вторая lambda делает примерно тоже самое что и первая только обращалась к первой lambda по имени, кеширует и получает значения из кеша, в случае если первая lambda не вернула значение, значит объект новый и он был закэширован и значит вторая lambda вернет входящие значение.
Конструкция получилась громоздкой, но все равно читаемая, более или менее — при условии если вы легко читаете lambda выражения. Много условностей, но это ещё не ад но мы к нему приближаемся. После всего проделанного пути все ещё кажется что можно ещё сократить количество строк кода. Мы уже вошли во вкус. Например те-же две lambda выражения можно совместить в одно выражение. Давайте объединим две lambda функции в одну.
Для этого нам надо пойти на некоторое ухищрение, использовать тернарный оператор or. Тернарный оператор принимает два значения, справа и слева относительно себя, и пытается получить логический ответ True или False. Как оператор сравнения. Для того чтобы вычислить конструкцию слева и справа интерпретатор python выполнит код справа и слева. Слева у нас конструкция memory.update({f»{func.name}_{args[0]}»: func(args[0])}) данное выражение вернет нам None метод update всегда будет возвращать нам None тернарный оператор воспримит этого как False и не будет это выводить, но главное что он выполнит этот код и мы обновим переменную memory. Справа у нас конструкция получения элемента по индексу из tupla, выражение простое и всегда будет давать результат, если в tuple будет запрашиваемый индекс.
data = {} # словарь для сохаренния кэшируемых данных def decor_cache(func): return lambda *args: memory.get(f"{func.__name__}_{args[0]}") if f"{func.__name__}_{args[0]}" in memory else (lambda: memory.update({f"{func.__name__}_{args[0]}": func(args[0])}) or args[0])()
Отлично мы почти получили что хотели, меньше строчек кода две lambda функции в одной строке. Появляется вопрос, зачем нам здесь тогда функция decorator_cache, давайте её тоже сделаем lambda выражением но сохраним в переменную, чтобы ей можно было пользоваться по имени.
data = {} # словарь для сохаренния кэшируемых данных decor_cache = lambda func: lambda *args: memory.get(f"{func.__name__}_{args[0]}") if f"{func.__name__}_{args[0]}" in memory else (lambda: memory.update({f"{func.__name__}_{args[0]}": func(args[0])}) or args[0])()
Нарушая все паттерны, нам удалось создать кэширующий декоратор, почти в одну строку. Почти, потому что формально у нас есть строка объявления переменной data. Это мне не давало покоя… примерно 10 минут, пока не вспомнил что в python есть функция globals().
Функция globals() возвращает словарь с глобальной таблицей символов, определённых в модуле. По сути выдает словарь глобальных переменных (ключ — имя переменной, значение — ссылка на объект). Так мы получаем возможность создавать переменные в одно выражение, одной строкой. Давайте тогда для создания переменной с пустым словарем, будем использовать следующую конструкцию:
globals().update({“memory”: {}})
И для получения значения переменной конструкцию с get:
globals().get(“memory”)
После чего мы применили это на наш декоратор, и теперь действительно все получилось уместить в одну строку.
decor_cache = lambda func: lambda *args: globals().get("memory").get(f"{func.__name__}_{args[0]}") if f"{func.__name__}_{args[0]}" in globals().get("memory") else (lambda : globals().get("memory").update({f"{func.__name__}_{args[0]}": func(args[0])}) or args[0])()
Отлично, казалось мы сделали не невозможное говнокод описали декоратор в одну строку. Немного сложно, и плохо читаемо, но конкретный пример нарачито спецально был доведен до предела, для демонстрации что lambda выражение это не сложный инструмент, и в качестве доказательства продемонстривать что любой код можно записать в одну строку.
Итоги
Все выше описанное служит академическим целям. Показать что функциональный подход бывает удобным и веселым, в сравнении со скучным декларативным ООП подходом. Не надо бояться или недооценивать функциональное программирование. Это отличный инструмент, который можно использовать чаще, при повседневных задачах.
Надеюсь данный пост, поможет вам или вашим коллегам полюбить функциональный подход и лучше понять как работают lambda выражения.
Непрактичное определение и значение — Merriam-Webster
непрактично
(ˌ)im-ˈprak-ti-kəl
: нецелесообразно: например,
а
: нецелесообразно применять или сохранять на практике или эффект
б
: неспособный разумно и предусмотрительно решать практические вопросы
с
: невозможно
г
: идеалистический
непрактичность
(ˌ)im-ˌprak-ti-ka-lə-tē
существительное
непрактично
(ˌ)im-ˈprak-ti-k(ə-)lē
наречие
Синонимы
- невыполнимый
- не работает
- непрактичный
- непригодный к эксплуатации
- непригодный для использования
- нерабочий
- бесполезно
Просмотреть все синонимы и антонимы в тезаурусе
Примеры предложений
Маленькие спортивные автомобили непрактичный для большой семьи.
Он был мечтательным и непрактичным молодым человеком.
Недавние примеры в Интернете
На той же встрече в конце февраля перед комитетом Палаты представителей по вооруженным силам, на которой Каль заявил, что другие виды оружия важнее, чем F-16, высокопоставленный член комитета от демократов Адам Смит предложил срок для любой возможной передачи F-16 — непрактично .
— Эрик Теглер, Forbes , 8 марта 2023 г.
Устаревший, скучный и непрактичный .
— Эрик Чунг, CNN , 20 января 2023 г.
В своем интервью Times Редзепи сказал, что большие перемены в ресторане ожидаются уже давно, поскольку пандемия показала ему, что модель, на которой основывался успех Noma, просто изменилась. 0067 непрактично .
— Тристан Бове, , Fortune , 9 января 2023 г.
Япония вложила много лет в новаторские цепочки поставок водорода, оставив ей 20-летнюю фору в водородной технологии, которая когда-то считалась непрактичной .
— Рам Эмануэль, WSJ , 4 декабря 2022 г.
Внутренние альтернативы непрактичны .
— Ричард Морган, 9 лет.0067 Anchorage Daily News , 4 ноября 2022 г.
Доставлять целую корову в очаги болезни было одинаково непрактично .
— Ханна Со, Discover Magazine , 31 августа 2022 г.
Хайндс счел эту идею унизительной и непрактичной .
— Энди Роуз, CNN , 16 февраля 2023 г.
Наш тестовый Орел был обит приятной, но непрактичный серо-коричневый клетчатый материал, который на ощупь напоминал высококачественную шерсть и ярко демонстрировал каждый след собаки и намек на человеческую ошибку.
— Дэвид Э. Дэвис-младший, Автомобиль и водитель , 15 февраля 2023 г.
Узнать больше
Эти примеры программно скомпилированы из различных онлайн-источников, чтобы проиллюстрировать текущее использование слова «непрактично». Любые мнения, выраженные в примерах, не отражают точку зрения Merriam-Webster или ее редакторов. Отправьте нам отзыв об этих примерах.
История слов
Первое известное использование
1865, в значении, определенном выше
Путешественник во времени
Первое известное использование непрактично было
в 1865 г.
Другие слова того же года
неосуществимый
непрактичный
проклинать
Посмотреть другие записи рядом
Процитировать эту запись
Стиль
MLAЧикагоAPAMМерриам-Вебстер
«Непрактично». Словарь Merriam-Webster.com , Merriam-Webster, https://www.merriam-webster.com/dictionary/impractical. По состоянию на 25 апреля 2023 г.
Копия цитирования
Детское определение
непрактично
прилагательное
непрактично
(ˈ)im-ˈprak-ti-kəl
: нецелесообразно: как
а
: нецелесообразно применять или сохранять на практике или в силу
непрактичное правило, не любимое многими
б
: неспособный разумно решать практические вопросы
с
: нецелесообразно
новые гаджеты были сложными и непрактично
непрактичность
(ˌ)im-ˌprak-ti-kal-ət-ē
существительное
непрактично
(ˈ)im-ˈprak-ti-k(ə-)lē
наречие
Еще от Merriam-Webster о
непрактичный
Нглиш: Перевод непрактичный для говорящих на испанском языке
Britannica English: Перевод непрактичный для говорящих на арабском языке
Последнее обновление:
— Обновлены примеры предложений
Подпишитесь на крупнейший словарь Америки и получите тысячи дополнительных определений и расширенный поиск без рекламы!
Merriam-Webster без сокращений
Можете ли вы решить 4 слова сразу?
Можете ли вы решить 4 слова сразу?
орфография
См. Определения и примеры »
Получайте ежедневно по электронной почте Слово дня!
Непрактичное определение и значение | Dictionary.com
- Основные определения
- Викторина
- Связанное содержимое
- Примеры
- Британский язык
Показывает уровень сложности слова.
[ im-prak-ti-kuhl ]
/ ɪmˈpræk tɪ kəl /
Сохранить это слово!
См. синонимы для: непрактичный / непрактичный на Thesaurus.com
Показывает уровень оценки в зависимости от сложности слова.
прилагательное
не практично и не полезно.
не способен заниматься практическими делами; лишенный смысла.
идеалист.
невозможно.
ВИКТОРИНА
МОЖЕТЕ ЛИ ВЫ ОТВЕЧАТЬ НА ЭТИ ОБЫЧНЫЕ ГРАММАТИЧЕСКИЕ СПОРЫ?
Есть грамматические дебаты, которые никогда не умирают; и те, которые выделены в вопросах этой викторины, наверняка снова всех разозлят. Знаете ли вы, как отвечать на вопросы, которые вызывают самые ожесточенные споры по грамматике?
Вопрос 1 из 7
Какое предложение верно?
Происхождение непрактичного
Впервые записано в 1860–1865 гг.; непрактичный 2 + практичный
ДРУГИЕ СЛОВА ОТ непрактичный
непрактичный
непрактичный, непрактичный, существительное
СЛОВА, КОТОРЫЕ МОЖНО СПУТАТЬ С непрактичным
невозможно , непрактичный, непрактичный, невероятный
Слова рядом с непрактичным
конфискация, обеднеть, обеднеть, наделить силой, непрактично, непрактично, проклинать, проклинать, неточно, непредикативно, неприступно
Dictionary.com Полный текст
На основе Random House Unabridged Dictionary, © Random House, Inc. 2023
Слова, относящиеся к непрактичному
абсурдный, нелогичный, невозможный, невероятный, донкихотский, спекулятивный, недостижимый, нереальный, непригодный, неразумный, неработоспособный, бесполезный, абстрактный, химерический , идеалистический, невыполнимый, неприменимый, неэффективный, неосуществимый, недействующий
Как использовать непрактичный в предложении
Часто лучшие места были недоступны без долгого похода с дороги, и это было нецелесообразно.
Как охотиться на звездоносых кротов (и их норы)|Кеннет Катания|15 сентября 2020 г.|Popular-Science
Расчет Дайсона 2013 года убедил многих людей в том, что детекторы гравитационных волн в лучшем случае непрактичны для обучения о квантовой гравитации.
Как биты квантовой гравитации могут жужжать|Томас Льютон|23 июля 2020 г.|Журнал Quanta
Элементы в этом упаковочном списке находятся на очень ранних стадиях разработки, а в некоторых случаях все еще довольно непрактичны и непроверены .
Что понадобится астронавтам, чтобы выжить в опасном путешествии на Марс?|Мария Темминг|15 июля 2020|Новости науки
В большинстве разработок на данный момент также требуются отдельные лазеры для управления каждым кубитом, что быстро становится непрактичным для устройств с тысячами если не миллионы кубитов.
Новый стартап намерен создать первый в мире крупномасштабный квантовый компьютер|Эдд Гент|22 июня 2020 г.|Singularity Hub
сценарий в реальном времени с волнами и продолжающимся морским маневрированием.
14 исключительных систем вооружения из истории, опередивших свое время|Мандал Даттатрейи|26 марта 2020|Царство истории
Но складывается ощущение, что это непрактично в эпоху Твиттера и круглосуточного освещения в новостях .
Ложь и последствия в Фергюсоне|Мэтт Льюис|25 октября 2014|DAILY BEAST
Хотя Рабинович размышляет, что нечто подобное было бы не только непрактично, но и вызвало бы серьезную негативную реакцию.
Порно борется за ваше право на серфинг: Pornhub, YouPorn и Redtube обвиняют в сетевой нейтральности|Аврора Сноу|13 сентября 2014 г.|DAILY BEAST
Дюбуа неоднократно защищал гуманитарное образование от тех, кто считал его непрактичным.
Колледж должен быть больше, чем просто классная торговая школа|Майкл С. Рот|30 августа 2014|DAILY BEAST
Наверняка он нашел бы ее попытки установить мир во всем мире с помощью искусства и музыки немного непрактичными и хиппи — вялый?
Цена быть Паттоном: борьба с наследием самого известного генерала Америки|Тим Тиман|26 мая 2014 г.