2017-05-02 91 views
1

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

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

foo() 
print(x) 

然后有一个错误:

SyntaxError: name 'x' is used prior to global declaration

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

+4

这听起来并不像你应该想要做的事。你为什么要尝试这样做? –

+0

是什么导致这样做? –

+0

这里是一些写在文件中的变量名,我想通过读这个文件来创建这些变量。 – Hypo

回答

1

只需在功能上的变量声明为全局不会创建它 - 所以这种形式的作品:

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

最关键的事情在这里明白的是,当Python的一个编译函数,它将函数中的每个变量作为本地,非本地或全局(或内置)变量“烘焙” - 对该变量的任何访问都将具有一个或另一个相关的字节码。因此,“全局”声明会影响整个函数,不管它是否是 - 因为tryig在全局语句看起来模糊之前访问变量,所以您看到的错误是被强制的。

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

+1

为什么'else'子句? –

+0

我jsut复制并粘贴OP代码 - :-) – jsbueno

+0

谢谢你的作品。但说实话,我对这里的理解并不难...... – Hypo

0

像这样的东西可以工作。

​​

只是检查x变量是否存在。

你也可以检查,如果一个变量声明为全球

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

这是行不通的,因为“本地人”显然不会返回全局变量。 – jsbueno

+0

在全局变量()中使用“'x”而不是“locals()”是我想要的。它的作品谢谢你。 – Hypo

相关问题