今天用7集的时间,彻彻底底的学了下全局变量。
之前看这部分要占到7集,还挺好奇的,以为有很多新奇的东东。
而实际上,并没有。
来来回回就是在围绕“函数内不允许修改全局变量”展开。
往好了说,就是老师讲的非常细致,对定义强调非常到位。
往不好了说,有点水了。
![f98c9ab97f6cb3ce92c3eda37fc4cbf2.png](https://i-blog.csdnimg.cn/blog_migrate/7fb363437223b89599084b419be4e21b.png)
236集,基本代码演练
全局变量 是在 函数外部定义 的变量,所有函数都可以使用这个变量。
弹幕有个大哥公然开车:苍老师是全局变量,老婆是局部变量。
这么一想,感觉一下子就理解了呢。
![47d2746599d2d4331241103cd4e8159a.png](https://i-blog.csdnimg.cn/blog_migrate/4f93764a8347c8408f3d00e8a8374971.png)
237集,[扩展]PyCharm的单步跟踪技巧
主要讲了调试区域左侧的窗口。
第一行的 demo1,意思是现在执行的是 函数 demo1。
py后面的数字 7 ,代表准备执行的代码行数是第7行。
而第二行 py 后面的 15 ,代表整体程序运行到的位置是第15行。
![4b0b5a7a7c3b699b9d39539839cebe32.png](https://i-blog.csdnimg.cn/blog_migrate/0d01e936f884ad5c46be8a3c18774fab.png)
通过左侧窗口,不仅可以看到当前要执行的是哪一行代码,还能知道执行的是哪个函数。
238集,函数内部不允许修改全局变量的值
绝大多数语言不推荐使用全局变量,但是使用全局变量会简化程序开发,因此 python 中对全局变量有些特殊的要求,毕竟可变范围太大,导致程序出错,后期排查是非常困难的。
在函数内部,可以 通过全局变量的引用获取对应的数据。
但是,不允许直接修改全局变量的引用,也就是使用赋值语句修改全局变量的值。
如果使用赋值语句,会在函数内部,定义一个局部变量。
![41b765ed1d1539f1067bf4d25cf7f155.png](https://i-blog.csdnimg.cn/blog_migrate/ed1ac1b94ff779b4c954282db5d5d013.jpeg)
比如例子中,全局变量 num 与函数 demo1 中的 num 完全没有任何关系。
239集,单步调试确认局部变量的定义
针对236集的程序,使用单步调试,进一步强化函数内部无法修改全局变量的值这一概念。
如果在一个函数内部要想使用一个变量,python的解释器会优先在函数内部查找是否有局部变量,如果有,就直接使用;如果没有找到同名的局部变量,才会向外查找同名的全局变量,如果找到就会继续使用。
![f2a2c893cc0ea1f7829f321f219725ed.png](https://i-blog.csdnimg.cn/blog_migrate/8dc568f406a8fefbd58edca7f0f636e2.png)
240集,global关键字修改全局变量
如果在函数内部需要修改全部变量的值,需要使用 global 进行声明,告诉解释器,这个变量是全局变量。
再使用赋值语句时,就不会创建局部变量。
![038513ebad55a4cd94b8da51756887e6.png](https://i-blog.csdnimg.cn/blog_migrate/1238b16dbc4af56c824db3923a1363e1.png)
从图可见,当使用了 global 关键字后,选中 num ,则程序中的所有 num 都会高亮。而没使用 global 关键字时,则不会出现此情况。
241集,全局变量定义的位置及代码结构
为了保证所有的函数都能够正确使用到全局变量,应该 将全局变量定义在其他函数的上方。
![aeef4bdd83058c05423a8d8e947330f1.png](https://i-blog.csdnimg.cn/blog_migrate/b53c603c8226591ad16cc21211ebf21e.png)
这其实就是解释器的特点,一行一行去执行。
比如上图,将 全局变量name 定义在了函数demo的下方,解释器运行函数的时候压根就看不到定义的全局变量name,就只能报错了。
因此,在开发时,应该把模块中的所有全局变量,定义在所有函数上方,就可以保证所有函数,都能够正常的访问到每一个全局变量了。
![936ffc36e90a069d93be064e916ac8d0.png](https://i-blog.csdnimg.cn/blog_migrate/fe620ae26c9692f66df4968783eb78f5.png)
242集,全局变量命名的建议
如果局部变量的名字和全局变量的名字相同,PyCharm会在局部变量的下方显示灰色的虚线。
![f1b868ecaa5ec18f89179e8a8fb52e11.png](https://i-blog.csdnimg.cn/blog_migrate/e5dcef8de0b83e25b717f17f6f2b3c09.png)
为了避免局部变量和全局变量出现混淆,在定义全局变量的时候,有些公司会有一些开发要求,比如:全局变量名前应该加 g_ 或者 gl_ 的前缀。
当然,不同的公司要求可能会不一样的。
不过这点对于只把 python 当爱好、没指望用它吃饭的人来说,应该不是啥问题。
![7fa5f84bbef1285d8842789ea0a8808a.gif](https://i-blog.csdnimg.cn/blog_migrate/3bc4f06b469994ab47c792103a56788d.gif)