Python变量作用域:局部与全局详解

5星 · 超过95%的资源 2 下载量 49 浏览量 更新于2024-08-31 收藏 74KB PDF 举报
"本文主要介绍了Python编程中的变量作用域,特别是局部变量和全局变量的概念、使用规则以及如何在函数中操作全局变量。" 在Python编程中,变量的作用域是指变量在程序中的可见范围,它决定了变量在哪里可以被访问。Python主要有两种主要的变量类型:局部变量(local)和全局变量(global)。理解这两者之间的区别对于编写高效、无错误的代码至关重要。 1. 局部变量: - 在函数内部定义的变量通常是局部变量,它们只在定义它们的函数内部有效。例如: ```python num=100 def func(): num=123 print(num) func() # 输出123 ``` - 在上述例子中,尽管在函数外部也定义了一个名为`num`的全局变量,但函数内部的`num`实际上创建了一个新的局部变量,覆盖了全局的`num`。 2. 全局变量: - 全局变量是在函数或类的外部定义的,可以在整个程序范围内访问。但是,在函数内部直接使用全局变量可能会引发问题,因为Python会优先考虑局部变量。例如: ```python num=100 def func(): num += 100 print(num) func() # UnboundLocalError: local variable 'num' referenced before assignment ``` - 当尝试在函数内部修改全局变量时,Python会认为`num`是一个局部变量,但在尝试使用它之前没有进行初始化,因此会引发错误。 3. 引用全局变量: - 如果在函数内部需要引用全局变量,而不想创建新的局部变量,可以使用`global`关键字声明。例如: ```python num=100 def func(): global num num += 100 print(num) func() # 输出200 ``` - 在这个例子中,`global num`告诉Python`num`应该引用全局变量,而不是创建一个新的局部变量。 4. 默认行为: - 如果函数内部既有全局变量又有同名的局部变量,函数会优先使用局部变量。例如: ```python num=100 def func(): num=200 x = num + 100 print(x) # 输出300 func() ``` - 在这个例子中,虽然`num`在函数内部被赋值,但函数仍然首先查找局部变量`num`。 5. `nonlocal`关键字: - 对于嵌套函数的情况,如果需要在内层函数中修改外层函数的非全局变量,可以使用`nonlocal`关键字。全局变量和`nonlocal`变量之间的主要区别在于,全局变量在整个程序范围内都可见,而`nonlocal`变量只在包含它的所有嵌套函数中可见。 理解Python的变量作用域是编写清晰代码的关键。正确使用局部和全局变量,以及适当的时候使用`global`和`nonlocal`关键字,可以避免许多潜在的错误,提高代码的可读性和维护性。在实际编程中,应尽可能减少全局变量的使用,以降低代码间的耦合度。