Было много ответов на memoizing. Стандартная библиотека Python 3 теперь имеет lru_cache
, который является последним использованным кэшем . Таким образом, вы можете:
from functools import lru_cache
@lru_cache()
def f(x):
# function body here
Таким образом, ваша функция будет вызываться только один раз. Вы также можете указать размер lru_cache
, по умолчанию это 128. Проблема с декораторами memoize, показанная выше, заключается в том, что размер списков может значительно увеличиться.
Я бы сказал, что это то, что вы ищете:
RewriteEngine on
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^/?news/(en|de|fr|es)/?$ /news?lang=$1 [END]
Если это правило приводит к «внутренней ошибке сервера» (http status 500), то есть вероятность, что вы используете очень старая версия http-сервера apache. В этом случае либо обновите свой сервер, либо попробуйте использовать более старый флаг [L]
вместо флага [END]
. Он может работать так же, но это зависит от остальной части установки. Вы найдете явный намек на флаг [END]
, который в этом случае не поддерживается, в файле журнала ошибок http-серверов.
Это правило также будет работать в конфигурации хоста http-серверов или в файле динамической конфигурации (файл стиля ".htaccess"). Если вам действительно нужно использовать такой динамический файл, то позаботьтесь о том, чтобы в вашей конфигурации хоста была включена его интерпретация, а указанное выше правило помещалось в такой файл в папке DOCUMENT_ROOT
хоста http.
И общее замечание: вы всегда должны предпочитать размещать такие правила в конфигурации хоста http-серверов вместо использования файлов динамической конфигурации (".htaccess"). Эти динамические конфигурационные файлы добавляют сложность, часто являются причиной неожиданного поведения, их трудно отладить, и они действительно замедляют работу http-сервера. Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).