Variable

변수Variable

전역 변수Global Variable

전역 변수란 전체 영역에서 접근할 수 있는 변수이다. 따라서 함수 안에서도 접근 할 수 있어야 한다.

g_var = 1 #전역 변수

def func():
	print("g_var = {}" .format(g_var))

if __name__ == "__main__":
	func()

(base) : g_var = 1

함수 안에서의 전역 변수의 변경 시도하면 다음과 같은 값을 출력한다.

g_var = 1

def func():
	g_var = 2
	print("g_var = {} in function." .format(g_var)

if __name == "__main__":
	func()
	print("g_var = {} in main." .format(g_var)

(base) : g_var = 2 in function
		 g_var = 1 in main

함수 안에서 전역 변수의 변경이 이루어지지 않은 이유는 함수 안에서 전역 변수를 변경한 것이 아닌 새로운 지역 변수 g_var를 생성하였기 때문이다.

지역 변수Local Variable

지역 변수란 전역 변수의 반대되는 개념이다. 특정 지역에서만 접근할 수 있는 변수라는 의미이다. 함수 바깥에선 접근할 수 없고 함수가 호출될 때 생성되었다 호출이 끝나면 사라진다. 함수 안에서 전역변수를 변경하는것도 물론 가능한데, global키워드를 활용해야 한다.

g_var = 1

def func():
	global g_var
	g_var = 20

if __name__ == "__main__":
	print("g_var : {} before global".format(g_var))
	func()
	print("g_var : {} after global".format(g_var))

(base) : g_var : 1 before global
		 g_var : 20 after global

또한 함수를 정의할 때 함수 내부에 또 다른 함수를 정의할 수 있다.

def outer():
	a = 1
	def inner():
		b = 2

c = 3

위 코드에서 변수 a는 outer 함수 입장에서는 지역 변수인 반면, inner 함수 입장에서는 지역변수가 아니다. 그렇다면 inner 함수 입장에서 outer 함수에 선언된 변수를 변경하기 위해선 어떻게 해야할까? 함수 안에서 a를 바꾸려고 시도하면 새로운 지역변수 a를 생성하며, a는 전역변수가 아니기에 global 키워드를 사용할 수도 없다. 그 방법은 nonlocal키워드를 사용하면 된다.

def outer():
	a = 1
	b = 2
		def inner():
			nonlocal a
			a = 100
		inner()

	print(
	"locals in outer : a = {}, b = {}".format(a, b))

if __name__ == "__main__"
	outer()

(base) : locals in outer : a = 100, b = 2

위 코드에서 살펴본 nonlocal 키워드의 용도는 inner 함수 안에서 outer 함수의 a를 사용할 것이라고 선언하는 것이다.




Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • [CS231n]Exercise1.5 - Features
  • [CS231n]Exercise1.4 - Two Layer Net
  • [CS231n]Exercise1.3 - Softmax
  • [CS231n]Exercise1.2 - Support Vector Machine