如何引用全局变量Python?
我正在尝试获取函数外部“p1”变量的值。我已将其定义为全局变量,但无法引用函数外部的变量。它给了我一个错误,如何引用全局变量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
“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中就是这样工作的。无需声明任何内容。只需从函数返回,而无需使用全局变量!:)我真的很好奇,为什么要注释掉定义