Python函数进阶之函数命名空间

前言

命名空间指的是保存程序中的变量名和值的地方。命名空间的本质是一个字典,用来记录变量名称和值。字典的key是变量的名称,字典的value对于的是变量的值。
例如 {‘name’:’zs’,’age’:10}
命名空间一共分为三种:局部命名空间、全局命名空间、内置命名空间
局部空间:
每个函数都有自己的命名空间,叫做局部空间,它记录了函数的变量,包括函数的参数 和局部定义的变量
全局空间:
每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包括函数、 类、其它导入的模块。
内置名称空间:
任何模块均可访问它,它存放着内置的函数和异常。
input,print,str,list,tuple…

一、命名空间的访问

局部名称空间使用 locals() 函数来访问
全局命名空间的访问使用globals()函数访问。

局部命名空间:

def func(name,age):
	num=10
	ret=locals()
	print(ret)
func('zs',20)

全局命名空间:

a=10
def func(name,age):
	num=10
	ret=locals()
	print(ret)
func('zs',20)
ret=globals()
print(ret)

很多内置变量名称。

二、命名空间加载顺序

内置命名空间(程序运行前加载)->全局命名空间(当程序运行的时候加载全局命名空间)->局部命名空间(程序运行中:函数被调用时才加载)当函数返回结果 或 抛出异常时,被删除。每一个递归调用的函数都拥有自己的命名空间。

print('xxx')
a=10
b=20
def func():
name='zs'
age=10
print(name,age)
func()

三、命名空间查找顺序

当使用某个变量的时候,先从局部命名空间中找,如果能找到则停止搜索,如果找不到在去全局名称空间中查找,如果找到则停止搜索,如果找不到则到内置名称空间中查找,如果找不到则报错。

def func():
	print(id)
func()

嵌套函数的情况:
1、先在当前 (嵌套的或 lambda) 函数的命名空间中搜索
2、然后是在父函数的命名空间中搜索
3、接着是模块命名空间中搜索
4、最后在内置命名空间中搜索

def outter():
	def inner():
		print(id)
	inner()
outter()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值