全局变量、局部变量、自由变量的作用域不同,可以使用不同的关键字定义:
全局变量:在整个 py 文件中有效;可以使用“global”关键字定义。
局部变量:一般出现在“def”定义的函数中,在整个函数块中有效;在函数中进行赋值操作时会自动定义。
自由变量:是一个术语,指未在局部作用域中绑定的变量,一般用来引用局部变量的值;可以使用“nonlocal”关键字定义。(注:通常只有在定义高阶函数函数时才会使用自由变量)
执行以下代码,并对比输出可知:
在函数中修改全局变量的值,全局变量的值在整个py文件中都会发生变化;
在函数中修改局部变量的值,局部变量的值仅在当前函数块中发生变化;
在函数中修改自由变量的值,自由变量所引用的局部变量的值也会发生变化。
var_global = 'global var'
def f1():
global var_global # 声明了全局变量
print(f'f1中初始var_global值: {
var_global}')
var_global = 'modified global var'
print(f'f1中修改后var_global:值 {
var_global}') # 在函数块内,var_global的值已改
var_local = 'local var' # 定义了一个局部变量
print(f'f1中初始var_local值: {
var_local}')
def f2():
nonlocal var_local # 声明自由变量
var_local = 'f2 modified local var'
print(f'f2中修改后var_local值: {
var_local}') # 函数f2中,var_local的值已改
f2()
print(f'f1中var_local值: {
var_local}') # 函数f1中,var_local的值已改
# 说明在f2中var_local的作用域得到延申,访问了f1中定义的var_local变量
def f3():
# 此时var_local为f3()中的局部变量,与f1()中定义的var_local变量无关
var_local = 'f3 modified local var'
print(f'f3中修改后var_local值: {
var_local}') # 函数f3中,var_local的值已改
f3()
print(f'f1中var_local值: {
var_local}') # 函数f1中,var_local的值未改
# 说明f3中的var_local仅为f3中定义的局部变量
f1()
print(f'py文件中var_global值: {
var_global}') # 在函数块外,全局变量的值也已改
代码运行结果:
f1中初始var_global值: global var
f1中修改后var_global:值 modified global var
f1中初始var_local值: local var
f2中修改后var_local值: f2 modified local var
f1中var_local值: f2 modified local var
f3中修改后var_local值: f3 modified local var
f1中var_local值: f2 modified local var
py文件中var_global值: modified global var