Python:使用List项代替Global Variables

时间:2017-05-17 17:34:53

标签: python multithreading list variables global

所以我很好奇。我太愚蠢了。我已经编写了一年多左右的编码,但我所涵盖的但并不完全理解的是“全局变量不好”的耻辱。

那就是说,我是一个初学者,无法理解任何在线解释为什么我应该避免(或只是小心)全局变量。我只是把每个人都说出来的东西都拿走了,并假设全局变量只是在运行时徘徊我的代码并且吃掉我所有数据的阴险怪物。

所以我开始做以下事情:

>>> 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]

过了一段时间,我终于有了解这个问题的实际研究的知识和经验,我开始得到的印象我可能错过了这一点。我知道全局变量占据了命名空间,可以在多线程中出现问题,而且过多的和/或过多的函数一次访问它们都很难跟踪,但是我还是不了解它们我只是想问;

我的list-global-aversion变量是否真的有助于解决全局变量可能存在的任何问题,还是我完全忽略了这一点?我可以看出为什么它对前面提到的问题没有任何好处,(多线程,意大利面条代码)但是......它有帮助吗?

提前致谢!!

1 个答案:

答案 0 :(得分:3)

是的,你错过了这一点。你创造的东西仍然是一个全球变量;你所做的就是解决关键词。

当这扩展到完整程序时,Somevar的初始化很可能与其使用情况大相径庭。你的功能依赖于未知位置和出处的外部变量。相反,试试这个:

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

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