Python:使用列表项代替全局变量

Python: Using List items in place of Global Variables

所以我一直很好奇。我对 python 太陌生了。我已经编码一年多了,但我涵盖但不完全理解的是 "global variables are bad."

的耻辱

也就是说,我是一个初学者,无法理解关于为什么我应该避免(或只是小心)全局变量的任何在线解释。我只是把每个人说的都记在心里,并假设全局变量只是险恶的怪物,它们在运行时潜行我的代码并吃掉我所有的数据。

所以我开始做以下事情:

>>> SomeVar = [0]     # To avoid the 'global' keyword, I'll just make a single list item.
>>> 
>>> def increment():      # Hey look, it's practically global!
>>>     SomeVar[0] += 1
>>> 
>>> increment()
>>> increment()
>>> 
>>> SomeVar
 [2]

一段时间后,我终于有了知识和经验,可以对这个问题进行一些实际研究,我开始觉得我可能没有抓住要点.我知道全局变量占用命名空间,可能会在多线程中出现问题,而且它们太多 and/or 太多函数同时访问它们可能很难跟踪,但我仍然不了解它们我就是想问问;

我的 list-global-aversion 变量是否真的有助于解决全局变量可能出现的 任何 问题,还是我完全没有抓住要点?我明白为什么它对上述问题没有任何好处,(多线程,意大利面条代码)但是......它有什么帮助吗?

提前致谢!!

是的,您没有抓住重点。你创建的仍然是一个全局变量;您所做的只是解决关键字问题。

当这扩展为一个完整的程序时,Somevar 的初始化很可能与其使用相分离。您已经让您的函数依赖于未知位置和出处的外部变量。相反,试试这个:

def increment(var):      # Hey look, it's properly local!
     return var + 1

somevar = 0
somevar = increment(somevar)
somevar = increment(somevar)