首页 > 解决方案 > 如何从另一个函数修改函数内的列表

问题描述

我有以下代码:

x = []
def func1():
    global x
    x = [1,2,3]
    print x


def func2():
    global x
    x.append(4)


func1()

我正在尝试从 func2 追加到 func1 中的列表,并在第一个函数中显示这些更改。这可能吗?

标签: pythonlistfunctionglobal-variables

解决方案


这当然是可能的(并且您的代码基本上是正确的,除了您没有func2在任何地方调用的事实),但通常不建议这样做。

有关为什么全局状态(x在您的示例中是什么)通常是一个坏主意的完整解释,请参阅https://softwareengineering.stackexchange.com/questions/148108/why-is-global-state-so-evil例如。此外,您可以在网上找到无数文章。

但是,简而言之,理想情况下,您希望程序尽可能可预测。当你的代码不可避免地没有做你认为应该做的事情时,你希望它很容易追踪你的错误。全球状态使这非常困难。这本质上是因为你的代码库的一些随机部分可能会x以一种不太容易追踪的方式从你下面改变。

你应该怎么做?在这种情况下,可能只是将列表传递给x每个想要使用它的函数。然后很容易一目了然地看到x可能会改变的地方,因为您必须将它传递给任何可能改变它的函数。您可以更轻松地跟踪程序流程中数据的变化情况。


推荐阅读