Python中局部变量和全局变量的区别

2025年1月5日 | 阅读 7 分钟

引言

Python 中的局部变量在函数内部定义,并且只能在该函数内部访问。函数调用时创建,函数结束时销毁。例如,函数体内的变量就只属于该函数。

相比之下,全局变量在任何函数之外定义,并且可以在程序的任何地方访问,包括函数内部(只要在函数内部使用 global 关键字进行修改)。全局变量的生命周期就是程序的生命周期。

理解局部变量

在 Python 中,局部变量是在函数或代码块内部声明的变量,只能在该函数或代码块内部访问。它在调用函数时创建,在函数完成时销毁。由于局部变量对于每次函数调用都是独立的,并且在函数外部不可知,因此可以避免函数之间意外的交互。局部变量由于其有限的作用域和生命周期,非常适合临时存储仅在单个函数执行期间相关的数据。局部变量支持代码设计的模块化和有效的内存管理。

示例

输出

Inside my_function: 10

说明

在代码中,定义了一个名为 my_function() 的函数,其中包含一个局部变量 x,其值为 10。当调用该函数时,函数会打印 x 的值。由于 x 是局部变量,因此它只能在 my_function() 函数的作用域内访问。X 在全局作用域中未定义,因此尝试在函数外部访问它将导致错误。这说明了 Python 局部变量的概念,即它们具有有限的作用域,在函数调用时创建,在函数终止时销毁。它们可以防止多个代码片段之间发生意外干扰,并支持数据封装。

理解全局变量

Python 中的全局变量是在任何函数或代码块之外声明的变量,可以在整个程序中访问。与局部变量不同,全局变量在全局作用域中定义,并在整个程序生命周期内持续存在。它们可以通过使用 global 关键字在代码的任何部分进行修改和访问,包括在函数内部。全局变量提供了一个更广阔的作用域,使其适用于存储需要在程序不同部分共享的值。然而,过度使用全局变量可能会使代码更难理解和维护,因为它们的访问不受限制。

示例

输出

Global variable before modification: 10
Inside my_function: 10
Inside another_function, after modification: 20
Global variable after modification: 20

说明

在提供的示例中,global_var 是在任何函数外部声明的全局变量,使其在程序的任何部分都可以访问。最初设置为十,它在 my_function() 中被访问并打印其值。然后,another_function() 使用 global 关键字将 global_var 修改为二十,此修改对全局可见。这展示了从不同函数访问和修改全局变量的能力。全局变量提供了一种方便的方式来在应用程序的各个部分共享数据,但过度使用可能导致代码复杂性以及变量意外修改的潜在问题。因此,应谨慎使用它们,确保清晰,并避免与局部变量的冲突或在程序的各个部分发生意外的副作用。在 Python 中,global_var 等全局变量可以在程序内部访问。它们使函数更容易共享数据,但如果过度使用,可能会使代码维护更加困难并产生意外后果。

理解局部变量和全局变量之间的区别

局部变量全局变量
定义在块或函数内。局部变量只能在其声明的函数或代码块的作用域内访问。1. 不限于任何特定用途。由于全局变量是在所有函数外部声明的,因此整个程序都可以使用它们。定义在任何函数之外。全局变量在所有函数之外声明,使其在整个程序中都可以访问。
函数或块是唯一的作用域。它们只能在声明它们的块或函数内部访问。整个程序是作用域。它们可以从应用程序的每个函数或区域访问。
函数调用时创建。每次调用函数时,都会初始化局部变量。程序启动时创建。全局变量的创建发生在程序执行开始时。
函数终止时销毁。一旦函数执行完毕,它们就会消失。程序终止时销毁。它们会一直存在直到程序结束。
无法从函数外部访问。如果您尝试在定义函数之外访问它们,将会发生错误。可通过任何函数访问。代码的任何部分都可以访问和修改它们。
使用局部内存。它们使用分配给该特定函数堆栈的内存。使用全局内存。它们在内存中具有永久的、全局可访问的位置。
变量更改不会影响全局范围。局部变量的更改不会影响函数外部的变量。变量更改会影响全局范围。修改全局变量时,其值会在整个程序中受到影响。
不需要 global 关键字。局部变量的声明或更新不需要特殊关键字。在函数内部修改时需要 global 关键字。在函数内部修改全局变量需要 global 关键字。
适用于临时存储。非常适合存储仅在函数调用期间需要的信息。适用于跨函数共享数据。它们存储需要多个函数访问和通信的信息。
促进封装。将数据保持在指定的程序段内,支持封装和模块化。过度使用可能导致数据冲突。过度使用造成的意外更改可能导致冲突和不可预测的行为。
提高函数的模块化。鼓励创建不依赖于外部数据的独立函数。可能使调试复杂化。由于对全局变量的修改可能会影响多个程序组件,因此调试可能会更加困难。
更易于监视和控制。由于它们仅在函数内部使用,因此监视其影响和使用情况更容易。在大型程序中更难跟踪。随着程序的扩展,管理全局变量变得越来越困难,这使得
在大型程序中更有效地利用内存。在大型应用程序中,局部变量很有用,因为它们在函数结束后会释放内存。过度使用时内存效率较低。由于它们在程序的整个生命周期内都存在,全局变量可能会消耗更多内存。

同时使用局部变量和全局变量的示例

让我们考虑以下演示同时使用局部变量和全局变量的示例。

示例

输出

Initial global counter: 0
Inside update_counter: counter = 1
Inside local_example: local_var = 5
Inside local_example: counter = 1
Global counter after update: 1

说明

此 Python 代码示例演示了局部变量和全局变量如何交互。全局变量 counter 由于在任何函数外部初始化,因此可以在程序中的任何位置访问。此全局变量由 update_counter 函数修改,该函数使用 global 关键字将其值增加一。另一方面,local_example 函数演示了一个名为 local_var 的局部变量,该变量仅限于函数的作用域,并且对全局状态没有影响。此函数也访问全局 counter,但不对其进行更改。全局 counter 最初设置为 0,但在调用 update_counter 后变为 1。

结论

总之,理解 Python 中局部变量和全局变量之间的区别对于有效的编程至关重要。局部变量因其有限的作用域和短暂的存在而促进了封装、模块化和更清晰的代码结构,使其成为函数内特定任务的理想选择。全局变量在整个程序中可访问,对于在多个函数之间共享数据很有用,但如果过度使用,可能会导致复杂性和潜在的冲突。平衡这两种变量类型的用法可以实现优化的内存使用、更清晰的代码以及更轻松的调试和维护,从而确保高效和有组织的程序执行。


下一个主题Python 中扩展列表