파이썬 - 변수, 로컬/글로벌 개념
https://programmers.co.kr/learn/questions/543
1. 변수 생성
우선 변수 생성에 관해서 답변드리자면, 파이썬에서의 변수가 생성되는 시점은 해당 변수에 어떠한 값이 할당 되었을 때 입니다.a = 1
문장이 있으면 이 문장이 실행된 순간 1 이 할당된 변수 a
가 생성 됩니다.
같은 의미로 r1 = (-b + (b ** 2 - 4 * a * c) ** 0.5) / (2 * a)
이 문장이 실행된 순간 변수 r1
이 생성 되는 것 입니다.
2. 변수 범위
파이썬에서의 범수 범위는 c언어나 java와 다른 점이 있습니다.
변수를 찾을 때 우선 함수 내부를 찾고 그 이후 함수 외부를 찾습니다.
다르게 말하자면 지역(Local) 변수를 확인한 후 전역(Global) 변수를 확인한다는 것입니다.
예를들어
def print_add(): a = 10 r = a + b print('결과는 {}'.format(r)) a = 1 b = 2 print_add()
이 경우 r = a + b
에서 a
는 a = 10
코드가 지역변수 범위에 있기때문에 함수 외부의 a = 1
의 a
가 아닌, 함수 내부의 a = 10
의 a
를 가리킵니다.b
는 함수 내부(Local)에 b
가 선언 되어있지 않아서 전역변수(Global)인 b = 2
를 가리킵니다.
만약 코드에 b = 2
가 존재하지 않는다면 변수 b
에 할당된 값이 없기 때문에 에러가 발생합니다.
함수 외부에 선언된 변수는 함수 내부에서 사용 가능하지만, 그 반대는 불가능 합니다.
def print_add(): a = 10 r = a + b print('결과는 {}'.format(r)) b = 2 print(a) '''에러 발생'''
함수 내부의 r = a + b
의 a
는 함수 내부의 10을 가리키지만, 함수 외부의 print(a)
는 함수 내부의 a = 10
을 가리킬 수 없기때문에 에러가 발생합니다.
매개변수와 함수 안에서 생성한 변수 이름이 중복된 경우
def print_add(a): a = 10 r = a + b print('결과는 {}'.format(r)) a = 1 b = 2 print_add(a)
이 경우 함수내부의 변수 a
는 새로 변수를 생성한 것이 아니라 매개변수 a
의 값을 1에서 10으로 바꾸는 의미가 됩니다.
c언어와 java처럼 int a = 1;
과 같이 선언 방법이 따로 없기 때문에, 코드가 변수를 생성하는 의미인지, 생성된 변수에 값을 바꾸는 의미인지 잘 파악해야 합니다.