python命名空间和作用域_Python命名空间和作用域

命名空间和作用域

命名空间

命名空间是名字和对象的映射。也就是可以把一个命名空间理解为一个字典,实际上很多当前的Python实现命名空间就是用的字典。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。

那么哪些可以是一个命名空间呢,比如Python的内建函数;一个模块的global names;一个函数的所有local names;还有一个类对象的所有属性都组成一个命名空间。

命名空间都是有创建时间和生存期的。对于Python built-in names组成的命名空间,它在Python解释器启动的时候被创建,在解释器退出的时候才被删除;对于一个Python模块的global 命名空间,它在这个module被import的时候创建,在解释器退出的时候退出;对于一个函数的local 命名空间,它在函数每次被调用的时候创建,函数返回的时候被删除。

作用域

A scope is a textual region of a Python program where a 命名空间 is directly accessible.

作用域是Python程序(文本)的某一段或某些段,在这些地方,某个命名空间中的名字可以被直接引用。这个作用域就是这个命名空间的作用域。

一个Python程序的几个作用域:

最里面的局部作用域

外层函数的局部作用域

模块的全局作用域

包含Python内置对象的内置作用域

2,global和nonlocal语句

global语句用来声明一系列变量,这些变量会引用到当前模块的全局命名空间的变量,如果该变量没有定义,也会在全局空间中添加这个变量。

global var1, var2

nonlocal语句(nonlocal是Python3.2引入的)

Python2.7中还没有nonlocal语句。nonlocal语句用来声明一系列的变量,这个声明会从声明处从里到外的命名空间去搜寻这个变量(the nearest enclosing scope),直到模块的全局域(不包括全局域),找到了则引用这个命名空间的这个名字和对象,若作赋值操作,则直接改变外层域中的这个名字的绑定。

1 deftest():2 defdo_nonlocal():3 nonlocal spam4 defdo_nonlocal2():5 nonlocal spam6 spam = "nonlocal2 spam"#修改了test()中spam的绑定7 do_nonlocal2()8 spam = "test spam"

9 do_nonlocal()10 print("after nonlocal2 asssignment:", spam) #输出:nonlocal2 spam11 test()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值