development

globals (), locals () 및 vars ()의 차이점은 무엇입니까?

big-blog 2020. 7. 3. 17:58
반응형

globals (), locals () 및 vars ()의 차이점은 무엇입니까?


차이점은 무엇이며 globals(), locals()그리고는 vars()? 그들은 무엇을 반환합니까? 결과 업데이트가 유용합니까?


이들 각각은 사전을 반환합니다.

  • globals() 항상 모듈 네임 스페이스 의 사전을 반환합니다
  • locals() 항상 현재 네임 스페이스 사전을 반환 합니다
  • vars()반환 중 하나 (인수없이 호출하는 경우) 현재 이름 공간 또는 사전 인수의 사전.

locals그리고 vars좀 더 설명을 사용할 수 있습니다. 경우 locals()함수 내에서 호출이 그 순간 반환을 기준으로 기능 네임 스페이스의 사전을 구축 - 더 이름 지정이되어 있지 반환 사전에 반영하고, 어떤 과제 에 대한 사전이되어 있지 실제 로컬 네임 스페이스에 반영 :

def test():
    a = 1
    b = 2
    huh = locals()
    c = 3
    print(huh)
    huh['d'] = 4
    print(d)

우리에게 주어지다:

{'a': 1, 'b': 2}
Traceback (most recent call last):
  File "test.py", line 30, in <module>
    test()
  File "test.py", line 26, in test
    print(d)
NameError: global name 'd' is not defined

두 가지 메모 :

  1. 이 동작은 CPython에 따라 다릅니다. 다른 Python은 업데이트를 통해 로컬 네임 스페이스로 되돌릴 수 있습니다.
  2. CPython 2.x에서는 exec "pass"함수에 라인을 추가 하여이 작업을 수행 할 수 있습니다.

경우 locals()라고 외부 함수는 현재 네임 스페이스 실제 사전을 반환합니다. 네임 스페이스에 추가 변경 되어 사전에 반영하고, 사전에 변경 하는 네임 스페이스에 반영 :

class Test(object):
    a = 'one'
    b = 'two'
    huh = locals()
    c = 'three'
    huh['d'] = 'four'
    print huh

우리에게 주어지다:

{
  'a': 'one',
  'b': 'two',
  'c': 'three',
  'd': 'four',
  'huh': {...},
  '__module__': '__main__',
}

지금까지 내가 말한 모든 내용 locals()도 마찬가지입니다 vars()... 차이점 vars()다음과 같습니다 . 단일 객체를 인수로 받아들이고 객체를 제공하면 해당 객체의 객체를 반환 __dict__합니다. 해당 객체가 함수 아닌 경우 해당 객체 __dict__의 네임 스페이스가 반환됩니다.

class Test(object):
    a = 'one'
    b = 'two'
    def frobber(self):
        print self.c
t = Test()
huh = vars(t)
huh['c'] = 'three'
t.frobber()

그것은 우리에게 :

three

If the object was a function, you still get its __dict__, but unless you're doing fun and interesting stuff its probably not very useful:

def test():
    a = 1
    b = 2
    print test.c
huh = vars(test)       # these two lines are the same as 'test.c = 3'
huh['c'] = 3
test()

which gives us:

3

참고URL : https://stackoverflow.com/questions/7969949/whats-the-difference-between-globals-locals-and-vars

반응형