Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python只初始化变量一次,并在单独的文件中使用_Python - Fatal编程技术网

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

Python只初始化变量一次,并在单独的文件中使用,python,Python,常数.py import os from datetime import date dates = datetime.datetime.now().strftime("mon_%m_day_%d_%H_%M") out_dir = 'C:\\'+'_'+dates+os.sep 文件a.py from constants import * # Use out_dir 文件_b.py from constants import * # Use out_dir 在上面的代码中,我创

常数.py

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

from constants import *
# Use out_dir
文件_b.py

from constants import *
# Use out_dir
在上面的代码中,我创建了一个名称中嵌入了当前日期和时间的目录。然后我将该文件导入两个单独的.py文件中。但是,我发现随着日期的改变,out_dir在文件_b.py中发生了变化。有没有办法解决这个问题


或者,是否有办法确定out\u dir何时发生变化?

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

你说你得到了不同的结果

  • 您是否将脚本作为不同的“会话”运行
  • 在脚本中的任何地方都使用reload()函数吗
  • 添加行
    打印“导入的常量”
  • 你有错误的进口

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

    如果您多次看到文本导入的常量,这意味着您在重新分配变量时遇到了重新加载()的问题,第一个
    out\u dir
    的引用与第二个
    out\u dir
    的引用不同。这意味着,尽管感觉相同(因为名称相同),但它们在内部是两个不同(不相交)的内存位置

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

    import constants
    
    像这样使用它们

    constants.out_dir
    

    这可以确保您查找模块
    常量
    ,从而可以访问最后一次赋值。

    @user308827请看一看谢谢,有没有一种方法可以只初始化一次日期?谢谢,最终问题与同时使用多处理和全局变量有关。这没有反映在我的问题中,因为我不知道这会是一个问题。假设constants.py或file_a.py将文件写入目录,文件_b.py应该在几分钟内通过向后循环尝试查找该目录。您应该提供一个-
    import
    中至少有一个输入错误,并且您提供的代码本身不会失败。我假设(您)对
    out\u dir
    进行了一些更新,然后失败了。如果是这样的话,看看我的答案。