函数调用之间丢失全局变量

时间:2013-07-19 16:02:27

标签: python

我的代码是这样的

global _portlist1

def Identify():
 #do something
 _portlist1=["a","b"]

def RunTest():
  print _portlist1
  #do something else

def run():
 Identify()
 RunTest()

在RunTest()中,_ portlist1为空,但它在Identify()中定义。由于它是一个全局变量,因此在运行Identify()

后,它的值不应该被更改

2 个答案:

答案 0 :(得分:5)

你需要这个:

def Identify():
    global _portlist1
    _portlist1 = ["a", "b"]

即。声明函数中的全局变量 。否则,局部变量将遮蔽它。

答案 1 :(得分:5)

_portlist1中的

Identify()是本地的。 Python并不关心它与函数外的另一个变量同名。您还必须在函数内部将其声明为global

_portlist1 = None

def Identify():
    global _portlist1
    _portlist1 = ["a","b"]

虽然你不需要在函数之外向_portlist1分配内容,但我喜欢这样做。否则,如果您不致电Identify(),则会获得NameError。当然,你总能抓到NameError;在这种情况下做LBYL只是我的风格,因为它也更容易阅读恕我直言。

相关问题