两者定义
接触过其他编程语言的,对变量肯定不陌生,而真正能理清楚全局变量与局部变量则又是一个层次的问题了。
从字面意思其实不难理解区分。全局表示在整个程序的所有代码块中可以被使用,而局部表示在某些特定的范围内才可以被使用。
这完全正确!但很多理论性的东西只要被放置到具体场景后,其理解的难度就是几何指数倍增。
场景假设
大家在学生时代,大部分的人肯定都碰到这样的一种情况。
班级上有同名的同学,或者同一个姓名(假设为:李飞)可能是被本班级同学所用,也可能是其他班级的某个学生或老师所用。
而下面两种情况也肯定是常发生的情况:
1、当本班级老师叫李飞上黑板做题时,大家肯定知道叫的是本班级的李飞,而不是其他叫“李飞”的人;
2、如果学校广播中喊“李飞,校门口有人找你”时,如果不指定某班级、限定学生或教师,这肯定让所有叫“李飞”的人很茫然。
代码案例
对学习编程的人来说,动手是最好的学习方式之一。这里我们就自己动手写写代码,实现上面场景。
1、从案例中可以看到定义了两个都叫name的变量,只是一个在函数外部,一个在函数里面。
2、函数Dianming内部有两次打印name值。
3、函数Dianming被调用后,还判断name的值是否为“李飞”。
看看程序执行效果:
1、函数Dianming内部的name变量被置空后,print(name)得到是空行;
2、IF语句打印的结果读取出了“李飞”。
结论:从上面两点可以判断出,函数使用的是内部的name变量值,并且内部变量name值的改变不会引起外部变量name值的变化。
现在就是另外一个问题:既然全局变量在整个程序中可以被使用,如果碰到与局部变量同名时,该如何区分是全局变量呢?
我们将上述代码做一些改动:在函数中增加了“global name”。
再来看看执行效果:
结论:global可以实现在局部变量作用域先执行全局变量,并且此时name值的变更是全局变量值的变更。
总结
1、全局变量与局部变量的本质差别在于两者作用域不同,全局变量是整个程序都可以调用,具备变量只有某部分范围可以被调用;
2、局部变量值的改变不会引起全局变量值的变化;
3、通过global关键词,可以在局部变量作用域中提升全局变量的级别,即先执行全局变量。