持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情
python 全局变量
如果您尝试用大号码呼叫fib,您可能会注意到它花了很长时间才运行。
假设我们想知道进行了多少递归调用。我们可以对代码进行仔细的分析并找出答案,在第11章中,我们将讨论如何做到这一点。
另一种方法是添加一些计算调用次数的代码。一种方法是使用全局变量。
到目前为止,我们编写的所有函数都仅通过其参数和返回值与其环境进行通信。
在大多数情况下,这完全是应该的。它通常会导致程序相对易于阅读、测试和调试。然而,偶尔,全局变量会派上用场。请考虑图 6-6 中的代码。
在每个函数中,代码行全局 num fib 调用告诉 Python,num_fib_calls的名称应该在出现代码行的函数外部定义。
如果我们没有包含代码全局num_fib_calls,则名称 num fib_cal1s将是每个函数 fib 和 test_fib的本地名称,因为 num fib_calls出现在 fib 和 test fib 中赋值语句的左侧。
函数 fib 和测试 fib 都对变量 num fib_calls引用的对象具有不受限制的访问权限。函数测试 fib 每次调用 fib 时都会将 fib_calls 数绑定到 o,并且每次输入 fib 时,fib 都会递增num_fib_calls的值。
我们带着一些惶恐介绍了全局变量的话题。
自1970年代以来,携带卡片的计算机科学家一直在反对他们,这是有充分理由的。不加选择地使用全局变量会导致很多问题。使程序可读的关键是局部性。
人们一次阅读一个片段的程序,理解每一部分所需的上下文越少越好。由于全局变量可以在各种位置进行修改或读取,因此草率地使用它们可能会破坏局部性。然而,有几次它们只是需要的。
全局变量最常见的用途可能是定义将在许多地方使用的全局常量。例如,编写物理相关程序的人可能想要定义光速C一次,然后在多个函数中使用它。