python3.7保存代码_Python3.7之namespace

Python3.7之namespace

一、namespace

在 Python 中,名字是一个字符串对象,它与它指向的对象构成一个{name:object}关联。

也可以把一个namespace理解为一个字典。

二、作用域

Python 中name-object的关联存储在不同的作用域中,各个不同的作用域是相互独立的。

而我们就在不同的作用域中搜索name-object。

Python中使用变量名引用对象,需要使用该变量时,就在命名空间中进行搜索,获取对应的对象。

名称空间有四种:LEGB

locals 是函数内的名字空间,包括局部变量和形参

enclosing 在嵌套函数中外部函数的名字空间, 若fun2嵌套在fun1里,对fun2来说,fun1的名字空间就是enclosing(闭包中常见)

globals 当前的模块空间,模块就是一些py文件。也就是说,globals()类似全局变量

builtins 内置模块的名字空间,也就是内置变量或者内置函数的名字空间,print(dir(builtins))可查看包含的值

当程序引用某个变量的名字时,就会从当前名字空间开始查找,查找顺序(LEGB):

locals -> enclosing function -> globals -> builtins

三、生命周期

1.builtins 在python解释器启动的时候,便已经创建,直到退出。

2.globals 在模块定义被读入时创建,通常也一直保存到解释器退出。

3.locals 在函数调用时创建,直到函数返回,或者抛出异常之后,销毁。

4.递归函数每一次均有自己的名字空间。

四、代码引例

print('1. globals: ', globals()) # 全局名称空间,此时不包含a

a = 1000000000 # 定义全局变量a

def func():

print('1. func locals: ', locals()) # 此时函数内的名称空间为空

a = 1 # 局部变量a

b = 2

global p # 函数内部调用global声明的时候,可将变量存储在globals中

p = 9999

def inner_func():

print('1. inner_func locals: ', locals())

# 此处locals中已经有了nonlocal声明的a,且此时的a为外部嵌套函数里的值

m = 3

n = 4

nonlocal a # nonlocal关键字来修改外部嵌套函数的名字空间。只能在内部嵌套函数使用。

a = m + n

print(a)

print('2. inner_func locals: ', locals())

inner_func()

print(a, b, p)

print('2. func locals: ', locals())

func()

print(a)

print('2. globals: ', globals())

'''

1. globals: {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.sourcefileloader object at>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'C:/Users/Administrator/Desktop/新建文件夹/practice2.py', '__cached__': None}

1. func locals: {}

1. inner_func locals: {'a': 1}

7

2. inner_func locals: {'a': 7, 'm': 3, 'n': 4}

7 2 9999

2. func locals: {'b': 2, 'inner_func': .inner_func at 0x00000178D8C2A6A8>, 'a': 7}

1000000000

2. globals: {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.sourcefileloader object at>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'C:/Users/Administrator/Desktop/新建文件夹/practice2.py', '__cached__': None, 'a': 1000000000, 'func': , 'p': 9999}

'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值