Python의 세 가지 네임스페이스 방법 소개(예제 포함)

不言
풀어 주다: 2018-10-09 16:48:46
앞으로
3109명이 탐색했습니다.

이 글은 파이썬의 네임스페이스의 세 가지 방법을 소개합니다(예제 포함). 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

파이썬에는 세 가지 유형의 네임스페이스가 있습니다.

내장 네임스페이스는 인쇄, 입력, 정의 없이 사용할 수 있는 기타 이름 등 다양한 이름이 인터프리터를 시작할 때 자동으로 메모리에 로드되는 공간입니다

전역 네임스페이스는 우리가 위에서 아래로 정의한 모든 변수 이름과 함수 이름이 위치하는 공간으로 프로그램 실행 중에 위에서 아래로 메모리에 로드됩니다.

함수가 실행될 때 열리는 공간과 같은 로컬 네임스페이스는 함수 내에 정의된 다양한 이름을 저장합니다. 이 로컬 네임스페이스는 함수 실행이 끝나면 사라집니다.

글로벌 네임스페이스의 이름과 로컬 네임스페이스의 내장 네임스페이스의 이름을 사용할 수 있습니다.

글로벌 네임스페이스의 내장 네임스페이스의 이름을 사용할 수 있지만 로컬 네임스페이스의 이름은 사용할 수 없습니다.

내장 네임스페이스에서는 전역 및 로컬 이름을 사용할 수 없습니다.

빌트인 네임스페이스가 가장 높은 레벨을 갖고 있어 정의 없이 사용할 수 있고, 그 다음이 글로벌 네임스페이스, 가장 낮은 레벨이 로컬 네임스페이스라는 것을 생생하게 이해할 수 있습니다.

하위 네임스페이스가 이름을 사용하는 경우 먼저 자체 네임스페이스에서 검색하고, 없으면 상위 네임스페이스에서 검색합니다. 그렇지 않은 경우 상위 수준 공간을 계속 검색합니다. 최상위 내장 네임스페이스가 있으면 이를 사용합니다.

예제는 다음과 같습니다.

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 ,...}입니다.

함수 1이 함수 2 내에 중첩되면 함수 1의 불변 데이터 유형 변수는 함수 2에서 참조될 수 있지만 수정됨

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
로그인 후 복사
nonlocal은 지역 변수에만 작용할 수 있으며, 사용하면 상위 수준 로컬 네임스페이스에 변수가 있는지 자동으로 검색합니다. 그렇지 않은 경우 상위 수준 "로컬 네임스페이스"까지 위쪽으로 계속 검색합니다.

위 내용은 Python의 세 가지 네임스페이스 방법 소개(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!