【问题标题】:Python list of global variables not updatedPython 全局变量列表未更新
【发布时间】:2017-06-21 08:06:38
【问题描述】:

我有几个全局变量,我有一个列表。在一个函数中,我正在使用列表并更新如下值,但全局变量似乎没有更新。

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

现在,当我期望全局变量不会发生更新时,我仍然看到旧变量,有人可以解释如何从列表中更新全局变量。

【问题讨论】:

  • print data 在调用你的函数之前。你会发现没有abc 这样的东西。它们是变量引用对象。该列表拥有自己对这些相同对象的引用。
  • 首先,这段代码不起作用——第一行语法错误。
  • true,数据显示函数调用前的全局值,我想使用泛型函数更新几个全局变量,有没有办法使用变量引用对象更新实际变量
  • 我认为您正在绑定到 data 新值,您没有更新 abc

标签: python arraylist global-variables


【解决方案1】:

data中的循环改变数据的值,不会改变其他变量。

当您运行values[0] = values[1] 时,这意味着 values[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

【讨论】:

  • 好的,谢谢您的信息,有没有办法实现这一点,我的意思是使用通用函数更新一堆全局变量?
  • 我不认为你可以这样做,我认为 list bahave 像一个函数,这意味着它有另一个范围,你不能在函数中更改外部变量,对吗?
【解决方案2】:

您希望 data 中的值在 for 循环中进行更改?

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

【讨论】:

  • 没有更新列表,当我在函数调用后打印数据时,它显示更新的信息,但变量仍然保持全局声明的状态
  • 哪些变量保持不变? a,b,c?
  • 是的,变量 a、b、c 保持为“hello”、“how”、“are you”
  • 你为什么期望他们改变?您不会在任何地方更改它们。在 for 循环中,您正在重新分配数据,但您永远不会重新分配 a,b,c
【解决方案3】:
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 a + ":" + b + ":"+  c

你好:你好吗

print(data)

(['abc', 'abc', 'xyz'], ['pqr', 'pqr', 'mno'], ['test', 'test', 'quest'])


如果你想做这样的事情,你就错了,编辑你在列表中插入的变量。

值[0] = 值[1]

设置在值的位置 0 -> values[1]。但是不要修改 a-b-c!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多