<p>Common Lisp有<a href="http://clhs.lisp.se/Body/m_defpar.htm" rel="nofollow noreferrer">^{<cd1>}</a>,其中
创建一个全局变量,但仅当它是新变量时设置它:如果它已经存在
存在,它是<em>而不是</em>重置。这在从长时间运行的交互进程重新加载文件时非常有用,因为它保留了数据。你知道吗</p>
<p>我想在Python里也一样。
我有一个文件<code>foo.py</code>,它包含如下内容:</p>
<pre><code>cache = {}
def expensive(x):
try:
return cache[x]
except KeyError:
# do a lot of work
cache[x] = res
return res
</code></pre>
<p>当我做<a href="https://docs.python.org/3/library/importlib.html" rel="nofollow noreferrer">^{<cd3>}</a>时,<code>cache</code>的值丢失了,这是我想要的
避免。你知道吗</p>
<h2>如何保持<code>cache</code>在<code>reload</code>之间?你知道吗</h2>
<p><strong>PS</strong>。我想我可以跟着<a href="https://stackoverflow.com/q/843277/850781">How do I check if a variable exists?</a>:</p>
<pre><code>if 'cache' not in globals():
cache = {}
</code></pre>
<p>但由于某种原因它看起来不像是“Python”。。。
如果<em>是</em>TRT,请告诉我!你知道吗</p>
<h2>回答意见:</h2>
<ul>
<li>我对交叉调用持久性不感兴趣;我已经在处理这个问题了。你知道吗</li>
<li>我痛苦地意识到重新加载会改变类元对象,我已经在处理了。你知道吗</li>
<li><code>cache</code>中的值非常大,我不能每次需要它们时都去磁盘。你知道吗</li>
</ul>