如何从另一个python文件导入和获取变量?

时间:2018-07-05 08:18:49

标签: python variables import

主文件是aaa.py,代码如下:

import os,time
from get_newest_folder import *

def main_test():
    print(newest_folder)
    print(path)

if __name__ == '__main__':
    get_n_folder()
    main_test()

另一个文件是get_newest_folder.py,代码如下:

import os

def get_n_folder():

    path = 'D:\\Test'    
    os.chdir(path)
    files = sorted(os.listdir(os.getcwd()), key=os.path.getmtime)

    newest_folder = files[-1]
    return (path, newest_folder)

if __name__ == '__main__':
    get_n_folder()

我试图在aaa.py中使用get_newest_folder.py中的变量“ path”和“ newest_folder”,所以我导入了“ get_newest_folder”。但是我无法获取(打印)aaa.py中的2个变量。当我运行aaa.py时,它将显示以下错误消息:

  

NameError:未定义名称“ newest_folder”

任何人都可以更正我的代码或给我一些建议吗? 非常感谢。

3 个答案:

答案 0 :(得分:0)

为了访问newest_folder和路径,必须在get_newest_folder.py中将它们声明为全局变量,并将这些变量导入aaa.py。目前,它们是局部变量。

但这不是解决问题的理想方法。可能您需要这样的东西

import os,time
from get_newest_folder import *

def main_test():
    _path, _newest_folder = get_n_folder()
    print(_path)
    print(_newest_folder)

if __name__ == '__main__':
    main_test()

答案 1 :(得分:0)

修改您的aaa.py

import os,time
from get_newest_folder import *

def main_test():
    path,newest_folder = get_n_folder()
    print(newest_folder)
    print(path)

if __name__ == '__main__':
    main_test()

答案 2 :(得分:0)

首先,要回答您的问题,您需要修改模块:

import os

newest_folder = ''         # <<<<
path = ''                  # <<<<

def get_n_folder():
    global newest_folder   # <<<<
    global path            # <<<<

    ....
    # The rest is unchanged

变量现在是模块的属性,以前它们只是函数的属性。

因此,它消除了错误消息,但只显示了两个空白行!!!为什么?由于尚未设置newest_folderpath,因此您无需调用该函数即可填充值!

这是一个问题,另一个是from get_newest_folder import *。不要那样做-它会污染您自己的名称空间。它为模块提供了覆盖您自己的变量的机会(名称空间冲突)。很好,您知道这个模块,但是您会永远吗?您知道您导入的每个模块中的变量都很大吗?

所以:

import get_newest_folder

def main_test():
    print(get_newest_folder.newest_folder)
    print(get_newest_folder.path)

if __name__ == '__main__':
    get_newest_folder.get_n_folder()
    main_test()

但是,正如其他人所说,最好不要共享变量,如果这样做,则意味着模块实现无法更改-破坏了封装。在某些情况下可能是合理的,但在这里没有。

相反,请使用您的原始 get_newest_folder.py

import os,time
import get_newest_folder

def main_test():
    print(newest_folder)
    print(path)

if __name__ == '__main__':
    print(dir())
    newest_folder, path = get_newest_folder.get_n_folder()
    main_test()