在python中设置全局变量总是在main()中返回无值

时间:2016-02-18 10:12:37

标签: python python-2.7

我在main()中设置全局变量时遇到问题总是返回None

main()我设置全局全局变量:

def main():
    dir_path = 'None'

然后我调用函数create_directory_method并尝试打印dir_path的输出:

def create_directory_method(model_dir_name, i, params):
    if not os.path.exists('output/' + str(model_dir_name)):
         os.makedirs('output/' + str(model_dir_name))

x = i+1
if not os.path.exists('output/' + str(model_dir_name) + '/Data-Clone-' + str(x)):
    os.makedirs('output/' + str(model_dir_name) + '/Data-Clone-' + str(x))
with open('output/' + str(model_dir_name) + '/Data-Clone-' + str(x) + '/hyperparams.json','w') as f:
    json.dump(params, f)  
directory_path = 'output/' + str(model_dir_name) + '/Data-Clone-' + str(x)
global dir_path
dir_path = directory_path
print("path ", dir_path)
return dir_path

dir_path对函数的值为:

('path ', 'output/GNB/Data-Clone-1')

并在main()我尝试打印dir_path值:

    print('test', dir_path)

但值始终为

('test', 'None')

我的代码有问题吗?

2 个答案:

答案 0 :(得分:0)

在settings.py中定义全局变量

DIR_PATH = 'documents/'

并使用此全局变量,如

from django.conf from settings

print settings.DIR_PATH

注意:这里我使用django框架..

答案 1 :(得分:0)

无论何时在不使用global varname的方法中进行赋值,Python都会将变量视为该方法的局部变量。 main方法也不例外。这只是一种恰好被称为“主要”的常规方法。

我认为你的代码看起来有点像这样:

def main():
    dir_path = 'None'
    create_directory_method()
    print("main", dir_path)

def create_directory_method():
    global dir_path
    dir_path = "/some/path/"
    print("method", dir_path)
    return dir_path

main()

解决问题的三种方法。

  1. 在main中使用global dir_path来明确表示您要使用全局变量,而不是定义同名的局部变量:

    def main():
        global dir_path
        dir_path = 'None'
        create_directory_method()
        print("main", dir_path)
    
  2. 不要在main中分配dir_path,以便Python隐式假设dir_path是全局的,因为该名称不存在本地变量:

    def main():
        create_directory_method()
        print("main", dir_path)
    
  3. 使用方法已返回的dir_path,然后从方法中删除global dir_path - 您不再需要它了:

    def main():
        dir_path = create_directory_method()
        print("main", dir_path)
    
  4. 我建议你使用第三种方法,因为它根本不需要任何全局变量。