Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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全局变量不是全局保存的_Python_Global Variables - Fatal编程技术网

python全局变量不是全局保存的

python全局变量不是全局保存的,python,global-variables,Python,Global Variables,当我添加一个客户端时,它是ok的。当我读取NexusConnectedClients变量时,它被添加到列表中。 但是当我运行LISTCLIENTS函数时,列表是空的。怎么了 我把代码简化了一点。所有变量都已设置,所有其他全局变量都会正常工作 编辑 我发现了错误,这段代码没有问题,但是另一个函数从NexusConnectedClients数组中删除了元素您不需要将NexusConnectedClients声明为全局,因为它在run方法中可见。如果要(重新)绑定全局作用域中的名称,则必须将变量声明为

当我添加一个客户端时,它是ok的。当我读取
NexusConnectedClients
变量时,它被添加到列表中。 但是当我运行LISTCLIENTS函数时,列表是空的。怎么了

我把代码简化了一点。所有变量都已设置,所有其他全局变量都会正常工作

编辑
我发现了错误,这段代码没有问题,但是另一个函数从
NexusConnectedClients
数组中删除了元素您不需要将
NexusConnectedClients
声明为全局,因为它在
run
方法中可见。如果要(重新)绑定全局作用域中的名称,则必须将变量声明为全局变量。当一个变量是可修改的,而列表是可修改的时,只需修改它即可


相反,您需要做的是管理对
下一个已连接客户端的访问。您正在修改线程内的共享变量,可能不止一个。使用锁。说了这句话,我想在这么小的片段里再也说不出什么了。

解决了这个问题。没有从以前的测试中删除一行代码。该行重置了阵列

尝试过,但没有解决问题。这很奇怪。有时它确实保存了元素。有时候不是。很奇怪。但是有一个客户端应用程序总是按照它应该的方式工作,其他的则不然。@alpjef:代码太短,无法尝试调查问题。变量、
IncomingCommand
Args
等从何而来?它们是否由某个线程管理?就我所见,
SendResponse
可以执行如下操作:
NexusConnectedClients[:]=[]
。看一看,最重要的是,它应该是独立的。如果你已经解决了问题,请回答它并接受你自己的答案,这样它就可以被标记为已解决
NexusConnectedClients = []

class Thread1(NexusCore.Thread):
    def Run():
        global NexusConnectedClients
        if(IncomingCommand == "ADDCLIENT"):
            NewClientOBJ = [
                LastCID,
                ClientType,
                ClientADDR,
                ClientObject,
                Args[1],
                Args[2],
                '{"events":[]}'
            ]
            NexusConnectedClients.append(NewClientOBJ)
        elif(IncomingCommand == "LISTCLIENTS"):
            SendResponse(NexusConnectedClients)