13、名称空间和作用域

名称空间

名称空间是人为的将栈区划分的几个逻辑空间,可分为内置名称空间、全局名称空间、局部名称空间
内置名称空间
内置名称空间定义范围:解释器内定义的名称
作用周期:解释器读入到内存后内置变量会加载到内存;退出解释器则释放其内置名称空间
print(input)
全局名称空间
全局名称空间定义范围:代码中顶级定义的变量,或者除了函数、类中定义的变量,都是在全局名称空间
作用周期:在python解释器开始识别代码语法时产生到代码执行完结束
a=3
print(a)
局部名称空间
局部名称空间定义范围:函数、类内定义的变量属于局部名称空间
作用周期:函数定义阶段只识别其内代码的语法。函数调用时产生,函数调用完成后结束
func():
	a=1
	b=2
func()

注意: 名称空间之间不是嵌套,是相互独立的,名称空间优先级为:内置名称空间<全局名称空间<局部名称空间
变量首先会从当前名称空间查找相应的变量,没找到则到上一级名称空间查找

print(input)
input=1
def func1():
    input=2
    print(input)
func1()
print(input)

作用域

全局名称空间和内置名称空间会伴随着代码执行的始终
局部名称空间会伴随函数的调用结束而结束

注意: 名称空间的嵌套关系以及变量的查找顺序是在函数定义阶段就确定的,和函数的调用阶段无关

global 和nonlocal

global:一般用户函数内,将函数内的变量声明为全局变量(可以在局部命名空间中修改全局命名空间的值,更改局部变量的查找路径),
          这个变量一般为不可变类型
nonlocal:名称空间的嵌套,从此时所在的局部名称空间之外的局部名称空间查找对应变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据工匠大壮

请狠狠粗暴的爱我!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值