python系列教程179——作用域

Posted 人工智能AI技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python系列教程179——作用域相关的知识,希望对你有一定的参考价值。

朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow

声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

Python创建变量是在所谓的命名空间中进行的。也就是说,在代码中变量名被赋值的位置决定了这个变量名能被访问到的范围。

作用域的定义是在Python赋值的时候生成的。由于Python变量名不需要提前声明,所以Python将一个变量名被赋值的地点关联为(绑定给)一个特定的命名空间。换句话说,在代码中给一个变量赋值的地方决定了这个变量将存在于哪个命名空间,也就是它可见的范围。

除打包代码之外,函数还为程序增加了一个额外的命名空间层:在默认的情况下,一个函数的所有变量名都是与函数的命名空间相关联的。这意味着:
•一个在def内定义的变量名能够被def内的代码使用。不能在函数的外部引用这样的变量名。
•def之中的变量名与def之外的变量名并不冲突,即使是使用在别处的相同的变量名。一个在def之外被赋值的变量X与在这个def之中的赋值的变量X是完全不同的变量。

在任何情况下,一个变量的作用域总是由在代码中被赋值的地方所决定。变量可以在3个不同的地方分配,分别对应3种不同的作用域:
•如果一个变量在def内赋值,它被定位在这个函数之内。
•如果一个变量在一个嵌套的def中赋值,对于嵌套的函数来说,它是非本地的。
•如果在def之外赋值,它就是整个文件全局的。

例如,在下面的模块文件中,X = 99这个赋值语句创建了一个名为X的全局变量(在这个文件中可见),但是X = 88这个赋值语句创建了一个本地变量X(只是在def语句内是可见的)。

X = 99

def func():

    X = 88

尽管这两个变量名都是X,但是作用域可以把它们区别开来。实际上,函数的作用域有助于防止程序之中变量名的冲突,并且有助于函数成为更加独立的程序单元。

作用域的用法还会对程序维护工作有着重要的影响,例如,过度地使用全局作用域通常是糟糕的事情。

以上是关于python系列教程179——作用域的主要内容,如果未能解决你的问题,请参考以下文章

python系列教程182——内置作用域

python系列教程187——嵌套作用域

python系列教程182——内置作用域

python系列教程187——嵌套作用域

python系列教程180——作用域注意事项

Python学习:作用域(namespace)