命名空间

命名空间和作用域

命名空间是从名称到对象的映射,

命名空间提供了在项目中避免名字的冲突的方法,各个命名空间是独立的,没有任何关系的。一个命名空间中不能有重名,但不同的命名空间可以重名是没有影响的。

Python中有三种命名空间:

  • 内置名称(built-in names):Python内置的名称
  • 全局名称(global names):模块中定义的名称,记录了模块的变量(函数、类、其他导入的模块、模块级的变量和常量)
  • 局部名称(local names):函数中定义的名称,记录了函数的变量(函数的参数和局部定义的变量)

查找变量的顺序:局部的命名空间–>全局命名空间–>内置命名空间

命名空间的生命周期取决于对象的作用域,如果对象执行完成,则该命名空间的生命周期就结束了。无法从外部命名空间访问内部命名空间的对象。

作用域

作用域就是一个Python程序可以直接访问命名空间的正文区域。

程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。

Python中有4中作用域:

  • L(local):最内层,包含局部变量
  • E(Enclosing):包含了非局域(non-local)也非全局(non-global)的变量。两个嵌套函数,内部函数的名称对于外部函数的作用域就为non-local。
  • G(Global):当前脚本的最外层
  • B(Built-in):包含了内建的变量/关键字等

查找规则:L->E->G->B

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域

全局变量和局部变量

定义在函数内部的变量拥有一个局域作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。

global和nonlocal关键字

global使用是在局部使用全局变量的声明。

nonlocal修改嵌套作用域中的变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值