您的位置:首页 > 编程语言 > Python开发

Python中的命名空间和作用域

2020-06-28 05:18 344 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: