이 글은 파이썬의 네임스페이스의 세 가지 방법을 소개합니다(예제 포함). 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
파이썬에는 세 가지 유형의 네임스페이스가 있습니다.
내장 네임스페이스는 인쇄, 입력, 정의 없이 사용할 수 있는 기타 이름 등 다양한 이름이 인터프리터를 시작할 때 자동으로 메모리에 로드되는 공간입니다
전역 네임스페이스는 우리가 위에서 아래로 정의한 모든 변수 이름과 함수 이름이 위치하는 공간으로 프로그램 실행 중에 위에서 아래로 메모리에 로드됩니다.
함수가 실행될 때 열리는 공간과 같은 로컬 네임스페이스는 함수 내에 정의된 다양한 이름을 저장합니다. 이 로컬 네임스페이스는 함수 실행이 끝나면 사라집니다.
글로벌 네임스페이스의 이름과 로컬 네임스페이스의 내장 네임스페이스의 이름을 사용할 수 있습니다.
글로벌 네임스페이스의 내장 네임스페이스의 이름을 사용할 수 있지만 로컬 네임스페이스의 이름은 사용할 수 없습니다.
내장 네임스페이스에서는 전역 및 로컬 이름을 사용할 수 없습니다.
빌트인 네임스페이스가 가장 높은 레벨을 갖고 있어 정의 없이 사용할 수 있고, 그 다음이 글로벌 네임스페이스, 가장 낮은 레벨이 로컬 네임스페이스라는 것을 생생하게 이해할 수 있습니다.
하위 네임스페이스가 이름을 사용하는 경우 먼저 자체 네임스페이스에서 검색하고, 없으면 상위 네임스페이스에서 검색합니다. 그렇지 않은 경우 상위 수준 공간을 계속 검색합니다. 최상위 내장 네임스페이스가 있으면 이를 사용합니다.
예제는 다음과 같습니다.
num = 1 #这是全局命名空间内定义的num = 1 def func1(): #这个函数会创建一个局部命名空间1 num = 2 #这是在局部命名空间1定义的num = 2 def func2(): #这个函数会创建一个局部命名空间2 num = 3 #这是在局部命名空间2 内 定义的num = 3 print(num) #这是在局部命名空间2内 使用num 变量 func2() # 调用函数func2时 会执行该命令创建局部命名空间2 func1() #调用函数func1时会创建局部命名空间1, #这几个命名空间的级别顺序是:内置>全局>局部1>局部2 #当print(num)指令执行时它会在局部2内查找是否有num,发现有则直接引用,如果没有则会到上一级(局部1)中查找,局部1没有则继续到上一级(全局)查找
또 다른 예를 살펴보세요:
#max()函数是内置的函数,如果我们在全局命名空间中定义了函数名为max的函数时,则该函数就失效了,也就是说在自身空间内找到了max()后就不去内置命名空间查找了 def max(a,b,c): return 'max失效了?' print(max(1,2,3))# 正常情况下应该输出3(max函数功能是返回最大值),但是因为我们把max这个名字占用了,所以当使用时程序就不去上一级空间(内置命名空间)去查找了
네임스페이스와 관련된 두 함수 globals() 및 locals()
globals()를 사용하면 전역 네임스페이스에 정의된 모든 이름을 볼 수 있습니다
예 현재 네임스페이스에 정의된 모든 이름을 보려면 locals()를 사용합니다. 전역인 경우 전역을 반환합니다. 이 두 함수의 반환 값은 다음과 같습니다. 사전으로 간주되며 형식은 {key1:value1,key2:value2 ,...}입니다.
def func1(): a = 1 def func2(): a = a + 1 #此处会报一个严重错误,因为a同时出现在等号两边,Python会先执行等号右边的表达式, #发现你在引用a,然后它会先在本空间查找a,结果找到了等号左边的a,其结果就是“在定义变量前引用变量” pass func2() func1()
#如果想要修改,可以使用nonlocal(python3中新增) def func1(): a = 1 def func2(): nonlocal a a = a + 1 func2() print(a) func1() #我们可以看出,执行func2()后再输出a,a已经变成2了 2
위 내용은 Python의 세 가지 네임스페이스 방법 소개(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!