缓存常量值

2024-09-24 00:29:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为色盲人士开发一个应用程序,使他们能够顺利地上网冲浪。我有一套颜色,比方说a,由色盲者看到的所有颜色组成。集合A是使用涉及数百万种颜色的大计算来计算的。Set A与我的应用程序中的输入无关,即Set A对我来说就像一个“常量”(就像数学中的“pi”)。现在我想存储set A,这样每当我运行我的应用程序时,它都是可用的,而不会增加任何计算成本,也就是说,我不必每次运行应用程序时都计算A。在

我的尝试: 我认为这可以通过构建一个具有一个常量的类来实现,但是可以不为一个常量创建任何特殊的类来实现吗?在

我在用Python!在


Tags: 应用程序颜色pi数学常量set人士计算成本
2条回答

是的,您当然可以用Python来实现这一点

如果常量只是一个数字,比如说,您刚刚发现了tau,那么您只需在模块中声明它,然后将该模块导入所有其他源文件中:

在常量.py公司名称:

# Define my new super-useful number
TAU = 6.28318530718

其他地方:

^{pr2}$

扩展一下,如果你有一个更复杂的结构,比如字典,你需要很长时间来计算,那么你可以在你的模块中声明它:

在常量.py公司名称:

# Verified results of the national survey
PEPSI_CHALLENGE = {
    'Pepsi': 0.57,
    'Coke': 0.43,
}

你可以对越来越复杂的数据这么做。最终的问题是,仅仅编写常量模块变得越来越困难,数据也越复杂,如果偶尔重新计算要缓存的值,则更新会变得尤其困难。在这种情况下,您需要查看pickling数据,可能是python脚本计算数据的最后一步,然后将该数据加载到导入的模块中。在

为此,导入pickle并将单个对象转储到磁盘文件:

在重新计算.py公司名称:

# Here is the script that computes a small value from the hugely complicated domain:
import random
from itertools import groupby
import pickle

# Collect all of the random numbers
random_numbers = [random.randint(0,10) for r in xrange(1000000)]

# TODO: Check this   this should definitely be 7
most_popular = max(groupby(sorted(random_numbers)),
                           key=lambda(x, v):(len(list(v)),-L.index(x)))[0]

# Now save the most common random number to disk, using pickle
# Almost any object is picklable like this, but check the docs for the exact details
pickle.dump(most_popular, open('data_cache','w'))

现在,在常量文件中,您可以简单地从磁盘上的文件中读取pickled数据,并且无需重新计算就可以使用它:

在常量.py公司名称:

import pickle

most_popular = pickle.load(open('data_cache'))

其他地方:

from constants import most_popular

不需要上课。您希望将计算的值存储在磁盘上,并在启动时重新加载它们:为此,您需要查看shelve或{a2}库。在

相关问题 更多 >