Python函数的作用域及全局变量的使用
Python函数的作用域及全局变量的使用
在Python中,函数有自己的作用域,作用域是指变量的可见性和可访问性。作用域确定了变量的生命周期和可见范围。Python中有四种作用域:
1. 局部作用域(Local Scope):在函数内部定义的变量只能在函数内部访问,称为局部变量。
2. 嵌套作用域(Enclosing Scope):在嵌套的函数中定义的变量,可以在包含它的外部函数以及全局范围内访问。
3. 全局作用域(Global Scope):在模块级别定义的变量,可以在整个模块中访问。
4. 内置作用域(Built-in Scope):Python内置函数和模块中定义的变量,可以在整个程序中访问。
下面通过例子来说明作用域的概念:
x = 10 # 全局变量
def example():
y = 20 # 局部变量
print(x) # 可以访问全局变量x
print(y) # 可以访问局部变量y
example()
print(x) # 可以在全局范围访问全局变量x
print(y) # 不能在全局范围访问局部变量y
在上述例子中,变量x定义在函数外部,因此是全局变量,在函数内外部都可以访问。变量y定义在函数内部,因此是局部变量,只能在函数内部访问。
当在函数内部使用一个变量时,Python会按照从小到大的顺序搜索变量的值:
1. 首先搜索当前函数的局部作用域。
2. 如果在局部作用域内找不到变量,则搜索包含当前函数的外部函数的作用域(如果存在)。
3. 如果在外部函数作用域内找不到变量,则搜索全局作用域。
4. 最后搜索内置作用域。
如果在所有作用域内都找不到变量,则会引发NameError异常。
在函数内部可以使用global关键字将变量声明为全局变量,这样该变量就可以在函数内部修改并在函数外部访问。
x = 10 # 全局变量
def example():
global x
x = 20 # 修改全局变量x的值
print(x)
example()
print(x) # 在函数外部访问修改后的全局变量x
上述例子中,通过在函数内部使用global关键字声明变量x为全局变量,然后在函数内部修改了x的值,函数外部也能访问到修改后的值。
总结:
Python函数有四种作用域:局部作用域、嵌套作用域、全局作用域和内置作用域。
在函数内部使用变量时,Python会按照从小到大的顺序搜索变量的值。
可以使用global关键字将变量声明为全局变量,在函数内部修改全局变量的值。
