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