我有以下代码:
x = []
def func1():
global x
x = [1,2,3]
print x
def func2():
global x
x.append(4)
func1()
我试图从func2追加到func1中的列表,并在第一个函数中显示这些更改。这可能吗?
这当然是可能的(除了您没有在任何地方调用func2
之外,您的代码基本上是正确的(,但通常不建议这样做。
有关为什么全局状态(在您的示例中是x
(通常是个坏主意的完整解释,请参阅https://softwareengineering.stackexchange.com/questions/148108/why-is-global-state-so-evil例如此外,你可以在网上找到无数的文章。
但是,简而言之,理想情况下,您希望您的程序尽可能具有可预测性。当你的代码不可避免地没有做你认为应该做的事情时,你希望它能很容易地追踪你的错误。全局状态使非常困难。这主要是因为代码库中的一些随机部分可能会以一种不太容易追踪的方式从您的下面更改x
。
你该怎么办?在这种情况下,可能只需将列表x
传递给每个想要使用它的函数。然后,很容易一眼就能看出x
可能会在哪里发生变化,因为你必须将其传递给任何可能会发生变化的函数。你可以更容易地跟踪数据在程序流中的变化。