변수가 전역 변수임을 나타내면 변수가 아직 생성되지 않은 경우 해당 변수를 생성하지 않습니다. 글로벌 문 은 실제로과 어떻게 다릅니 까? 그것은 그것이 수정되기 위해 존재할 필요가 없기 때문에 분명히 단지 그것을 수정하는 것이 아닙니다. 이이 범위를 벗어날 수여기서 liveth는 파이썬에서 선언했지만 정의되지 않은 전역 변수를 선언합니까?
def foo():
global cat, dog
dog = 1
foo()
print('dog' in globals()) # => True
print(dog) # => 1
print('cat' in globals()) # => False
print(cat) # => NameError
을 진행하면이 또한 오류 (놀라운 일이 아니다)을 제기
def foo():
global cat, dog
dog = 1
def bar():
cat = 2
foo()
bar()
print(dog)
print(cat) # => NameError
그래서 분명히 글로벌 수정은 실행중인 기능의 범위 내에서 작동합니다. 어떤 방식 으로든 이것이 가비지 수집기로 인한 것입니까? 거기에 주어진 이름을 가진 개체의 생성을 기다리고 함수의 끝에서 지워지는 일부 팬텀 globalizer 객체가 있습니까?
개를 값에 할당하기보다 우선적으로, 개가 없었습니다. – Goodies
개가 글로벌 선언문보다 먼저 존재하지 않기 때문에 개를 직접 수정하지 않는 것이 분명합니다. 존재하지 않는 것을 수정할 수 없습니다. – Goodies
가비지 컬렉터는 아무 관련이 없습니다. 'global'은 변수를 생성하지 않습니다. 'foo()'안에있는 globals()에서''cat ''을 체크하면 거짓으로 대답 할 것입니다. – gdlmx