python中的set全局变量始终在main()中不返回任何值
当我在python中的set全局变量始终在main()中不返回任何值,python,python-2.7,Python,Python 2.7,当我在main()中设置一个全局变量总是返回None值时,我遇到了问题 在main() def main(): dir_path = 'None' def main(): dir_path = 'None' create_directory_method() print("main", dir_path) def create_directory_method(): global dir_path dir_path = "/some/path/
main()
中设置一个全局变量总是返回None
值时,我遇到了问题
在main()
def main():
dir_path = 'None'
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()
然后我调用函数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\u path
值为:
('path ', 'output/GNB/Data-Clone-1')
在main()
中,我尝试打印dir\u路径
值:
print('test', dir_path)
但价值总是
('test', 'None')
我的代码有问题吗?在settings.py中定义全局变量
DIR_PATH = 'documents/'
使用这个全局变量,比如
from django.conf from settings
print settings.DIR_PATH
注意:这里我使用django framework..每当您在方法中进行赋值而之前没有使用global varname
时,Python将假定该变量是该方法的局部变量。main
方法也不例外。它只是一个被称为“main”的常规方法
我假设您的代码看起来有点像这样:
def main():
dir_path = 'None'
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\u path
,明确表示您希望使用全局变量,而不是定义同名的局部变量:
def main():
global dir_path
dir_path = 'None'
create_directory_method()
print("main", dir_path)
不要在main中不必要地分配给dir\u path
,这样Python会隐式地假定dir\u path
为全局路径,因为不存在该名称的本地变量:
def main():
create_directory_method()
print("main", dir_path)
使用该方法已返回的dir\u路径
,并从该方法中删除global dir\u路径
——您不再需要它了:
def main():
dir_path = create_directory_method()
print("main", dir_path)
我建议您使用第三种方法,因为这根本不需要任何全局变量。“在main()中,我将全局变量设置为“不,您不需要”。这就是创建局部变量的方法。在赋值之前使用global dir\u path
。@tobias\u k这是一个简短的答案,但我觉得这是答案…def main():dir\u path='None'当您定义dir\u path='None'时,它显然会返回'None'O\O为什么这么复杂?为什么要在示例中为这么简单的事情引入一个完整的框架呢?我就是这么做的。然而,一般的规则是不要让事情变得更复杂,特别是因为OP显然缺乏Python方面的知识,因此引入Django示例不仅没有必要,而且实际上可能会被视为分心和混乱。保持简单,仅此而已。如果添加Django、OpenCV、ROS、Matplotlib、PyQt等,这只会为问题添加新层。当初学者看到你的帖子时,第一个可能会想到的问题是“这个Django是什么东西?!”或者“我需要Django来解决这个问题吗?”。是的,您在笔记中提到您正在使用Django框架,但对于初学者来说,这可能意味着他/她在这种情况下需要Django或其他框架(=>“什么是框架?”)。