函数调用之间的Gloabal变量丢失

Ill*_*ist 1 python

我有这样的代码

global _portlist1

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

def RunTest():
  print _portlist1
  #do something else

def run():
 Identify()
 RunTest()
Run Code Online (Sandbox Code Playgroud)

在RunTest()中,_ portlist1为空,但它在Identify()中定义.由于它是一个全局变量,运行Identify()后它的值不应该被更改

Fre*_*Foo 5

你需要这个:

def Identify():
    global _portlist1
    _portlist1 = ["a", "b"]
Run Code Online (Sandbox Code Playgroud)

即在函数内声明全局变量.否则,局部变量将遮蔽它.

  • 您还应该指出模块级别的"全局"语句是不必要的. (5认同)

2rs*_*2ts 5

_portlist1在Identify()当地.Python并不关心它与函数外的另一个变量同名.你必须将它声明为global函数内部.

_portlist1 = None

def Identify():
    global _portlist1
    _portlist1 = ["a","b"]
Run Code Online (Sandbox Code Playgroud)

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