一、命名空间
命名空间指的是保存程序中的变量名和值的地方。命名空间的本质是一个字典,用来记录变量名称和值。字典的key是变量的名称,字典的value对于的是变量的值。
例如 {‘name’:’zs’,’age’:10}
命名空间一共分为三种:局部命名空间、全局命名空间、内置命名空间
局部空间:
每个函数都有自己的命名空间,叫做局部空间,它记录了函数的变量,包括函数的参数 和局部定义的变量
全局空间:
每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包括函数、 类、其它导入的模块。
内置名称空间:
任何模块均可访问它,它存放着内置的函数和异常。
input,print,str,list,tuple…
结果:
二、作用域
作用域指的是变量在程序中的可应用范围。
作用域按照变量的定义位置可以划分为4类即LEGB:
Local(函数内部)局部作用域。
Enclosing(嵌套函数的外层函数内部)嵌套作用域(闭包)。
Global(模块全局)全局作用域。
Built-in(内建)内建作用域。(指的是builtins.py模块)
Python内层作用域访问外层作用域时的顺序:
Python搜索4个作用域[本地作用域(L)之后是上一层结构中def或者lambda的本地作用域(E),之后是全局作用域(G)最后是内置作用域(B)(即python的内置类和函数等)]
并且在第一处能够找到这个变量名的地方停下来。如果变量名在整个的搜索过程中都没有找到,Python就会报错。
注意:
在python中,模块(module),类(class)、函数(def、lambda)会产生新的作用域,其他代码块是不会产生作用域的,也就是说,类似条件判断(if……else)、循环语句(for x in data)、异常捕捉(try…catch)等的变量是可以全局使用的。
结果:
三、全局变量和局部变量
在函数中定义的变量称为局部变量,只在函数内部生效,在程序一开始定义的变量称为全局变量,全局变量的作用域是整个程序。
全局变量是不可变数据类型,函数无法修改全局变量的值。
全局变量是可变数据类型,函数可以修改全局变量的值。
结果:
结果:
原文链接:https://blog.csdn.net/beginner_WYH/article/details/109293585