* 저도 프로그래밍을 처음 공부 하는 것이기 때문에 틀린 설명이 있을 수도 있습니다. 그런 부분을 발견했을 때 따끔한 피드백을 주시면 감사하겠습니다!



global scope(전역 범위) vs local scope(지역 범위)

number = 5

def number_function() :
    number = 6
    print(f"number inside function : {number}")
    
number_function()
print(f"number outside function : {number}")


먼저 위와 같이 코드를 입력합니다. 

저는 number = 5 라는 variable(변수)를 선언하였고, 다시 number_function() 이라는 function(함수)를 선언하었습니다. 함수의 내용은 변수 number를 6으로 바꾼다는 내용입니다.

어떤 결과가 나올지 먼저 추측해보시고 스크롤을 내려 결과를 확인해보시길 바랍니다.









number_function() 의 결과값은 6으로 출력되었고, 마지막줄은 결과값이 5로 출렸되었습니다.

똑같은 이름의 변수인데도 값이 달라지는 이상한 현상이 발생한 것입니다.



이 현상을 이해시켜주는 개념이 바로 global scope(전역 범위) 와 local scope(지역 범위) 입니다.

global scope(전역 범위) 와 local scope(지역 범위)의 뜻을 살펴보면,


global scope : 해당 file 전체에 걸쳐서 영향력을 행사함

local scope : 부분(ex. 함수 내부)에서만 영향력을 행사함. (함수) 밖에는 아무 영향도 끼치지 않음


이라고 할 수 있겠습니다.


따라서 함수 number_function()에서 선언한 변수 number = 6는 함수 밖에서는 적용되지 않았던 것입니다. 그리고 마지막 줄은 원래 선언되어있던 변수 number = 5로 결과값이 출력되었습니다.


* global scope(전역 범위) 와 local scope(지역 범위)를 변수의 입장에서 말한다면, global variable(전역 변수) 와 local variable(지역 변수) 라고 부릅니다.



global keyword(글로벌 키워드)

number = 5

def number_function() :
    global number
    number = 6
    print(f"number inside function : {number}")
    
number_function()
print(f"number outside function : {number}")


이번엔 함수 number_function()에 global number 라는 내용을 추가해보았습니다. 

이번에도 어떤 결과가 나올지 먼저 추측해보시고 스크롤을 내려 결과를 확인해보시길 바랍니다.









아까와는 달리 이번에는 모두 6이라고 출력되었네요. global number 라는 내용을 추가로 입력했더니 결과값이 같아졌습니다. 변수 number = 6는 원래 함수 number_function() 안에서만 유효했지만, global keyword(글로벌 키워드)를 통해 파일 전체에서 유효하도록 바꾸었기 때문입니다.


global keyword(글로벌 키워드)의 형태를 살펴보면,


global + 변수이름 (ex. global number)

(의미 : 지역 변수를 전역 변수로 바꾸어줌)


이라고 할 수 있습니다.


다시 위의 작성한 코드로 돌아가보겠습니다. 

global keyword(글로벌 키워드) 덕분에 함수 number_function()의 변수 number는 파일 전역에 걸쳐 영향을 끼치는 전역 변수로 바뀌었습니다. 그래서 첫줄에 선언된 변수 number는 함수 number_function()의 영향을 받아 6으로 바뀌었고, 마지막 줄에서는 바뀐대로 6으로 출력된 것입니다.







*보너스 퀴즈

number = 5

def number_function() :
    global number
    number = 6
    print(f"number inside function : {number}")

print(f"number outside function : {number}")    
number_function()


위의 코드를 출력하면 어떤 결과값이 나올까요?

어떤 결과가 나올지 먼저 추측해보시고 스크롤을 내려 결과를 확인해보시길 바랍니다.









글로벌 키워드를 사용했음에도 서로 다른 결과값이 출력됨을 확인할 수 있습니다.

그 이유는 파이썬은 먼저 입력한 코드 순으로 결과를 출력하기 때문입니다.


def number_function() :
    global number
    number = 6
    print(f"number inside function : {number}")

이 부분은 함수의 내용이 어떤 것인지 설정하는 코드일 뿐이라서 실제로는 출력되지 않습니다.


따라서 실제 출력되는 순서는 아래와 같습니다.

1. print(f"number outside function : {number}")    
2. number_function()


변수 number가 6으로 바뀌는 것은 함수 number_function() 안에서 일어나는 일이기 때문에,

print(f"number outside function : {number}") 에서 먼저 5로 출력되고, 그 다음 작성되어있는 함수 number_function()에서 6으로 출력되는 것입니다.

블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,