Еще одно преимущество консервации — меньшие затраты памяти и ускорение чтения/записи по сравнению с такими текстовыми форматами, как CSV. Ранее я уже несколько раз упоминал о pandas — одном из популярных пакетов Python для data science. Основная модель данных pandas — DataFrame — представляет табличную структуру данных. Объекты DataFrame можно сохранять в CSV-файлах или файлах pickle. В общем случае чтение и запись данных с файлами pickle выполняются намного быстрее операций с CSV-файлами, к тому же файлы pickle обычно занимают меньше места, чем CSV-файлы с тем же объемом данных.
import time
class TimeLogger:
def __init__(self, func):
def logger(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(f"Calling {func.__name__}: {time.time() - start:.5f}")
return result
self._logger = logger
def __call__(self, *args, **kwargs):
return self._logger(*args, **kwargs)
Содержимое изменяемых данных может модифицироваться после создания. Если вам каким-то волшебным образом удастся сделать список хешируемым, то при обновлении списка с изменением содержимого для него должен быть сгенерирован другой хеш-код. Но хеш-функция должна стабильно генерировать один и тот же хеш-код для одного объекта, и в данном случае хеш-код также должен оставаться неизменным для объекта list. Очевидно, изменение содержимого list, приводящее к изменению хеш-кода, не согласуется с предполагаемой стабильностью хеш-кода для существующего объекта list (рис. 3.7).
Все вещи прямо или косвенно связаны друг с другом, это относится и к знанию Python
Числовой тип
F-строка
Вывод
Описание
int
f"{number:b}"
"1111"
Двоичный формат (запись по основанию 2)
f"{number:c}"
"\x0f"
Представление целого числа в Юникоде
f"{number:d}"
"15"
Десятичный формат (запись по основанию 10)
f"{number:o}"
"17"
Восьмеричный формат (запись по основанию 8)
f"{number:x}"
"f"
Шестнадцатеричный формат (запись по основанию 16)
float
f"{point:.2e}"
"1.23e+00"
Научная запись
f"{point:.2f}"
"1.23"
Запись с фиксированной точкой и двумя цифрами в дробной части
f"{point:.2g}"
"1.23"
Общий формат с автоматическим применением e или f
f"{point:.2%}"
"123.45%"
Проценты с точностью 2 знакаa
Надеюсь, вы согласитесь с тем, что умение писать код на Python важно, но умение создавать по-настоящему эффективные, безопасные и простые в сопровождении приложения дает вам поистине огромное преимущество.
Доктор Юн Цуй — ученый, проработавший в области биомедицины более пятнадцати лет. Его исследовательская работа была посвящена разработке мобильных приложений медицинского назначения для поведенческой психотерапии на языках Swift и Kotlin. Его любимый язык Python стал основным средством для анализа данных, машинного обучения и разработки исследовательского инструментария. В свободное время он публикует в блогах посты по различным техническим темам, включая мобильную разработку, программирование на языке Python и искусственный интеллект.
рис. 4.5 изображена общая схема выбора модели в зависимости от конкретных потребностей.
Задавая значения по умолчанию для изменяемых аргументов (таких, как list), не используйте конструктор list(), потому что функция вычисляется в месте определения, включая аргументы по умолчанию. Применение конструктора приведет к тому, что разные вызовы функции будут использовать один и тот же изменяемый объект, а это может вызвать нежелательные побочные эффекты. Чтобы избежать этой проблемы, используйте None в качестве значения по умолчанию для изменяемых аргументов.
