Python名称空间的理解

python程序执行期间会有3个活动的命名空间,按照变量定义的位置,可以划分为以下3类:

 Local,局部命名空间,每个函数所拥有的命名空间,记录了函数中定义的所有变量,包括函数的入参、内部定义的局部变量。

 Global,全局命名空间,每个模块加载执行时创建的,记录了模块中定义的变量,包括模块中定义的函数、类、其他导入的模块、模块级的变量与常量。

  Built-in,python自带的内建命名空间,任何模块均可以访问,放着内置的函数和异常。

程序执行过程访问名称空间顺序是Local-->Global-->Built-in.

eg:

print(id(locals()))print(id(globals()))print(‘Built-in:‘ + str(locals()))g=7class Test(object):    y=2    def __init__(self,x):        print(‘--------‘)        print(g)        print(‘Local:‘ + str(locals()))        print(‘---->‘)        print(‘Global:‘ + str(globals()))        print(‘-------‘)        pass  

out:

140458094155656
140458094155656
Built-in:{‘__builtins__‘: <module ‘builtins‘ (built-in)>, ‘__doc__‘: None, ‘__spec__‘: None, ‘__package__‘: None, ‘__name__‘: ‘__main__‘, ‘__cached__‘: None, ‘__loader__‘: <_frozen_importlib_external.SourceFileLoader object at 0x7fbef2ca3eb8>, ‘__file__‘: ‘/home/z/PycharmProjects/scripts/yong.py‘}
--------
7
Local:{‘self‘: <__main__.Test object at 0x7fbef0ff8400>, ‘x‘: <function hello at 0x7fbef2cf0048>}
---->
Global:{‘Test‘: <class ‘__main__.Test‘>, ‘__builtins__‘: <module ‘builtins‘ (built-in)>, ‘__doc__‘: None, ‘g‘: 7, ‘__spec__‘: None, ‘__package__‘: None, ‘__name__‘: ‘__main__‘, ‘__cached__‘: None, ‘__loader__‘: <_frozen_importlib_external.SourceFileLoader object at 0x7fbef2ca3eb8>, ‘__file__‘: ‘/home/z/scripts/yong.py‘}
-------

原文地址:https://www.cnblogs.com/linux-1921/p/12520425.html

时间: 2024-10-11 16:43:07

Python名称空间的理解的相关文章

Python 名称空间与作用域

名称空间:存放名字的地方,准确的说名称空间是存放名字与变量值绑定关系的地方 一.名称空间又分为: 内置名称空间:在python解释器启动时产生,存放一些python内置的名字 全局名称空间:在执行文件时产生,存放文件级别定义的名字 局部名称空间:在执行文件的过程中,如果调用了函数,则会产生该函数的局部名称空间 用来存放该函数内定义的名字,该名字在函数调用时生效,在函数调用结束后失效 二.加载顺序 加载顺序:内置--->全局--->局部 x=1 def func():#全局 y=2 def f1

python名称空间namespace和作用域

Python的变量定义后都有自己的作用域,每个作用域内都有名字空间.注意??,python所有的变量和函数都是先定义,后使用!! 名称空间就是变量名称与对象的关联关系.Python中使用变量名引用对象,需要使用该变量时,就在命名空间中进行搜索,获取对应的对象.直接访问一个变量,会在四个namespace中逐一搜索,即:Local(innermost).Enclosing.Global(next-to-last).Built-in(outtermost). 1.Local(innermost):局

python名称空间

名称空间 在python解释器开始执行之后, 就会在内存中开辟一个空间, 每当遇到一个变量的时候, 就把变量名和值之间的关系记录下来, 但是当遇到函数定义的时候, 解释器只是把函数名读入内存, 表示这个函数存在了, 至于函数内部的变量和逻辑, 解释器是不关心的. 也就是说一开始的时候函数只是加载进来, 仅此而已, 只有当函数被调用和访问的时候, 解释器才会根据函数内部声明的变量来进行开辟变量的内部空间. 随着函数执行完毕, 这些函数内部变量占用的空间也会随着函数执行完毕而被清空. def fun

Python名称空间和闭包

一.名称空间 1.定义:又名 name space,顾名思义,就是存放名字的地方.比如:若变量x = 1,1存放在内存中, 而名称空间正是存放名字x与1绑定关系的地方. 2.分类: locals : 函数内的名称空间,包括局部变量和形参 globals: 全局变量 builtins:内置模块的名字空间 注意:不同变量的作用域就是由这个变量所在的命名空间决定的. 3.作用域(范围) 全局范围:全局有效 局部范围:局部有效 查看作用域方法:globals(),locals() 4.作用域的查找顺序:

python基础:名称空间与作用域

Python的变量定义后都有自己的作用域,每个作用域内都有名字空间.名称空间就是变量名称与对象的关联关系.Python中使用变量名引用对象,需要使用该变量时,就在命名空间中进行搜索,获取对应的对象.从目前python的实现上来讲,内部使用了字典,但是并不保证以后会更改实现,所以说现阶段,命名空间是一个字典(dictionary),它的键就是变量名,它的值就是那些变量的值.在一个Python程序运行中,至少有4个scopes是存在的. 直接访问一个变量可能在这四个namespace中逐一搜索. L

python嵌套调用,名称空间

函数的嵌套调用: 在调用一个函数的过程中,又调用了其他函数 def bar():     print('from bar')   def foo():     print('from foo')     bar()   foo() 函数的嵌套定义: 在一个函数的内部,又定义了另外一个函数 在函数内部定义的名字,只能在内部使用,在外部无法使用 def f1(): x = 1 def f2(): print('from f2') print(x) #打印值 print(f2) #打印内存地址 f2(

python基础之名称空间和作用域、函数嵌套

一.名称空间 1.定义:存放名字与值的绑定关系 2.名称空间分为:内置名称空间.全局名称空间.局部名称空间 内置名称空间:python解释器自带的名字,python解释器启动就会生成 全局名称空间:文件级别定义的名字都会存放与全局名称空间,执行python文件时会产生 局部名称空间:定义在函数内部的名字,局部名称空间只有在调用函数时才会生效,函数调用结束则失效 3.加载的顺序:三者的加载顺序:内置名称空间->全局名称空间->局部名称空间 4.取值的顺序:局部名称空间->全局名称空间-&g

python基础名称空间与作用域

1.名称空间:存放名字与值的绑定关系 2.名称空间分为三种 1)内置名称空间:python解释器自带的名字,python解释器启动就会生成 2)全局名称空间:文件级别定义的名字都会存放于全局名称空间,执行python文件时会产生x=1def func(): passclass Foo(): passimport os 3)局部名称空间:定义在函数内部的名字,局部名称空间只有在调用函数时生效def func(x,y): z=3 func(1,2)3.三者的加载顺序:内置名称空间>>全局名称空间&

python\类名称空间和对象名称空间

1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类的数据属性是共享给所有对象 print(id(g1.camp))     #引用的地址是一样的 print(id(Garen.camp)) 输出结果为: 364617767096 364617767096 其中类的函数属性是绑定到所有对象 print(id(g1.attack))      #两个引用地址不一样 print(id(Garen.attac