English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python 기본 강의

Python 흐름 제어

Python 함수

Python 데이터 타입

Python 파일 작업

Python 객체와 클래스

Python 날짜와 시간

Python 고급 지식

Python 참조 가이드

Python 네이밍 스페이스와 범위

이 문서에서, 이름에서 객체로의 매핑 및 변수의 범위에 대해 배울 것입니다.

Python에서 이름 공간은 무엇인가요?

당신이 'Python의 철학(The Zen of Python)'을 읽었던 적이 있다면, Python 인터프리터에서 import this를 입력하면 마지막 줄이,이름 공간은 매우 좋은 아이디어입니다-더 많은 일을 해보겠습니다!그래서 이들 미스터리스한 이름 공간은 무엇인가요? 우선 이름이 무엇인지 보겠습니다.

이름(도称为标识符)은 객체에 부여된 이름입니다. Python에서 모든 것은객체이름은 기본 객체에 접근하는 방법입니다.

예를 들어, 할당 연산을 수행할 때 a = 2,2메모리에 저장된 객체입니다.a과 연결된 이름입니다. 다음으로 어떻게 사용할 수 있는지 보겠습니다.내장 함수 어떻게 사용할 수 있는지 보겠습니다. 특정 객체의 주소(RAM에서)를 id()로 가져옵니다.

# 주의: 다른 id 값이 나올 수 있습니다
a = 2
print('id(2) =', id(2))
print('id(a) =', id(a))

출력 결과

id(2) = 9302208
id(a) = 9302208

여기서 두 가지 모두 같은 객체를 참조합니다2따라서 같은 id()를 가집니다. 재미있는 일을 해보겠습니다.

# 주의: 다른 id 값이 나올 수 있습니다
a = 2
print('id(a) =', id(a))
a = a+1
print('id(a) =', id(a))
print('id(3) =', id(3))
b = 2
print('id(b) =', id(b))
print('id(2) =', id(2))

출력 결과

id(a) = 9302208
id(a) = 9302240
id(3) = 9302240
id(b) = 9302208
id(2) = 9302208

위 단계 시퀀스에서 무엇이 일어났는지 설명해 보겠습니다. 아래 그래프로 설명하겠습니다:

Python에서 변수의 메모리 그래프

초기적으로, 객체를 생성합니다.2a = a + 1이 때 새로운 객체가 생성됩니다.3과 연결되면, a와 해당 객체가 연결됩니다.

주의하십시오, id(a)와 id(3)와 동일한 값이 있습니다.

또한, b = 2b와 연결된 새 이름2관련됩니다.

이것은 유효합니다. 왜냐하면 Python은 새로운 중복 객체를 생성하지 않기 때문입니다. 이름 바인딩의 이러한 동적 특성이 Python을 강력하게 만듭니다. 이름은 어떤 유형의 객체를 참조할 수 있습니다.

>>> a = 5
>>> a = 'Hello World!'
>>> a = [1,2,3]

모두 유효하며a다른 예제에서 세 가지 다른 유형의 객체를 참조할 것입니다.함수같은 이름도 객체와 연결될 수 있습니다. 따라서 이름도 그들을 참조할 수 있습니다.

def printHello():
    print("Hello")
a = printHello
a()

출력 결과

Hello

동일한 이름a함수를 참조할 수 있으며, 그 이름을 사용하여 함수를 호출할 수 있습니다.

Python에서 이름 공간이 무엇인가요?

이름이 무엇인지 이해한 후, 이름 공간 개념을 이어 나갈 수 있습니다.

결론적으로, 이름 공간은 이름의 집합입니다.

Python에서 이름 공간을 이미지화할 수 있습니다. 각 이름이 해당 객체에 대한 매핑입니다.

다른 이름 공간은 동시에 존재할 수 있지만 완전히 고립되어 있습니다.

Python 설명자를 시작할 때, 모든 내장 이름이 포함된 이름 공간이 생성되며, 그 설명자가 실행되는 동안 이 이름 공간이 존재합니다.

이것이 내장 기능(예: id()) print() 등이 프로그램의 어떤 부분에서든 사용할 수 있는 이유입니다. 각모듈자신의 전역 이름 공간을 생성합니다.

이 다른 이름 공간은 고립되어 있습니다. 따라서 다른 모듈에서 존재할 수 있는 동일한 이름은 충돌하지 않습니다.

모듈은 다양한 기능과 클래스를 가질 수 있습니다. 함수 호출 시 지역 이름 공간이 생성되며, 모든 이름이 정의됩니다. 클래스와 유사합니다. 아래 그래프는 이 개념을 설명하는 데 도움이 될 수 있습니다.

Python에서 다른 이름 공간의 그래프

Python 변수 범위

다양한 독특한 이름 공간이 정의되었지만, 프로그램의 각 부분에서 그들을 접근할 수 없을 수도 있습니다. 범위 개념이 작용하기 시작합니다.

스코프는 프로그램의 일부로서, 그곳에서 직접 이름 공간에 접근할 수 있으며 전치가 필요하지 않습니다.

在任何给定时刻,至少有三个嵌套作用域。

  1. 具有本地名称的当前函数的作用域

  2. 具有全局名称的模块的作用域

  3. 具有内置名称的最外部作用域

在函数内部进行引用时,将在本地命名空间中搜索名称,然后在全局命名空间中搜索,最后在内置命名空间中搜索。

如果一个函数中有一个函数,则新作用域嵌套在本地作用域内。

파이썬 스코프와 이름 공간의 예제

def outer_function():
    b = 20
    def inner_func():
        c = 30
a = 10

在这里,变量a在全局命名空间中。变量b在的本地命名空间中,outer_function()而c在的嵌套本地命名空间中inner_function()。

当我们在时inner_function(),c在我们本地,b在非本地,a在全局。我们可以为c读取和分配新值,但只能从中读取bainner_function()。

如果我们尝试分配作为值b,一个新的变量b在本地命名空间比非本地不同的创建b当我们分配一个值,同样的事情发生한 가지.

하지만, 그를 전체로 선언하지 않으면,a전체로 선언된 global a를 통해 모든 참조와 할당이 전체로 이동합니다.a다시 말해, 변수를 다시 연결하고 싶다면,b그러면, 그를 비로써 변수로 선언해야 합니다. 이 점을 더욱 명확히 설명하기 위해 다음 예제를 제공합니다.

def outer_function():
    a = 20
    def inner_function():
        a = 30
        print('a =
    inner_function()
    print('a =
a = 10

print('a =

그렇게 보면, 이 프로그램의 출력은

a = 30
a = 20
a = 10

이 프로그램에서는, 다른 이름 공간에서 세 가지 다른 변수를 정의했습니다.a그리고 이에 대한 접근을 했습니다. 다음 프로그램에서는,

def outer_function():
    global a
    a = 20
    def inner_function():
        global a
        a = 30
        print('a =
    inner_function()
    print('a =
a = 10

print('a =

프로그램의 출력은.

a = 30
a = 30
a = 30

여기서는 키워드 global을 사용하여 모든 참조와 할당이 전체로 향합니다.