如何引用全局变量Python?

时间:2014-08-12 20:49:14

标签: python global python-2.6

我正在尝试在函数外部获取'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

2 个答案:

答案 0 :(得分:3)

在显示的代码中,您实际上从不致电ping_check(),因此您的代码或多或少等同于:

#!/usr/bin/env python
print p1

然后很明显,您正在尝试使用尚未存在的全局变量。

也许你应该打电话给你的功能?并确保hl不为空?这样您就可以至少分配一次p1


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

def fun():
    global p1
    p1 = 3

fun()
print p1

答案 1 :(得分:0)

这将是一个评论,但实际上可能就是答案。

正如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