一、变量的作用域
1-1、全局变量-global关键字
1、修改一个全局变量
当你需要在函数内部修改全局变量的值时,你需要使用
global
关键字来指明这一点。如果不这样做,Python会认为你在函数内部创建了一个新的局部变量,它与全局变量同名但实际上是两个不同的变量。
global
关键字在Python中不是用来创建变量的。
当你定义一个函数并在函数内部想要修改一个全局变量时,你需要使用global
关键字来告诉Python:“嘿,我指的是这个全局变量,而不是创建一个新的局部变量。”
在Python中,如果你尝试在一个函数内部使用global
关键字来引用一个不存在的全局变量,并且随后对这个变量进行赋值操作,那么Python确实会在全局作用域中创建这个新的变量。但是,global
关键字本身并不直接“创建”变量;它仅仅是一个声明,告诉Python解释器你打算在全局作用域中操作这个变量。
实际上,变量的创建是通过赋值操作完成的。当你对一个变量进行赋值时,如果这个名字在当前的作用域中不存在,Python就会在更高一级的作用域中查找(在这个情况下是全局作用域),如果仍然找不到,它就会在全局作用域中创建一个新的变量。而global
关键字的作用是在这个过程中告诉Python:“我知道这个变量在全局作用域中(即使它现在还不存在),我打算在那里操作它。”
1-2、局部变量
1-3、嵌套函数:nonlocal
关键字
在嵌套函数中,对外部函数的局部变量进行访问或修改需要用到 nonlocal
关键字,而不是 global
。
def outer_function():outer_var = 10def inner_function():nonlocal outer_varouter_var = 20print(outer_var) # 输出: 20inner_function()print(outer_var) # 输出: 20outer_function()
【注意事项】:
避免使用全局变量:全局变量可能导致代码难以理解和维护,尤其是在大型项目中。通常建议使用函数参数和返回值来传递数据,而不是依赖全局变量。
命名冲突:在函数内部,如果局部变量和全局变量同名,局部变量会覆盖全局变量。但是,这种覆盖仅在函数内部有效,函数外部的全局变量不会受到影响。
global
关键字:在函数内部修改全局变量时,必须使用global
关键字。否则,Python会认为你在创建一个新的局部变量。