我有这样的代码
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()后它的值不应该被更改
你需要这个:
def Identify():
global _portlist1
_portlist1 = ["a", "b"]
Run Code Online (Sandbox Code Playgroud)
即在函数内声明全局变量.否则,局部变量将遮蔽它.
_portlist1在Identify()当地.Python并不关心它与函数外的另一个变量同名.你必须将它声明为global函数内部.
_portlist1 = None
def Identify():
global _portlist1
_portlist1 = ["a","b"]
Run Code Online (Sandbox Code Playgroud)
虽然您不需要_portlist1在函数外部分配一些东西,但我喜欢这样做.否则,如果你不打电话Identify(),你会得到一个NameError.当然,你总能抓到一个NameError; 在这种情况下做LBYL只是我的风格,因为它也更容易阅读恕我直言.