<i id='316ms'><tr id='316ms'><dt id='316ms'><q id='316ms'><span id='316ms'><b id='316ms'><form id='316ms'><ins id='316ms'></ins><ul id='316ms'></ul><sub id='316ms'></sub></form><legend id='316ms'></legend><bdo id='316ms'><pre id='316ms'><center id='316ms'></center></pre></bdo></b><th id='316ms'></th></span></q></dt></tr></i><div id='316ms'><tfoot id='316ms'></tfoot><dl id='316ms'><fieldset id='316ms'></fieldset></dl></div>

<small id='316ms'></small><noframes id='316ms'>

  • <legend id='316ms'><style id='316ms'><dir id='316ms'><q id='316ms'></q></dir></style></legend>

    • <bdo id='316ms'></bdo><ul id='316ms'></ul>
  • <tfoot id='316ms'></tfoot>
      1. 为什么python模块的行为像单例?

        时间:2024-08-21
        <tfoot id='zor03'></tfoot>

          <small id='zor03'></small><noframes id='zor03'>

            <i id='zor03'><tr id='zor03'><dt id='zor03'><q id='zor03'><span id='zor03'><b id='zor03'><form id='zor03'><ins id='zor03'></ins><ul id='zor03'></ul><sub id='zor03'></sub></form><legend id='zor03'></legend><bdo id='zor03'><pre id='zor03'><center id='zor03'></center></pre></bdo></b><th id='zor03'></th></span></q></dt></tr></i><div id='zor03'><tfoot id='zor03'></tfoot><dl id='zor03'><fieldset id='zor03'></fieldset></dl></div>
              • <bdo id='zor03'></bdo><ul id='zor03'></ul>
                  <tbody id='zor03'></tbody>

                <legend id='zor03'><style id='zor03'><dir id='zor03'><q id='zor03'></q></dir></style></legend>
                • 本文介绍了为什么python模块的行为像单例?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  作为应用程序运行的一部分,我从远程数据库创建字典。此过程的I/O非常繁重,因此我决定创建此字典的一个"单例"实例,并根据应用程序中的需要调用它。

                  代码如下(在Dictionaries.py中):

                  state_code_dict = None
                  
                  def get_state_code_dict():
                      global state_code_dict
                      if state_code_dict == None:
                          state_code_dict = generate_state_code_dict()
                      return state_code_dict
                  
                  然后,我在需要的地方导入并调用get_state_code_dict()函数。我添加了一条print语句来检查state_code_dict是否被重新初始化或重用,我发现它正在被重用(这就是我想要的功能)。为什么state_code_dict的实例在应用程序运行中继续运行?

                  编辑

                  我在多个文件中导入get_state_code_dict函数。

                  推荐答案

                  这是《Python语言参考》对how importing a module works的描述:

                  (1)找到模块,必要时初始化;(2)在本地命名空间中定义一个或多个名称

                  (已添加强调。)这里,初始化模块意味着执行其代码。此执行仅在必要时执行,即如果模块以前未导入到当前进程中。由于Python模块是一流的运行时对象,因此它们实际上变成了单例,在第一次导入时初始化。

                  请注意,这意味着不需要get_state_dict_code函数;只需在顶层初始化state_code_dict

                  state_code_dict = generate_state_code_dict()
                  

                  更深入的解释请参见this talk by Thomas Wouters,例如第一部分-大约在下午4点20分-他在这里讨论了"一切都是运行时"的原则。

                  这篇关于为什么python模块的行为像单例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:将烧瓶模板扩展到模块文件夹之外 下一篇:确保只运行类的一个实例

                  相关文章

                  <i id='cuLEW'><tr id='cuLEW'><dt id='cuLEW'><q id='cuLEW'><span id='cuLEW'><b id='cuLEW'><form id='cuLEW'><ins id='cuLEW'></ins><ul id='cuLEW'></ul><sub id='cuLEW'></sub></form><legend id='cuLEW'></legend><bdo id='cuLEW'><pre id='cuLEW'><center id='cuLEW'></center></pre></bdo></b><th id='cuLEW'></th></span></q></dt></tr></i><div id='cuLEW'><tfoot id='cuLEW'></tfoot><dl id='cuLEW'><fieldset id='cuLEW'></fieldset></dl></div>
                    <bdo id='cuLEW'></bdo><ul id='cuLEW'></ul>

                  1. <small id='cuLEW'></small><noframes id='cuLEW'>

                    <tfoot id='cuLEW'></tfoot>

                  2. <legend id='cuLEW'><style id='cuLEW'><dir id='cuLEW'><q id='cuLEW'></q></dir></style></legend>