为什么变量不能是全局的但函数却可以?
Why it's not ok for variables to be global but it's ok for functions?
我正在编写一些 Python 代码,并且像往常一样,我尝试使我的函数变小并给它们起一个清晰的名称(尽管有时有点太长)。我到了没有全局变量并且函数需要的一切都传递给它的地步。
但我认为,在这种情况下,每个函数都可以访问任何其他函数。为什么不像我们限制对其他变量的访问一样限制他们对其他函数的访问。
我正在考虑使用嵌套函数,但这意味着闭包,这对我的目的来说更糟。
我也在考虑使用对象,我认为这就是 OOP 的重点,尽管在我的例子中它会有点太多样板。
有没有人her/his想到这个问题,解决方案是什么。
拥有全局可变数据不是一个好主意,例如变量。可变性是这里的关键。您可以随心所欲地拥有常量和函数。
但是一旦您编写了依赖于全局可变状态的函数,它就会限制您的函数的可重用性——它们总是绑定到一个共享状态。
不鼓励使用全局变量,因为它们很难跟踪程序的状态。如果我正在调试一个 1,000 行的文件,并且在函数中间的某处我看到 some_well_named_flag = False
,我将进行大量的搜索以了解它对程序中的其他内容有何影响.
函数没有状态。他们可以修改程序的地方或多或少地局限于参数和return值。
如果您仍然担心控制对函数的访问,Java 或 C++ 等其他语言可以帮助您做到这一点。 Python 的一个约定是在不应在 class 之外使用的函数前加上下划线,然后相信人们不会从 class.[=11 之外调用它们=]
为了每个人都能阅读您的代码,将函数分组到 classes 将有助于在心理上对它们进行分类。使用 class self
参数也有助于组织变量,方法是将它们分组在 class.
中
您可以在函数名称的开头使用 single leading underscore 来限制他们的访问。
我正在编写一些 Python 代码,并且像往常一样,我尝试使我的函数变小并给它们起一个清晰的名称(尽管有时有点太长)。我到了没有全局变量并且函数需要的一切都传递给它的地步。
但我认为,在这种情况下,每个函数都可以访问任何其他函数。为什么不像我们限制对其他变量的访问一样限制他们对其他函数的访问。
我正在考虑使用嵌套函数,但这意味着闭包,这对我的目的来说更糟。
我也在考虑使用对象,我认为这就是 OOP 的重点,尽管在我的例子中它会有点太多样板。
有没有人her/his想到这个问题,解决方案是什么。
拥有全局可变数据不是一个好主意,例如变量。可变性是这里的关键。您可以随心所欲地拥有常量和函数。
但是一旦您编写了依赖于全局可变状态的函数,它就会限制您的函数的可重用性——它们总是绑定到一个共享状态。
不鼓励使用全局变量,因为它们很难跟踪程序的状态。如果我正在调试一个 1,000 行的文件,并且在函数中间的某处我看到 some_well_named_flag = False
,我将进行大量的搜索以了解它对程序中的其他内容有何影响.
函数没有状态。他们可以修改程序的地方或多或少地局限于参数和return值。
如果您仍然担心控制对函数的访问,Java 或 C++ 等其他语言可以帮助您做到这一点。 Python 的一个约定是在不应在 class 之外使用的函数前加上下划线,然后相信人们不会从 class.[=11 之外调用它们=]
为了每个人都能阅读您的代码,将函数分组到 classes 将有助于在心理上对它们进行分类。使用 class self
参数也有助于组织变量,方法是将它们分组在 class.
您可以在函数名称的开头使用 single leading underscore 来限制他们的访问。