Модуль time
time.time() возвращает количество секунд с Unix epoch. Разность двух вызовов можно использовать для грубого измерения длительности.
sleep(seconds) останавливает выполнение программы на указанное время.
import time
start = time.time()
values = list(range(1000))
end = time.time()
print(len(values))
print(round(end - start, 6))OrderedDict
OrderedDict работает как словарь, но предоставляет дополнительные операции управления порядком.
В современных версиях dict сохраняет порядок вставки, но OrderedDict всё ещё полезен для move_to_end() и popitem(last=False).
from collections import OrderedDict
queue = OrderedDict()
queue["first"] = 1
queue["second"] = 2
queue["third"] = 3
print(queue.popitem(last=False))Кэш и LRU
Кэш сохраняет результат дорогой операции, чтобы не вычислять его повторно.
LRU-кэш ограничивает размер и удаляет запись, которая использовалась раньше всех.
from functools import lru_cache
@lru_cache(maxsize=2)
def compute_square(number):
print(f"compute {number}")
return number * number
print(compute_square(2))
print(compute_square(2))defaultdict
defaultdict(default_factory) создаёт значение для отсутствующего ключа автоматически.
Для группировки часто используют defaultdict(list), для подсчёта - defaultdict(int).
from collections import defaultdict
groups = defaultdict(list)
groups["class1"].append("Alice")
groups["class1"].append("Charlie")
print(dict(groups))Counter
Counter создаёт словарь частот из строки, списка или другого итерируемого объекта.
most_common(n) возвращает самые частые элементы.
from collections import Counter
words = ["apple", "banana", "apple"]
counter = Counter(words)
print(counter)
print(counter.most_common(1))