T I L / 5월 29일

Jay·2020년 5월 29일
0

Today I Learned 🧐

목록 보기
22/71
post-thumbnail

지역변수, 전역변수

  • 지역변수는 함수 등 특정 영역에서만 사용할 수 있도록 선언된 변수고, 지역변수는 영역에 상관없이 사용할 수 있는 변수다
  • 함수 내에서 전역변수와 같은 변수명을 선언하면 지역변수로서 기능한다.
  • 리스트의 경우 함수 내에서 리스트의 특정 인덱스 값을 변경하는 것은 지역변수를 선언하는 것과 다르고, 전역변수에 반영이 된다.
a = 5
b = [1, 2, 3, 4, 5]

def may():
    a = a + 1
    print(a)

may()

def june():
    b[0] = 0
    print(b)

june()

def july():
    b = b + [6]
    print(b)
    
july()   

이 경우 제대로 실행되는건 june() 함수 뿐이다.
may(), july()는

UnboundLocalError: local variable 'b' referenced before assignment

이라는 오류가 발생한다.
지역에서 ' a = '을 치는 순간 a라는 로컬변수가 생성되고, 따라서 등호 다음에 나오는 a + 1 에서 컴퓨터는 a라는 로컬변수 값을 가져오려고 한다. 하지만 로컬 변수 a 라는것을 정의하고 있는 과정이지 아직 컴퓨터는 a의 값을 모르기 때문에 가져올수 없다는 내용의 오류가 발생한다.

리스트의 경우도 마찬가지인데, 로컬변수 b의 값을 모르기 때문에 [6]을 더할수가 없다.

이런 오류를 맞닥뜨린다면 아마 [ 전역변수 a = 전역변수 a + 1 ] 을 생각했을 것이고, 6이 프린트 되기를 바랐을 것이다. 이런 경우에는 global a 라고 선언해주면 된다.

def aug():
    global a 
    a = a + 1
    print(a)    # 6
    
aug()
print(a)   # 6

Algorithm

문제 풀 때 속도 생각하기.

profile
You're not a computer, you're a tiny stone in a beautiful mosaic

0개의 댓글