Python仅将变量初始化一次并在单独的文件中使用

时间:2015-04-09 14:22:51

标签: python

constants.py

import os
from datetime import date
dates       = datetime.datetime.now().strftime("mon_%m_day_%d_%H_%M")
out_dir = 'C:\\'+'_'+dates+os.sep

file_a.py

from constants import *
# Use out_dir

file_b.py

from constants import *
# Use out_dir

在上面的代码中,我创建了一个目录,其中包含名称中嵌入的当前日期和时间。然后我将该文件导入2个单独的.py文件中。但是,我发现out_dir在日期发生变化时在file_b.py中发生了变化。关于如何解决这个问题的任何想法?

或者,有没有办法找出out_dir何时发生变化?

2 个答案:

答案 0 :(得分:2)

由于您要重新分配变量,因此第一个out_dir的引用与第二个out_dir的引用不同。这意味着,虽然感觉相同(因为名称相同),但它们内部有两个不同的(不相交的)内存位置。

要解决此问题,只需将导入更改为:

import constants

并像

一样使用它们
constants.out_dir

这可以确保您对模块constants进行查找,从而可以访问上一个分配。

答案 1 :(得分:1)

当Python导入模块时,模块中的所有代码都只评估一次。因此,当您运行脚本时,在导入constans.py的所有模块中,您必须获得相同的out_dir值。

你说你得到了不同的结果。

  1. 您是否将脚本作为不同的"会话"?
  2. 运行
  3. 您是否在脚本的任何位置使用reload()函数?
  4. 添加行print "imported constants"
  5. 你的进口错误。

    import os
    import datetime
    `print "imported constants"`
    dates = datetime.now().strftime("mon_%m_day_%d_%H_%M")
    out_dir = 'C:\\'+'_'+dates+os.sep
    

    如果你看到文字导入的常量多了一次,这意味着你有重新加载麻烦()