Python Python变量的基本作用域规则是什么?
在Python语言中,变量是程序中的重要组成部分。变量的作用域是指在程序中哪些区域可以访问到该变量。Python变量的作用域规则包括全局作用域和局部作用域。
阅读更多:Python 教程
全局作用域
在Python中,如果变量声明在函数外部或模块内部,那么它被称为全局变量,可以在整个程序中被访问。例如:
path = '/home/username'
def print_path():
print(path)
print_path() # 输出 '/home/username'
在上面的代码中,path
是在函数外部定义的全局变量,函数 print_path()
可以直接访问它。这是因为在这里 path
的作用域是全局的。
局部作用域
在Python中,如果变量声明在函数内部,那么它被称为局部变量,只在函数内部可见。例如:
def print_greeting():
greeting = 'Hello, World!'
print(greeting)
return
print_greeting() # 输出 'Hello, World!'
print(greeting) # 报错 NameError: name 'greeting' is not defined
在上面的代码中,greeting
是在函数内部声明的局部变量,只能在函数中被访问。如果在函数外部访问 greeting
,会抛出 NameError
错误。
LEGB规则
在Python中,当访问一个变量时,Python解释器先在当前局部作用域查找该变量,如果找不到,就查找当前函数所在的模块的全局作用域,如果还找不到,就查找内置作用域。这种查找顺序被称为LEGB规则,其中LEGB分别表示:
- Local:局部作用域
- Enclosing function:自由变量所在函数的作用域(如果是嵌套函数)
- Global module:函数定义所在模块的全局作用域
- Built-in:Python内置模块的作用域
例如:
a = 10
def func():
a = 5
print(a)
return
func() # 输出 5
print(a) # 输出 10
在上面的代码中,func()
中的 a
是一个局部变量,它覆盖了函数外部的全局变量 a
。因此,func()
内部的 a
的值为5,而函数外部的 a
的值为10。
global和nonlocal关键字
- global关键字:如果我们需要在函数内部修改全局变量的值,需要使用
global
关键字,如下所示:
count = 0
def increment():
global count
count += 1
return count
increment() # 输出 1
increment() # 输出 2
increment() # 输出 3
在上面的代码中,global
关键字用于声明 count
为全局变量,以便在函数内部修改 count
的值。
- nonlocal关键字:如果我们需要在嵌套函数内部修改父级作用域的变量,需要使用
nonlocal
,如下所示:
def outer():
x = 1
def inner():
nonlocal x
x += 1
print(x)
inner() # 输出 2
inner() # 输出 3
outer()
在上面的代码中,nonlocal
关键字用于告诉 Python 解释器,x
是一个父级作用域变量,并允许在内部函数中修改它。
结论
- Python变量的作用域规则包括全局作用域和局部作用域。
- 当访问一个变量时,Python解释器会按照LEGB规则查找变量的作用域。
- 对于需要在函数内部修改全局变量的值,需要使用
global
关键字。 - 对于需要在嵌套函数内部修改父级作用域的变量,需要使用
nonlocal
关键字。
了解Python变量作用域的基本规则和关键字,可以更好地理解Python中变量的使用和调用。