Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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_Arraylist_Global Variables - Fatal编程技术网

Python全局变量列表未更新

Python全局变量列表未更新,python,arraylist,global-variables,Python,Arraylist,Global Variables,我有几个全局变量和一个列表。在一个函数中,我使用下面的列表和更新值,但是全局变量似乎没有更新 a = "hello" b ="how" c = "are you" data = ([a,"abc","xyz"],[b,"pqr","mno"],[c,"test","quest"]) def checklist(): global data , a, b, c for values in data: values[0] = values[1] checklist()

我有几个全局变量和一个列表。在一个函数中,我使用下面的列表和更新值,但是全局变量似乎没有更新

a = "hello"
b ="how"
c = "are you"
data = ([a,"abc","xyz"],[b,"pqr","mno"],[c,"test","quest"])
def checklist():
    global data , a, b, c
    for values in data:
        values[0] = values[1]
checklist()
print a + ":" + b + ":"+  c

现在,当我预期全局变量将被更新,但这并没有发生时,我仍然看到旧的变量,有人可以解释如何从列表中更新全局变量。

您希望数据中的值是for循环中的更改吗

没有发生的原因是您正在更改
,而不是实际数据

a,b,c = "hello", "how", "are you"
data = ([a,"abc","xyz"],[b,"pqr","mno"],[c,"test","quest"])
def checklist():
    global data , a, b, c
    for values in data:
        values[0] = values[1]
checklist()

你好吗

print(data)
([‘abc’、‘abc’、‘xyz’]、[‘pqr’、‘pqr’、‘mno’]、[‘测试’、‘测试’、‘任务’]))


如果要执行类似操作,请编辑插入到列表中的变量,这是错误的

值[0]=值[1]


设置在值->值[1]的位置0。但是没有修改a-b-c

数据中的循环会更改数据的值,而不会更改其他变量

运行
values[0]=values[1]
时,意味着值[0]将重新指向另一个对象,但
a
将保持不变

In [52]: a = '12'

In [53]: li = [a, 'b', 'c']

In [54]: id(li[0])
Out[54]: 140264171560632

In [55]: id(a)
Out[55]: 140264171560632

In [56]: li[0] = 'a'

In [57]: li
Out[57]: ['a', 'b', 'c']

In [58]: a
Out[58]: '12'

In [60]: id(li[0])
Out[60]: 140264267728616

In [61]: id(a)
Out[61]: 140264171560632

在调用函数之前打印数据。你会发现没有
a
b
c
这样的东西。它们是变量引用对象。列表保存了对这些相同对象的引用。首先,此代码不起作用-第一行在语法上不正确。是的,在函数调用之前,数据显示全局值,我想使用泛型函数更新几个全局变量,是否有使用变量引用对象更新实际变量的方法我认为您正在绑定到
数据
新值,您没有更新
a
b
c
不,列表得到更新,当我在函数调用后打印数据时,它会显示更新的信息,但是变量仍然保持全局声明的状态。哪些变量保持不变<代码>a,b,c
?是的,变量a,b,c保持为“你好”、“怎么样”、“你怎么样”为什么你希望它们改变?你不会在任何地方改变它们。在for循环中,你在重新分配数据,但你从来没有重新分配
a,b,c
好的,知道了,谢谢你的信息,有没有办法实现这一点,我的意思是用一个泛型函数更新一堆全局变量?我不认为你能做到,我认为你喜欢一个函数,这意味着它有另一个作用域,不能在函数中更改outter变量,对吗?
In [52]: a = '12'

In [53]: li = [a, 'b', 'c']

In [54]: id(li[0])
Out[54]: 140264171560632

In [55]: id(a)
Out[55]: 140264171560632

In [56]: li[0] = 'a'

In [57]: li
Out[57]: ['a', 'b', 'c']

In [58]: a
Out[58]: '12'

In [60]: id(li[0])
Out[60]: 140264267728616

In [61]: id(a)
Out[61]: 140264171560632