Обновить

Комментарии 10

НЛО прилетело и опубликовало эту надпись здесь

Чтобы это работало, аргументы функции должны быть хэшируемыми (неизменяемыми)

Нет. Аргументы функции могут быть какими угодно. Хэшируемыми должны быть ключи кэша.

if n in cache:

return cache[n]

Здесь поиск по ключу вызывается два раза. Лучше использовать cache.get()

Кстати, убивают меня такие размазанные фразы типа "должны быть хэшируемыми (неизменяемыми)". Так хэшируемыми или неизменяемыми? Или это одно и то же? А вы точно уверены, что объекты некого типа не могут быть изменяемые, но хэшируемые (или наоборот, неизменяемые, но не хэшируемые? Я вот уверен, что могут и легко.

Классический пример: кортеж (сам по себе неизменяемый), который содержит изменяемый/нехэшируемый элемент.​Например, (1, [2, 3]) — кортеж нельзя “поменять” как кортеж, но внутри лежит список, и поэтому такой кортеж не хэшируется.

Да почему нет? Не меняйте список и все дела.

Почему функции работают долго?
Обычно это происходит по трем причинам:

3) Рекурсия — когда функция вызывает саму себя.

Нет, рекурсия не является причиной проблемы

И рекурсивный код и нерекурсивный могут работать одинаково долго просто потому что код так написан (с ошибками или намеренно для упрощения реализации).

Неужели нельзя приводить менее одиозные примеры? Реализация fib в примере имеет экспоненциальную сложность, и это при живом несложном алгоритме, работающим за логарифм

 В современном программировании память стоит дешево

Уже неактуально )) В современном мире память резко подорожала

"программист из казахстана коммунист" очередной ии пост

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации