SWLUG(2025)/Python

[4주차] 전역 변수, 지역 변수, global&nonlocal

batterygj 2025. 8. 11. 23:09

Q. 다음 조건에 따라 작동하는 프로그램을 작성하세요.

1. 변수 x는 전역 변수로 10을 갖는다.

2. 함수 my_func() 안에서 x를 출력하고, 같은 이름의 변수 x=5를 선언해 다시 출력한다.

3. 함수 호출 후, 전역 변수 x도 출력한다.

 

하나의 함수 my_func()안에서

전역 변수 x를 출력하고, 같은 이름의 지역 변수 x=5를 선언해 다시 출력하며, 바깥의 전역 x는 영향을 받지 않는것은

불가하다.

( python에서 이것은 허용하지 않는 구조이다.)

따라서, 함수를 my_func(), my_func2() 이렇게 두개 선언하고

my_func2()에서만 지역 변수로 x=5를 선언하였다.

(global x라고 안 썼으니 전역 변수로 x=5가 되지 않는다.)

+) 예를 들어 다음과 같은 코드를 살펴보자.

 
x = 10

def my_func():
print(x) 
x = 5

my_func() 
print(x)

함수안에서 x=5가 존재하면, 그 함수 안의 모든 x를 지역 변수로 간주한다.

그러므로 print(x)에서 x는 정의 전 지역 변수로 인식된다.

따라서 위의 코드는 오류이다.

오류를 해결하려면 두가지 방법이 있다

1. 코드의 순서를 바꾸기

x = 10

def my_func():
    x = 5
    print(x)

my_func() # 출력: 5
print(x) # 출력: 10

2. global x를 명시적으로 나타내기

x = 10

def my_func():
    global x 
    print(x)  # 전역 x = 10
    x = 5     # 전역 x를 5로 바꿈

my_func() # 출력: 10
print(x)  # 출력: 5

+) 변수 선언과, 값 할당은 동시에 불가능하다. (global x=5 ❌)

+) 추가로 궁금한 결과

 
x=10

def my_func():
    global x
    print("함수 내 x(전역): ", x)
    x=5 # 전역 x=5
    print("함수 내 x(지역): ",x)

my_func() # 출력: 함수 내 x(전역): 10
                  함수 내 x(지역): 5
print("함수 밖 x: ",x) # 출력: 함수 밖 x: 5

 


 

Q. 다음 조건에 맞는 프로그램을 작성하세요.

1. 전역 변수 count=0을 선언한다.

2. 함수 increase()를 호출하면 전역변수 count가 1씩 증가한다.

3. increase()를 3번 호출한 뒤 count 값을 출력한다.

 

 

  • 전역 변수를 수정하려면 함수 안에서 global 키워드가 필요하다.
  • c에서는 count++ 라고 쓰는게 가능하지만 python에서는 반드시 count+=1(count=count+1)로 써야한다.
  • python에서는 형식지정자 %d같은 것을 사용하지 않아도 된다.