1. 变量作用域
在python中,作用域可以分为:
- 内置作用域:python预先定义的
- 全局作用域:所编写的整个程序
- 局部作用域:某个函数内部范围
每次执行函数,都会创建一个新的命名空间,这个新的命名空间就是局部作用域。
同一函数不同时间运行,其作用域也是独立的。
不同函数也可以具有相同的参数名,其作用域也是独立的。
def fn():
a= 3 # 局部变量
print('内部: ', a) # 内部: 3
fn()
print(a) # name 'a' is not defined
【代码说明】上述代码中在函数内部定义了变量a,因其在函数内部的局部作用域中定义,所以在函数外是取不到的,报错:name 'a' is not defined
a = 17
def fn():
print(a) # 17
fn()
print(a) # 17
【代码说明】在函数内部可以使用全局变量,反之不可
但是在函数内使用全局变量时,也要注意其声明的先后顺序,如下:
def fn():
print(a) # 17
a = 17
fn()
print(a) # 17
【代码说明】上述全局变量a在函数调用前声明,在函数内部可以使用,如果像下面这样使用的话:
注意: 在局部作用域中可以引用全局变量,但是不可以修改它,如下代码会发生错误:
def fn():
a += 3
print(a) # UnboundLocalError: local variable 'a' referenced before assignment
a = 17
fn()
def fn():
print(a) # name 'a' is not defined
fn()
a = 17
【代码说明】上述代码中,全局变量a在函数fn调用后声明,在函数内部是获取不到的,会报错
a = 17 # 全局变量
def fn():
a = 3 # 局部变量
print(a) # 3
fn()
print(a) # 17
【代码说明】上述代码中,两个a处于不同的作用域,所以互不影响
2. global
如果要在函数中使用函数外的变量,可以在变量名前使用global关键字
示例代码:
def fn():
global a # 使用全局变量
a = 170
a += 3
print(a) # 173
a = 17
fn()
print(a) # 173