Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Gloabal变量在函数调用之间丢失_Python - Fatal编程技术网

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语句是不必要的。