Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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中的set全局变量始终在main()中不返回任何值_Python_Python 2.7 - Fatal编程技术网

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或其他框架(=>“什么是框架?”)。