Python中的命名空间和作用域

1 命名空间

命名空间是用来存放名字与对象绑定关系的。比如a=1,Python会申请内存空间存放对象1,然后将x与1的绑定关系存放在命名空间中。Python的命名空间是相互独立的。同一命名空间中不能有重名,不同的命名空间中可以有重名。就像同一个文件夹下不能存在相同的文件名,但不同的文件夹下可以存在相同的文件名。

Python中的三种命名空间
  • 内置命名空间(built-in):存放Python的内置函数
  • 全局命名空间(global):模块中定义的变量,函数,类
  • 局部命名空间(local):函数中定义的变量

命名空间的加载顺序:内置、全局、局部
命名空间的查找顺序:局部、全局、内置

2 作用域

作用域就是Python程序中可以访问变量的区域,Python中一共有4种作用域

  • local:函数内部
  • enclosing:在嵌套函数中inner嵌套在outer里面,则对inner而言,outer的命名空间就是enclosing
  • global: 模块中的变量
  • built-in: Python内置函数
    查找顺序:L-E-G-B 由里向外找

3 全局变量与局部变量

局部变量:定义在函数内部的变量,只能在函数内部访问
全局变量:在py文件中定义在函数外部的变量,在该py文件内部都可以访问

num = 1
a = "abc"

def talk():
    num = 2
    print(num) #函数内部定义了变量num,这里的num为2
    print(a)   #函数内部没有定义变量a,则会到函数外面去找变量a,这里的a就是在函数外部定义的变量a为“abc”

print(num) #在函数外部调用全局变量a
print(a)
talk()

结果为

1
abc
2
abc

如果我们想在函数内部修改函数外部的变量,这时候就需要用到global和nonlocal关键字

num = 1

def talk():
    global num # 在函数内部声明全局变量
    num = 2

talk()
print(num) # 此处的输出结果为2

在嵌套函数中则使用nonlocal关键字

def outer():
    num = 1
    print("out函数中的num=",num)
    def inner():
        nonlocal num
        num = 2
    inner()
    print("out函数中的num=", num)

结果为

out函数中的num= 1
out函数中的num= 2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值