Python函数的作用域及全局变量的引用
Python函数的作用域及全局变量的引用
在Python中,函数有自己的作用域,作用域决定了函数内可以访问哪些变量,以及变量的生命周期。Python中的作用域可以分为全局作用域和局部作用域。
全局作用域是指在函数外部定义的变量,包括全局变量和全局函数,全局作用域中的变量可以在整个程序中访问。在函数中可以直接引用全局作用域中的变量,但如果要在函数内部修改全局变量的值,则需要使用global关键字进行声明。
例如:
x = 1
def modify_global_variable():
global x
x += 1
modify_global_variable()
print(x) # 输出2
上述代码中,modify_global_variable函数内部使用了global关键字声明了全局变量x,然后对其值进行修改,最后打印输出结果为2。
局部作用域是指在函数内部定义的变量,局部作用域中的变量只在函数内部可见。在函数内部可以访问函数外部的全局作用域中的变量,但不能直接修改其值。
例如:
def local_scope():
x = 2
y = x + 1
print(y) # 输出3
local_scope()
print(x) # 报错,x未定义
上述代码中,local_scope函数内部定义了局部变量x,并使用该变量进行计算,然后打印输出结果为3。在函数外部尝试访问局部变量x会报错,因为其作用域仅限于函数内部。
Python中的作用域查找规则是:在函数内部访问变量时,首先会在函数内部查找,如果找不到则会向上一级作用域继续查找,直到找到为止。但如果在函数内部要修改外部(非全局)作用域中的变量,就需要使用nonlocal关键字进行声明。
例如:
def outer_function():
x = 1 # 外部作用域中的变量
def inner_function():
nonlocal x
x += 1
print(x) # 输出2
inner_function()
print(x) # 输出2
outer_function()
上述代码中,outer_function函数内部定义了变量x,然后在inner_function函数内部使用nonlocal关键字声明了变量x,并对其进行修改,最后打印输出结果为2。在outer_function函数外部访问变量x会报错。
总结来说,Python中的作用域分为全局作用域和局部作用域。全局作用域中的变量可以在整个程序中访问,局部作用域中的变量只在函数内部可见。函数内部可以引用外部(非全局)作用域中的变量,但要修改其值需要使用global或nonlocal进行声明。
