命名空间
命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的。
命名空间提供了在项目中避免名字冲突的一种方法。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。
我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。
在同一个目录下不能存在同一个文件或文件夹
在不同文件夹下可以创建相同的文件或文件夹
一般有三种命名空间:
命名空间查找顺序: 局部的命名空间去 -> 全局命名空间 -> 内置命名空间。
a = 1 #全局名称
def fun1()
b = 2 #局部名称
def fun2():
c = 3 #内嵌的局部名称
print(a,b,c)
作用域
作用域就是一个 Python 程序可以直接访问命名空间的正文区域。
在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。
Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:
有四种作用域:
# 全局作用域
a = 1
def fun1()
# 局部作用域
b = 2
def fun2():
# 内嵌作用域
c = 3
print(a,b,c)
#内建作用域
global 和 nonlocal关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
fun1()
print(num)