如何引用全局变量Python



我试图在函数之外获得'p1'变量的值。我已经将它定义为一个全局变量,但我不能在函数外引用它。它给出了错误,"NameError: global name 'p1' is not defined"

下面是我的代码。请让我知道我怎么能得到我的函数外的全局变量的值&也可以在其他函数 中引用它
#!/bin/usr/python
import subprocess
import string
def ping_check():
    global p1
    with open ('yst-host.txt') as hl:
            for host in hl:
                    print host
                    p1 = subprocess.call("ping -c2 " + string.strip(host)+ "> /dev/null", shell=True)
                    print "Value of P1 is: ", p1
#ping_check()
print p1

在所示的代码中,您从未实际调用ping_check(),因此您的代码或多或少相当于:

#!/usr/bin/env python
print p1

然后很明显你试图使用一个还不存在的全局变量

也许你应该调用你的函数?确保hl不是空的?这样你就至少分配了一次p1

对于任何想知道的人,这里是global在python中的有效使用。请注意,我们不需要预定义全局变量,尽管这可能是一个很好的做法(这样您就可以获得一个已知的值,而不是一个NameError)。

def fun():
    global p1
    p1 = 3
fun()
print p1

这是一个注释,但它实际上可能是答案。

正如sharth指出的,您不需要预先声明一个全局变量来使用它。然而,它被添加到globals()(并且可以在函数外没有NameError的情况下被访问)之后给它赋值,而不是在global语句之后。这意味着,您应该检查代码是否到达了赋值行。


下面是一个例子:

def more_fun():
    global am_i_defined
    print globals() #doesn't include am_i_defined
    am_i_defined = True
    print globals()
more_fun()
print am_i_defined

最新更新