Python Gloabal变量在函数调用之间丢失
我有这样的代码Python Gloabal变量在函数调用之间丢失,python,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后它的值不应该被更改吗 de
global _portlist1
def Identify():
#do something
_portlist1=["a","b"]
def RunTest():
print _portlist1
#do something else
def run():
Identify()
RunTest()
在RunTest中,_portlist1为空,但它是在Identify中定义的。既然它是一个全局变量,那么在运行Identify后它的值不应该被更改吗
def Identify():
global _portlist1
_portlist1 = ["a", "b"]
即在函数中声明全局变量。否则,局部变量将对其进行阴影处理。您需要:
def Identify():
global _portlist1
_portlist1 = ["a", "b"]
即在函数中声明全局变量。否则,局部变量将对其进行阴影处理。\u Identify中的portlist1是局部变量。Python并不关心它是否与函数外的另一个变量同名。您还必须在函数内部将其声明为全局
_portlist1 = None
def Identify():
global _portlist1
_portlist1 = ["a","b"]
虽然您不需要在函数之外为_portlist1分配某些内容,但我喜欢这样做。否则,如果您不调用Identify,您将得到一个NameError。当然,您总是可以捕捉到名称错误;在这种情况下做LBYL是我的风格,因为它也使IMHO更容易阅读。\u Identify中的portlist1是本地的。Python并不关心它是否与函数外的另一个变量同名。您还必须在函数内部将其声明为全局
_portlist1 = None
def Identify():
global _portlist1
_portlist1 = ["a","b"]
虽然您不需要在函数之外为_portlist1分配某些内容,但我喜欢这样做。否则,如果您不调用Identify,您将得到一个NameError。当然,您总是可以捕捉到名称错误;在这种情况下执行LBYL是我的风格,因为它也使IMHO更容易阅读。此外,除非您有理由不这样做,否则您可能希望将_portlist1放入一个类中,并将函数移动到该类的方法中。那么你就不需要全局关键字了。确保你理解全局语句。这意味着列出的标识符将被解释为全局标识符。如果没有global from,就不可能分配给全局变量。除非您有理由不这样做,否则您可能希望将_portlist1放入一个类中,并将函数移动到该类的方法中。那么你就不需要全局关键字了。确保你理解全局语句。这意味着列出的标识符将被解释为全局标识符。如果没有global,就不可能分配给全局变量。您还应该指出,模块级别上的global语句是不必要的。您还应该指出,模块级别上的global语句是不必要的。