Python 범위 내에서 해당 범위 내에서 아직 선언되지 않은 변수에 할당하면 해당 변수가 키워드로 전역 범위 변수를 참조하는 것으로 함수에서 일찍 선언 되지 않는 한 새 로컬 변수가 작성 global
됩니다.
무슨 일이 일어나는지 알아보기 위해 수정 된 의사 코드 버전을 살펴 보겠습니다.
# Here, we're creating a variable 'x', in the __main__ scope.
x = 'None!'
def func_A():
# The below declaration lets the function know that we
# mean the global 'x' when we refer to that variable, not
# any local one
global x
x = 'A'
return x
def func_B():
# Here, we are somewhat mislead. We're actually involving two different
# variables named 'x'. One is local to func_B, the other is global.
# By calling func_A(), we do two things: we're reassigning the value
# of the GLOBAL x as part of func_A, and then taking that same value
# since it's returned by func_A, and assigning it to a LOCAL variable
# named 'x'.
x = func_A() # look at this as: x_local = func_A()
# Here, we're assigning the value of 'B' to the LOCAL x.
x = 'B' # look at this as: x_local = 'B'
return x # look at this as: return x_local
실제로 func_B
이름이 지정된 변수로 모두 다시 작성할 수 x_local
있으며 동일하게 작동합니다.
순서는 함수가 전역 x의 값을 변경하는 연산을 수행하는 순서까지만 중요합니다. 따라서이 예에서는 func_B
calls 이므로 order는 중요하지 않습니다 func_A
. 이 예에서 순서는 중요합니다.
def a():
global foo
foo = 'A'
def b():
global foo
foo = 'B'
b()
a()
print foo
# prints 'A' because a() was the last function to modify 'foo'.
주 global
에만 전역 개체를 수정해야합니다. 선언하지 않고 함수 내에서 액세스 할 수 있습니다 global
. 따라서, 우리는 :
x = 5
def access_only():
return x
# This returns whatever the global value of 'x' is
def modify():
global x
x = 'modified'
return x
# This function makes the global 'x' equal to 'modified', and then returns that value
def create_locally():
x = 'local!'
return x
# This function creates a new local variable named 'x', and sets it as 'local',
# and returns that. The global 'x' is untouched.
사이의 차이를 참고 create_locally
하고 access_only
- access_only
호출되지에도 불구하고 글로벌 X에 액세스 global
하더라도, 그리고 create_locally
사용하지 않는 global
것이 이후 중 하나, 그것은 로컬 복사본을 만들어 할당 값을.
여기서 혼란은 전역 변수를 사용하지 않아야하는 이유입니다.