全局变量与局部变量
全局变量与局部变量:
全局变量与局部变量两者的本质区别就是在于作用域
用通俗的话来理解的话,
全局变量是在整个py文件中声明,全局范围内都可以访问
局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了
如果在函数内部定义与某个全局变量一样名称的局部变量,就可能会导致意外的效果,可能不是你期望的。因此不建议这样使用,这样会使得程序很不健全
作用域
name = '张望'; def func(): name1= '诗仙' print('全局变量为:',name,'\n局部变量为:',name1) func() # 执行结果 全局变量为: 张望 局部变量为: 诗仙 print("函数外直接打印全局变量:",name)# 函数外直接打印全局变量: 张望 print('函数外直接打印局部变量':name1) # 报错了,局部变量作用域仅在函数内部
就近原则
name = '张望'; def func(): name= '诗仙' print('全局变量为:',name) func() #执行结果: 全局变量为: 诗仙 #当局部变量与全局变量一样时,取用就近原则,优先获取函数内部距离最近的变量,,如果没有再向外获取
name = '张望';def func(): #name= '诗仙' print('全局变量为:',name) func()#执行结果: 全局变量为: 张望 #函数内部没有,向外获取
global关键字
name = '张望'; def func(): global name name = '诗仙' print('全局变量为:',name) func() print('函数外打印全局变量:',name) # 执行结果: 全局变量为: 诗仙 函数外打印全局变量: 诗仙 # 使用global关键字就是告诉python编译器这个变量不是局部变量而是全局变量,其实有点像是"引用"的意思,可以简单理解为,此时 global name 就是全局变量 name
nonlocal关键字
字面意思就是指当前的这个变量不是局部变量。nonlocal是Python3.0中新增的关键字,python2.x不支持
def func(): age =2 def func2(): age*=2 print('全局变量为:',age) return func2() func() #执行结果: 报错:UnboundLocalError: local variable 'age' referenced before assignment
age = 3 def func(): age =2 def func2(): nonlocal age # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止 age*=2 print('全局变量为:',age) return func2() func() #执行结果: 全局变量为: 4
global 与 nonlocal
global可以在任何地方修饰变量,而且被global修饰的变量直接被标识为全局变量,对该变量修改会影响全局变量的值,但不影响函数中未被global修饰的同名变量(依然是局部变量),
nonlocal只能在嵌套函数(可能还有其他的地方,我还没有检查)中使用,用于标识嵌套函数中的变量是包含该嵌套函数的函数中的同名变量,在嵌套函数中修改变量会影响函数中的变量。
如果在函数中使用global修饰了变量,那么在嵌套函数中用nonlocal修饰同名变量会发生报错,因为nonlocal表示该变量在函数中已经定义,但检查时因为同名变量被global修饰为全局变量,所以不存在同名的局部变量,从而导致错误。
---恢复内容结束---

浙公网安备 33010602011771号