如果在Python中不存在全局变量,如何创建它?

时间:2017-05-02 14:13:55

标签: python

我想定义一个Python函数: 1.检查变量是否已存在。 2.如果没有,将其创建为全局变量(因为我想在函数外部使用它)。

def foo():
    try:
        x
    except NameError:
        global x
        x = 1
    else:
        pass

foo()
print(x)

然后出现错误:

  

SyntaxError:在全局声明之前使用名称'x'

如何解决这个问题?谢谢:))

2 个答案:

答案 0 :(得分:1)

在函数顶部声明一个变量为全局变量不会创建它 - 所以这个表单有效:

def foo():
    global x
    try:
        x
    except NameError:
        x = 1

这里要理解的关键是,当Python编译一个函数时,它会将函数内的每个变量“烘焙”为本地,非本地或全局(或内置)变量 - 对该变量的任何访问都将具有一个或另一个相关的字节码。因此,“全局”声明会影响整个函数,无论它是什么 - 并且由于tryig在全局语句看起来不明确之前访问变量,因此您看到的错误是强制的。

但是既然你在这里 - 你确定要这么做吗? 全局变量适用于可以在模块中的函数中共享的值 - 但是,即使要在对特定函数的调用中初始化它们,也应该在模块体中声明它们并进行适当的记录。如果在模块加载时无法获得最终值,只需将其指定为None即可。

答案 1 :(得分:0)

这样的事情可行。

def foo():
    if not('x' in locals()):  
        global x
        x = 1 


foo()
print(x)

检查x变量是否存在。

您还可以检查变量是否声明为全局

if not('x' in globals()):