定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:
#!/usr/bin/python3
total = 0 # 这是一个全局变量
# 可写函数说明
def sum(arg1, arg2):
#返回2个参数的和.
total = arg1 + arg2 # total在这里是局部变量.
print ("函数内是局部变量 : ", total)
return total
# 调用sum函数
sum(10, 20)
print("函数外是全局变量 : ", total)
函数内是局部变量 : 30
函数外是全局变量 : 0
global
和 nonlocal
关键字
当内部作用域想修改外部作用域的变量时,就要用到 global
和 nonlocal
关键字了。
global
关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量。
global
关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global
修饰后也可以直接使用
以下实例修改全局变量 num
:
num = 1
def function():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
function()
print(num)
1
123
123
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal
关键字了。
nonlocal
关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal
位置会发生错误(最上层的函数使用 nonlocal
修饰变量必定会报错)。
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()
100
100