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)
所以我一直很好奇。我对 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)