我在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')
我的代码有问题吗?
答案 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()
解决问题的三种方法。
在main中使用global dir_path
来明确表示您要使用全局变量,而不是定义同名的局部变量:
def main():
global dir_path
dir_path = 'None'
create_directory_method()
print("main", dir_path)
不要在main中分配dir_path
,以便Python隐式假设dir_path
是全局的,因为该名称不存在本地变量:
def main():
create_directory_method()
print("main", dir_path)
使用方法已返回的dir_path
,然后从方法中删除global dir_path
- 您不再需要它了:
def main():
dir_path = create_directory_method()
print("main", dir_path)
我建议你使用第三种方法,因为它根本不需要任何全局变量。