python - 如何从另一个函数修改函数内的列表
问题描述
我有以下代码:
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
可能会改变的地方,因为您必须将它传递给任何可能改变它的函数。您可以更轻松地跟踪程序流程中数据的变化情况。
推荐阅读
- ionic-framework - 如何在 Ionic 4 中安装新字体?
- node.js - 如何进一步缩短十六进制字符串?
- sql - SQL 开关 -- 为空白单元格填写“n/a”
- python - Python 经验法则解释了为什么 * 运算符比 ** 运行得更快
- python - 如何将 raw_input() 与用户定义的函数一起使用?
- css - 文本以外的其他元素中的渐变颜色
- ios - iOS:当左锚为 view.safeAreaLayoutGuide.leftAnchor 时,UITableView 不会加载单元格,但如果它只是 view.leftAnchor 则会加载
- git - 如何在不要求每个子存储库的密码的情况下使用子模块克隆 git 存储库
- sql - oracle中如何将行转换为列并与表连接
- php - (Phalcon) 如何从模型中的静态方法重定向 (Phalcon\Http\Response)