如何引用全局变量Python?

如何引用全局变量Python?,python,global,python-2.6,Python,Global,Python 2.6,我正在尝试获取函数外部“p1”变量的值。我已将其定义为全局变量,但无法引用函数外部的变量。它给了我一个错误,“name错误:未定义全局名称'p1'” 下面是我的代码。请让我知道如何在我的函数之外获取全局变量的值,并在其他函数中引用它 #!/bin/usr/python import subprocess import string def ping_check(): global p1 with open ('yst-host.txt') as hl: f

我正在尝试获取函数外部“p1”变量的值。我已将其定义为全局变量,但无法引用函数外部的变量。它给了我一个错误,
“name错误:未定义全局名称'p1'”

下面是我的代码。请让我知道如何在我的函数之外获取全局变量的值,并在其他函数中引用它

#!/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\u check()
,因此您的代码或多或少相当于:

#!/usr/bin/env python
print p1
很明显,你试图使用一个还不存在的全局变量

也许你应该调用你的函数?并确保
hl
不是空的?这样,您将至少分配给
p1
一次



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


在显示的代码中,您从未实际调用
ping\u check()
,因此您的代码或多或少相当于:

#!/usr/bin/env python
print p1
很明显,你试图使用一个还不存在的全局变量

也许你应该调用你的函数?并确保
hl
不是空的?这样,您将至少分配给
p1
一次



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


在显示的代码中,您从未实际调用
ping\u check()
,因此您的代码或多或少相当于:

#!/usr/bin/env python
print p1
很明显,你试图使用一个还不存在的全局变量

也许你应该调用你的函数?并确保
hl
不是空的?这样,您将至少分配给
p1
一次



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


在显示的代码中,您从未实际调用
ping\u check()
,因此您的代码或多或少相当于:

#!/usr/bin/env python
print p1
很明显,你试图使用一个还不存在的全局变量

也许你应该调用你的函数?并确保
hl
不是空的?这样,您将至少分配给
p1
一次



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


这本来是一个评论,但实际上可能是答案

正如sharth指出的,使用它不需要预先声明为全局变量但是,在为其赋值之后,而不是在
全局
语句之后,它被添加到
globals()
(并且可以在函数外部无
namererror
访问)。这意味着,您应该检查您的代码是否曾经到达带有赋值的行


下面是一个例子:

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

这本来是一个评论,但实际上可能是答案

正如sharth指出的,使用它不需要预先声明为全局变量但是,在为其赋值之后,而不是在
全局
语句之后,它被添加到
globals()
(并且可以在函数外部无
namererror
访问)。这意味着,您应该检查您的代码是否曾经到达带有赋值的行


下面是一个例子:

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

这本来是一个评论,但实际上可能是答案

正如sharth指出的,使用它不需要预先声明为全局变量但是,在为其赋值之后,而不是在
全局
语句之后,它被添加到
globals()
(并且可以在函数外部无
namererror
访问)。这意味着,您应该检查您的代码是否曾经到达带有赋值的行


下面是一个例子:

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

这本来是一个评论,但实际上可能是答案

正如sharth指出的,使用它不需要预先声明为全局变量但是,在为其赋值之后,而不是在
全局
语句之后,它被添加到
globals()
(并且可以在函数外部无
namererror
访问)。这意味着,您应该检查您的代码是否曾经到达带有赋值的行


下面是一个例子:

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

如果您调用
ping\u check
,以便设置全局变量
p1
,这会有所帮助。@TheSoundDefense:这是python中的工作方式。无需声明任何内容。只需从函数返回,而无需使用全局变量!:)我真的很好奇,为什么您要注释掉定义导致错误的变量的函数调用?如果您调用
ping\u check
,以便设置全局变量
p1
。@TheSoundDefense:python中就是这样工作的。无需声明任何内容。只需从函数返回,而无需使用全局变量!:)我真的很好奇,为什么您要注释掉定义导致错误的变量的函数调用?如果您调用
ping\u check
,以便设置全局变量
p1
。@TheSoundDefense:python中就是这样工作的。无需声明任何内容。只需从函数返回,而无需使用全局变量!:)我真的很好奇,为什么要注释掉定义