为什么全局variables是邪恶的?
我试图find一个很好的来源,解释了为什么使用global
被认为是不好的做法在Python(和一般编程)。 有人可以指我一个或在这里解释?
这与Python无关; 全局variables在任何编程语言中都是不好的。
然而,全局常量在概念上与全局variables不相同, 全局常量是完全正确的使用。 只是在Python中没有语法上的差异。
他们不好的原因是他们允许function隐藏(如“非明显”和“未声明”),因此很难理解副作用。 此外,这可能会导致意大利面代码 。
此外,全局的有限/受控/有意识的使用是可以接受的,正如本地状态(即可变variables)在函数编程中可接受的,无论是出于性能原因还是简单性,还是用于caching/记忆。
但是,当然,这个短的问题真的有很多很长的答案,所以你最好的select是谷歌“为什么是全局variables不好”。 一些例子:
- http://c2.com/cgi/wiki?GlobalVariablesAreBad
- https://softwareengineering.stackexchange.com/questions/148108/why-is-global-state-so-evil
- 全局variables是不好的?
如果你想深入了解副作用(通常,或者至less经常)不好(还有许多其他的启发性的东西),你应该学习函数式编程:
是的, 从理论上讲 ,全局(和一般的“国家”)是邪恶的。 实际上,如果你看看你的python的packages目录,你会发现大多数模块都是以一系列全局声明开始的。 很明显,他们没有问题。
具体到python,全局variables的可见性仅限于一个模块,因此没有影响整个程序的“真实”全局variables – 这使得它们不那么有害。 还有一点:没有const
,所以当你需要一个常量时,你必须使用全局的。
在我的实践中,如果我碰巧在一个函数中修改一个全局函数,我总是用global
来声明它,即使在技术上没有必要这样做,如:
cache = {} def foo(args): global cache cache[args] = ...
这使得全局variables的操作更容易追踪。