Крутые модули Python, которые вы не используете, а надо бы |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-12-26 18:52 Какие методы и модули Python сделают ваш код чище и эффективнее? Рассмотрим 5 скрытых жемчужин стандартной библиотеки Python. Язык Python – прекрасен, и содержит много встроенных модулей, которые помогают сделать код более качественным и красивым. Задача В этой статье будем использовать некоторые малоизвестные модули и методы, с помощью которых можно улучшить программирование на Python. Как с точки зрения наглядности, так и производительности. NamedTuple Полагаем, некоторые из вас уже знакомы с более популярным именованным кортежем In [2]: import typing In [3]: class BetterLookingArticle(typing.NamedTuple): ...: title: str ...: id: int ...: description: str = "No description given." ...: In [4]: BetterLookingArticle(title="Python is cool.", id=1) BetterLookingArticle(title='Python is cool.', id=1, description='No description given.') Вот альтернатива c использованием In [6]: import collections In [7]: Article = collections.namedtuple("Article", ["title", "description", "id"]) In [8]: Article(title="Python is cool.", id=1, description="") Article(title='Python is cool.', description='', id=1) array.array Эффективные массивы числовых значений. Массивы относятся к типу последовательностей и ведут себя как списки, за исключением того, что тип хранящихся в них объектов ограничен. — документация Python Когда используется модуль В 14 раз быстрее. Это много. Конечно, время выполнения также зависит и от модуля itertools.combinations Давайте посмотрим на метод In [16]: import itertools In [17]: list(itertools.combinations([1, 2, 3, 4], 2)) [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)] dict.fromkeys Быстрый и красивый способ создания словаря со значениями по умолчанию: In [18]: dict.fromkeys(["key1", "key2", "key3"], "DEFAULT_VALUE") {'key1': 'DEFAULT_VALUE', 'key2': 'DEFAULT_VALUE', 'key3': 'DEFAULT_VALUE'} Последний, но не менее важный – модуль dis Модуль Как вы наверняка знаете, Python компилирует исходный код в набор инструкций под названием «байт-код». Модуль Вот пример из книги «Fluent Python»: In [22]: t = (1, 2, [3, 4]) In [23]: t[2] += [30, 40] --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-25-af836a8d44a2> in <module> ----> 1 t[2] += [30, 40] TypeError: 'tuple' object does not support item assignment In [24]: t Out[24]: (1, 2, [3, 4, 30, 40]) Получили ошибку, но операция всё равно завершилась. Как так? Узнаем, если посмотрим на байт-код (добавлены комментарии рядом с важными частями): In [25]: dis.dis("t[a] += b") 1 0 LOAD_NAME 0 (t) 2 LOAD_NAME 1 (a) 4 DUP_TOP_TWO 6 BINARY_SUBSCR 8 LOAD_NAME 2 (b) 10 INPLACE_ADD --> (value in t[a]) += b --> выполняется, так как список изменяемый 12 ROT_THREE 14 STORE_SUBSCR --> Assign t[a] = our list --> Ошибка, t[a] неизменяемый. 16 LOAD_CONST 0 (None) 18 RETURN_VALUE Это перевод статьи на Medium. Источник: proglib.io Комментарии: |
|