ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 - 변수, 로컬/글로벌 개념
    파이썬 2017. 11. 29. 15:19

    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; 과 같이 선언 방법이 따로 없기 때문에, 코드가 변수를 생성하는 의미인지, 생성된 변수에 값을 바꾸는 의미인지 잘 파악해야 합니다.