为什么变量不是全局的,但是函数可以吗?

时间:2016-03-07 18:43:49

标签: python function variables closures global

我正在编写一些Python代码,并且像往常一样,我尝试使我的函数变小并给它们一个明确的名称(虽然有时候有点太长)。我到了没有全局变量的地步,并且函数需要传递给它。

但我想,在这种情况下,每个函数都可以访问任何其他函数。为什么不限制他们访问其他函数,就像我们限制对其他变量的访问一样。

我正在考虑使用嵌套函数,但这意味着闭包,这对我来说更糟糕。

我也在考虑使用对象,我认为这是OOP的重点,尽管在我的情况下它会是一个太多的样板。

有没有人在她/他的脑海里遇到这个问题,解决方法是什么。

3 个答案:

答案 0 :(得分:7)

拥有全局可变数据并不是一个好主意,例如:变量。可变性是关键所在。你可以拥有常量和功能的内容。

但是一旦编写依赖于全局可变状态的函数,它就会限制函数的可重用性 - 它们总是绑定到那个共享状态。

答案 1 :(得分:2)

为了每个人阅读代码,将函数分组到类中将有助于对它们进行心理分类。使用类self参数也可以通过将它们分组到类中来组织变量。

您可以使用函数名称开头的single leading underscore来限制其访问权限。

答案 2 :(得分:0)

不鼓励使用全局变量,因为它们很难跟踪程序的状态。如果我正在调试一个1,000行的文件,并且在函数中间的某个地方,我看到some_well_named_flag = False,我会有很多工作要做,看看它是如何影响到什么的否则在程序中。

功能没有状态。他们可以修改程序的地方或多或少地受限于参数和返回值。

如果您仍然担心控制对函数的访问,那么Java或C ++等其他语言可以帮助您实现这一目标。 Python的一个约定是将不应该在类外部使用的函数作为下划线的前缀,然后相信人们不要从类外部调用它们。