从品牌网站建设到网络营销策划,从策略到执行的一站式服务
小编这次要给大家分享的是详解Python命名空间namespace及作用域原理,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。
曾经学C++的时候,经常听到这个名词,它主要是为了避免命名冲突而产生的。
就像有A(4个苹果),B(6个苹果)两个人,10个苹果,如果只标签了苹果,你无法判断哪个苹果是属于哪个人的,因为标签都是一样的;但是如果标签是A.苹果,B.苹果,那么是不是很容易就知道了苹果是谁的了。
命名空间:提供了一种从名称到对象的映射;主要是通过字典来实现的。
在python中,函数、模块等都有自己的命名空间:
局部命名空间(local namespace):即函数中定义的名称 —— 包括函数中的变量、参数、局部变量等;
全局命名空间(global namespace):即模块中定义的名称 —— 包括模块中的变量、函数、类、参数、常量、导入(import)的模块等;
内置命名空间(built-in namespace):即python内置的名称 —— 包括各种内置函数、Exception等;
而,当python需要使用变量时,会在上述命名空间中依次查找,顺序是:
局部命名空间,全局命名空间、内置命名空间。
同一命名空间中不能有重名,但不同命名空间可以。
可以通过locals()、globals() 函数来获取命名空间的值(字典),在程序的不同位置执行结果不一定一致,因为结果是针对当前位置来说的。
locals()
globals()
可以通过字典形式获取其中的值:
作用域:可以理解为变量所起作用的范围,超出范围则某变量不能被使用。在python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则报错。Python 中只有模块(module),类(class)以及函数(def、lambda)才会产生新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会产生新的作用域的。
作用域可以分为四种:
Local:最内层,包含局部变量,一般指的是函数内部的作用域;
Enclosing:包含非局部但是也不是全局的变量,主要是嵌套时,外层函数的变量,那么相对内层函数来说,嵌套的外层函数中的变量既不是局部变量也不是全局变量。
Global:全局变量,例如当前模块中的全局变量。
Build-in:内置变量。
查找顺序一般是:Local--->Enclosing--->Global--->Build-in
def test1(): x1 = 1 #Enclosing 作用域 def test2(): x2 = 1 #Local 作用域 print('x2=',x2) x1 = 100 #很明显,外层作用域中的x1没有受到影响,因为这里的x1属于Local test2() return x1 aa = test1() print('aa=',aa)
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图